exibir erros em MySQL

Forum sobre SQL.

Moderador: Moderadores

cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

exibir erros em MySQL

Mensagem por cjp »

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
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

exibir erros em MySQL

Mensagem por Toledo »

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

Código: Selecionar todos

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:

Código: Selecionar todos

#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
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

exibir erros em MySQL

Mensagem por cjp »

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
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

exibir erros em MySQL

Mensagem por Toledo »

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
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

exibir erros em MySQL

Mensagem por cjp »

Aí vai:

Insert:

Código: Selecionar todos

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:

Código: Selecionar todos

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:

Código: Selecionar todos

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
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

exibir erros em MySQL

Mensagem por Toledo »

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
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

exibir erros em MySQL

Mensagem por cjp »

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
Avatar do usuário
Toledo
Administrador
Administrador
Mensagens: 3133
Registrado em: 22 Jul 2003 18:39
Localização: Araçatuba - SP
Contato:

exibir erros em MySQL

Mensagem por Toledo »

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
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

exibir erros em MySQL

Mensagem por cjp »

Realmente, apareceu. Muito obrigado.
Inacio de Carvalho Neto
Responder