Clipper On Line • Ver Tópico - exibir erros em MySQL

exibir erros em MySQL

Discussão sobre SQL

Moderador: Moderadores

 

exibir erros em MySQL

Mensagempor cjp » 17 Dez 2014 09:56

Alguém poderia me ensinar a usar a opção para exibição de erros e warnings em MySQL?

Vi neste site (http://www.fromdual.com/mysql-error-codes-and-messages) os códigos de erro, e também vi num outro post neste fórum que se deve usar a opção 1004 da RDDI, mas não acertei usá-la.

Alguém me ajuda?
Inacio de Carvalho Neto
cjp
Usuário Nível 6

Usuário Nível 6
 
Mensagens: 1531
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 10 vezes
Mens.Curtidas: 20 vezes

exibir erros em MySQL

Mensagempor Toledo » 17 Dez 2014 11:58

Amigo, com o uso do RDDINFO() você tem opção para retornar o código ou a mensagem do erro (em inglês).

nConnection := RDDINFO( RDDI_CONNECT, { "ODBC", "Server=localhost;Driver={MySQL ODBC 3.51 Driver};dsn=;User=root;pwd=suasenha;database=test;" } )
IF nConnection == 0
  ? "Erro Nº: "+alltrim(str(RDDINFO(RDDI_ERRORNO)))
  ? "Mensagem: "+RDDINFO(RDDI_ERROR)
  Return nil
ENDIF

As variáveis usadas:
#define RDDI_CONNECT          1001
#define RDDI_ERROR            1004
#define RDDI_ERRORNO          1005

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar de usuário

Toledo
Administrador

Administrador
 
Mensagens: 3038
Data de registro: 22 Jul 2003 18:39
Cidade/Estado: Araçatuba - SP
Curtiu: 263 vezes
Mens.Curtidas: 258 vezes

exibir erros em MySQL

Mensagempor cjp » 17 Dez 2014 15:14

Perfeito, meu caro, muito obrigado.

Tentei usar o mesmo para um UPDATE e para um INSERT INTO, mas os dois (nr do erro e mensagem) retornam NIL. Estes códigos não funcionam com o UPDATE com o INSERT INTO? Tem alguma forma de verificar o erro nestes dois comandos?
Inacio de Carvalho Neto
cjp
Usuário Nível 6

Usuário Nível 6
 
Mensagens: 1531
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 10 vezes
Mens.Curtidas: 20 vezes

exibir erros em MySQL

Mensagempor Toledo » 17 Dez 2014 16:17

Por favor, passe um exemplo de como você está usando estes dois comandos!

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar de usuário

Toledo
Administrador

Administrador
 
Mensagens: 3038
Data de registro: 22 Jul 2003 18:39
Cidade/Estado: Araçatuba - SP
Curtiu: 263 vezes
Mens.Curtidas: 258 vezes

exibir erros em MySQL

Mensagempor cjp » 17 Dez 2014 18:34

Aí vai:

Insert:

cQuery:="INSERT INTO tarefas values ('"+dst+"','"+bsnvt+"','"+alltrim(str(year(dt)))+"-"+substr(dtoc(dt),4,2)+"-"+substr(dtoc(dt),1,2)+" "+hr+"','"+alltrim(str(year(dtmax)))+"-"+substr(dtoc(dtmax),4,2)+"-"+substr(dtoc(dtmax),1,2)+"',"+alltrim(str(pr))+",'"+nmus+"','N','E','"+alltrim(vinc)+"',"+alltrim(str(tpmax))+","+alltrim(str(tpmax))+",0.0,' ','"+ass+"','"+alltrim(str(year(date())))+"-"+substr(dtoc(date()),4,2)+"-"+substr(dtoc(date()),1,2)+"','"+time()+"','Tarefa: "+substr(tr,1,52)+"',' ','"+alltrim(str(year(dtcg)))+"-"+substr(dtoc(dtcg),4,2)+"-"+substr(dtoc(dtcg),1,2)+"','2000-01-01')"
exquery(cquery)


Update:

cQuery:="UPDATE tarefas SET hrexibe='"+alltrim(str(year(dt)))+"-"+substr(dtoc(dt),4,2)+"-"+substr(dtoc(dt),1,2)+" "+hr+"' WHERE nrtarefa='"+arq+"'"
exquery(cquery)


E a função exquery está assim:

function exquery(cQuery)
         local vzcon :=0
       local nConnection :=0
       do while .t.
           nConnection=conexsql()
          if nConnection=0
            vzcon++
            if vzcon>10
               if us="I"
                  ?"Não conectou"
                  tone(261.7,33)
                  inkey(.5)
              endif
                mandmail1("","Não conectou para executar a query: "+cQuery,,2)
            else
               inkey(2)
            endif
               RDDSETDEFAULT( "DBFNTX" )
            return .f.
         else
            exit
         endif
        enddo
         do while .t.
            RDDSETDEFAULT( "SQLMIX" )
            If !RDDINFO(1003, cQuery)
             vzcon++
             if vzcon>8
                  RDDSETDEFAULT( "DBFNTX" )
              if us="I"
                cls
                ?"Não conseguiu gravar na tabela"
                ?cquery
                ?"Erro: "
                ?rddinfo(1005)
                ?rddinfo(1004)
                tone(261.7,33)
              endif
              mandmail1("","Não gravou a query (nConnection: "+alltrim(str(nConnection))+"): "+cQuery+"; vzcon: "+alltrim(str(vzcon)),,2)
              return .f.
            endif
               @ maxrow()-1,1 say "Tentando gravar na tabela; aguarde..."
            inkey(2)
           else
             exit
             EndIf
        enddo
         RDDSETDEFAULT( "SQLMIX" )
         if !RDDINFO( 1002,,, nConnection)
          if us="I"
            ?"Não desconectou no exquery"
            tone(261.7,33)
            inkey(20)
         else
            mandmail1("","Não desconectou")
         endif
        endif
         RDDSETDEFAULT( "DBFNTX" )
return .t.
Inacio de Carvalho Neto
cjp
Usuário Nível 6

Usuário Nível 6
 
Mensagens: 1531
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 10 vezes
Mens.Curtidas: 20 vezes

exibir erros em MySQL

Mensagempor Toledo » 17 Dez 2014 19:45

Amigo, na sua função exquery() você está fazendo uma conexão com o Banco de Dados a cada chamada desta função, acho que o correto seria fazer apenas uma conexão no início do programa principal e depois ao sair do programa encerrar a conexão. Então modifique esta sua função exquery() e retire os comandos entre as linhas 3 e 23, deixe apenas os comandos para executar as query.

Outra coisa é o comando RDDSETDEFAULT( "DBFNTX" ) que está na linha 29, acho que você teria que passar este comando para depois da linha 38.

[Editado] Agora que observei que no final da função exquery() você está encerrando a conexão, então a conexão no início da função você poderia deixar.

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar de usuário

Toledo
Administrador

Administrador
 
Mensagens: 3038
Data de registro: 22 Jul 2003 18:39
Cidade/Estado: Araçatuba - SP
Curtiu: 263 vezes
Mens.Curtidas: 258 vezes

exibir erros em MySQL

Mensagempor cjp » 17 Dez 2014 20:38

Sim, a ideia é justamente fazer uma conexão cada vez que a função for executada, e fechá-la ao final.

E o RDD... na linha 29 é pra sair da função (eu saio dela por falta de conexão na linha 40) com o RDD apropriado.

Mas e a mensagem de erro? É possível exibi-la também no UPDATE e no INSERT?
Inacio de Carvalho Neto
cjp
Usuário Nível 6

Usuário Nível 6
 
Mensagens: 1531
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 10 vezes
Mens.Curtidas: 20 vezes

exibir erros em MySQL

Mensagempor Toledo » 17 Dez 2014 22:54

cjp escreveu:Mas e a mensagem de erro? É possível exibi-la também no UPDATE e no INSERT?


Toledo escreveu:Outra coisa é o comando RDDSETDEFAULT( "DBFNTX" ) que está na linha 29, acho que você teria que passar este comando para depois da linha 38.


Você mudou o comando RDDSETDEFAULT( "DBFNTX" ) de lugar???

Faça o que eu orientei e depois faça um teste para ver se a mensagem de erro será exibida no UPDATE e INSERT.

Abraços,
Toledo - Clipper On Line
toledo@pctoledo.com.br
Harbour 3.2/MiniGui/HwGui
Faça uma doação para o fórum, clique neste link: http://www.pctoledo.com.br/doacao
Avatar de usuário

Toledo
Administrador

Administrador
 
Mensagens: 3038
Data de registro: 22 Jul 2003 18:39
Cidade/Estado: Araçatuba - SP
Curtiu: 263 vezes
Mens.Curtidas: 258 vezes

exibir erros em MySQL

Mensagempor cjp » 17 Dez 2014 23:51

Realmente, apareceu. Muito obrigado.
Inacio de Carvalho Neto
cjp
Usuário Nível 6

Usuário Nível 6
 
Mensagens: 1531
Data de registro: 19 Nov 2010 21:29
Cidade/Estado: paraná
Curtiu: 10 vezes
Mens.Curtidas: 20 vezes




Retornar para SQL

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 10 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro