Jump to content
Fivewin Brasil

Erro besta em SQL... Resolvido


Valdir

Recommended Posts

Pessoal...

Agradeço à todos que se empenharam em ajudar a solucionar o meu problema.

Graças a grande ajuda do amigo João Bosco, conseguimos identificar a causa do erro.

cCmdSql:= "INSERT INTO aliquota (ufori,nomori,ufdest,nomdest,aliq,indexuf) VALUES('"+cUFORI+"','"+cNOMORI+"','"+cUFDEST+"','"+cNOMDEST+"',"+str(cAliq)+",'"+cINDEXUF+"')"

Para variáveis tipo numérica, é necessário seguir a seguinte estrutura :

"+str(cAliq)+",

ou seja: Aspas duplas e o STR .

Vaelu João Bosco.

Brigadão.

Abraços.

Link to comment
Share on other sites

amigo, eu fiz esta funcão e tem me ajudado muito.

*-------------------------------------------------------------------------------
* 
*-------------------------------------------------------------------------------
FUNCTION TRANSFORMA_SQL(VARIVEL_SQL,TIPO_VARIAVEL_SQL,TAMANHO_SQL,DECIMAIS_SQL)
	Cursor('SQL')
	RETORNO_SQL := "'"
	IF TIPO_VARIAVEL_SQL = "N"  && Numerica
	   IF Valtype(VARIVEL_SQL) = 'N'
	      RETORNO_SQL := RETORNO_SQL + STR(VARIVEL_SQL,(TAMANHO_SQL),(DECIMAIS_SQL)) + "'"
	   ELSE
	      MsgStop('Parametro Passado Não é Válido '+ CHR(13) +'Conteudo.: '+   (VARIVEL_SQL) +CHR(13)+ 'Tipo Esperado.: '+ alltrim(TIPO_VARIAVEL_SQL) +CHR(13)+ 'Tipo Passado.: '+ alltrim(Valtype(TIPO_VARIAVEL_SQL))+CHR(13)+CHR(13)+'Favor Ligar para o Suporte '+ M->SUPORTE+chr(13)+ 'Rotina.: '+ ProcName()+chr(13)+'Linha.: '+ alltrim(str(ProcLine(),10,0)) ,sistema   )
	   ENDIF
	ENDIF
	IF TIPO_VARIAVEL_SQL = "D"  && Data
	   IF VARIVEL_SQL = CTOD('')
	      RETORNO_SQL := RETORNO_SQL + '00000000' + "'"
	   ELSE
	      RETORNO_SQL := RETORNO_SQL + DTOS(VARIVEL_SQL) + "'"
	   ENDIF
	ENDIF
	IF TIPO_VARIAVEL_SQL = "T" &&&.OR. TIPO_VARIAVEL_SQL = "C"  && Caracter,   && Texto
	   IF TIPO_VARIAVEL_SQL != "C"
	      VARIVEL_SQL := TiraAcento(VARIVEL_SQL)
	   ENDIF
	   RETORNO_SQL := RETORNO_SQL + PADR(ALLTRIM( UPPER(VARIVEL_SQL) ),(TAMANHO_SQL)) + "'"
	ENDIF
	IF TIPO_VARIAVEL_SQL = "B"  && BLOB
	   RETORNO_SQL := RETORNO_SQL + ANY2SQL( MemoRead( (VARIVEL_SQL) )) + "'"
	ENDIF
	IF TIPO_VARIAVEL_SQL = "L"  && Logico
	   RETORNO_SQL := RETORNO_SQL + IF(VARIVEL_SQL=(.T.),"S","N") + "'"
	ENDIF
	IF TIPO_VARIAVEL_SQL = "C"  && Caracter, sem remover os acentos
	   RETORNO_SQL := RETORNO_SQL + PADR(ALLTRIM(upper(VARIVEL_SQL)),(TAMANHO_SQL)) + "'"
	ENDIF
RETURN RETORNO_SQL

Quem sabe pode ajudar voce .

Exemplo de Uso

		   BEGIN TRANSACTION
				cQuery_Mtabela  := "INSERT INTO bancos ( "
		  		cQuery_Mtabela	 := cQuery_Mtabela + "NOME" 
				cQuery_Mtabela	 := cQuery_Mtabela + ",ENDERECO"
				cQuery_Mtabela	 := cQuery_Mtabela + ",BAIRRO"
				cQuery_Mtabela	 := cQuery_Mtabela + ",CEP"
				cQuery_Mtabela	 := cQuery_Mtabela + ",CIDADE"
				cQuery_Mtabela	 := cQuery_Mtabela + ",ESTADO"
				cQuery_Mtabela	 := cQuery_Mtabela + ",TELEFONE"
				cQuery_Mtabela	 := cQuery_Mtabela + ",FAX"
				cQuery_Mtabela	 := cQuery_Mtabela + ",NUMERO_DO_BANCO"
				cQuery_Mtabela	 := cQuery_Mtabela + ",AGENCIA"
				cQuery_Mtabela	 := cQuery_Mtabela + ",CONTA"
				cQuery_Mtabela	 := cQuery_Mtabela + ",NUMCHE"
				cQuery_Mtabela	 := cQuery_Mtabela + ",TIPO_CT"
				cQuery_Mtabela	 := cQuery_Mtabela + ",FILIAL_E"      
				cQuery_Mtabela	 := cQuery_Mtabela + ",CARTEIRA"
				cQuery_Mtabela	 := cQuery_Mtabela + ",ADICIONAL_BOLETO"
				cQuery_Mtabela	 := cQuery_Mtabela + ",ULTIMO_NUMERO"
				cQuery_Mtabela	 := cQuery_Mtabela + ",DIGITO_AGENCIA"
				cQuery_Mtabela	 := cQuery_Mtabela + ",DIGITO_CONTA"
				cQuery_Mtabela	 := cQuery_Mtabela + ",DESCONTO_ANTECIPACAO"
				cQuery_Mtabela	 := cQuery_Mtabela + ",MULTA_ATRASO"
				cQuery_Mtabela	 := cQuery_Mtabela + ",MORA_ATRASO"
				cQuery_Mtabela	 := cQuery_Mtabela + ",PROTESTAR_APOS"
				cQuery_Mtabela	 := cQuery_Mtabela + ",CAMINHO_LAYOUT"
				cQuery_Mtabela	 := cQuery_Mtabela + ",GERAR_REMESSA"
				cQuery_Mtabela	 := cQuery_Mtabela + ",MONE_LAYOUT_REMESSA"
				cQuery_Mtabela	 := cQuery_Mtabela + ",INSTRUCOOES"
				cQuery_Mtabela	 := cQuery_Mtabela + ",CODIGO_CEDENTE"
				cQuery_Mtabela	 := cQuery_Mtabela + ",SEQUENCIA_REMESSA"
				cQuery_Mtabela	 := cQuery_Mtabela + ",TIPO_BOLETO"
				cQuery_Mtabela	 := cQuery_Mtabela + ",MODELO_BOLETO_A4"
				cQuery_Mtabela	 := cQuery_Mtabela + ",MARGEM_SUPERIOR_A4"
				cQuery_Mtabela	 := cQuery_Mtabela + ",CONFIGURACAO_EXTRA_1"
				cQuery_Mtabela	 := cQuery_Mtabela + ",CONFIGURACAO_EXTRA_2"
				cQuery_Mtabela	 := cQuery_Mtabela + ",TAMANHO_NOSSO_NUMERO"
				cQuery_Mtabela	 := cQuery_Mtabela + " ) VALUES ( "
		  		cQuery_Mtabela	 := cQuery_Mtabela + TRANSFORMA_SQL(T_NOME_BANCO,"T",35,0)  						+ "," 
				cQuery_Mtabela	 := cQuery_Mtabela + TRANSFORMA_SQL(T_ENDE_BANCO,"T",28,0)  						+ "," 
				cQuery_Mtabela	 := cQuery_Mtabela + TRANSFORMA_SQL(T_BAIR_BANCO,"T",18,0)  						+ ","
				cQuery_Mtabela	 := cQuery_Mtabela + TRANSFORMA_SQL(T_CEP__BANCO,"T",09,0)  						+ ","
				cQuery_Mtabela	 := cQuery_Mtabela + TRANSFORMA_SQL(T_CIDA_BANCO,"T",22,0)  						+ ","
				cQuery_Mtabela	 := cQuery_Mtabela + TRANSFORMA_SQL(T_ESTA_BANCO,"T",02,0)  						+ ","
				cQuery_Mtabela	 := cQuery_Mtabela + TRANSFORMA_SQL(T_TELE_BANCO,"T",14,0)  						+ ","
				cQuery_Mtabela	 := cQuery_Mtabela + TRANSFORMA_SQL(T_FAX__BANCO,"T",14,0)  						+ ","
				cQuery_Mtabela	 := cQuery_Mtabela + TRANSFORMA_SQL(T_NUME_BANCO,"T",06,0)  						+ "," 
				cQuery_Mtabela	 := cQuery_Mtabela + TRANSFORMA_SQL(T_AGEN_BANCO,"T",10,0)  						+ ","
				cQuery_Mtabela	 := cQuery_Mtabela + TRANSFORMA_SQL(T_CONT_BANCO,"T",35,0)  						+ ","
				cQuery_Mtabela	 := cQuery_Mtabela + TRANSFORMA_SQL(T_CHEQ_BANCO,"N",06,0)  						+ ","
				cQuery_Mtabela	 := cQuery_Mtabela + TRANSFORMA_SQL(IF(T_TIPO_CTA="Corrente",1,IF(T_TIPO_CTA="Poupança",2,IF(T_TIPO_CTA=" ",0,0))),"N",35,0)  			+ ","
				cQuery_Mtabela	 := cQuery_Mtabela + TRANSFORMA_SQL(T_CODI_EMPRESA,"N",06,0)  						+ ","		      
				cQuery_Mtabela	 := cQuery_Mtabela + TRANSFORMA_SQL(T_CARTEIRA,"T",03,0)  							+ "," 
				cQuery_Mtabela	 := cQuery_Mtabela + TRANSFORMA_SQL(T_CUSTO_EMISSAO,"N",18,4)  					+ ","
				cQuery_Mtabela	 := cQuery_Mtabela + TRANSFORMA_SQL(T_ULTIMO_BOLETO,"N",18,0)  					+ ","
				cQuery_Mtabela	 := cQuery_Mtabela + TRANSFORMA_SQL(T_DGV_AGENCIA,"T",01,0)  						+ ","
				cQuery_Mtabela	 := cQuery_Mtabela + TRANSFORMA_SQL(T_DGV_CONTA,"T",01,0)  							+ ","	
				cQuery_Mtabela	 := cQuery_Mtabela + TRANSFORMA_SQL(T_DESC_ANTECIP,"N",07,3)  						+ ","	
				cQuery_Mtabela	 := cQuery_Mtabela + TRANSFORMA_SQL(T_MULTA_BOLETO,"N",07,3)  						+ ","
				cQuery_Mtabela	 := cQuery_Mtabela + TRANSFORMA_SQL(T_MORA_BOLETO,"N",07,3)  						+ ","
				cQuery_Mtabela	 := cQuery_Mtabela + TRANSFORMA_SQL(T_DIAS_PROTESTO,"N",04,0)  					+ ","
				cQuery_Mtabela	 := cQuery_Mtabela + ANY2SQL(T_DADOS_LAYOUT)                                  + ","
				cQuery_Mtabela	 := cQuery_Mtabela + TRANSFORMA_SQL(IF(T_GERAR_REMSSSA=(.T.),"S","N"),"T",01,0)+ ","
				cQuery_Mtabela	 := cQuery_Mtabela + TRANSFORMA_SQL(T_LAYOUT_REMSSA,"T",45,0)  					+ ","
				cQuery_Mtabela	 := cQuery_Mtabela + TRANSFORMA_SQL(T_INSTRUCOES_BOL,"T",250,0)  					+ ","
				cQuery_Mtabela	 := cQuery_Mtabela + TRANSFORMA_SQL(T_CODIGO_CEDENTE,"T",20,0)  					+ ","
				cQuery_Mtabela	 := cQuery_Mtabela + TRANSFORMA_SQL(T_CODIGO_SEQUENCIA,"N",10,0)  				+ ","
				cQuery_Mtabela	 := cQuery_Mtabela + TRANSFORMA_SQL(T_TIPO_BOLETO,"N",01,0)  						+ ","
				cQuery_Mtabela	 := cQuery_Mtabela + TRANSFORMA_SQL(T_OPCAO_EMISSAO_MODELO_BOLETO,"N",01,0)   + ","
				cQuery_Mtabela	 := cQuery_Mtabela + TRANSFORMA_SQL(T_MARGEM_SUPERIOR_BOLETO,"N",06,0) 		   + ","		
				cQuery_Mtabela	 := cQuery_Mtabela + TRANSFORMA_SQL(T_CONFIGURACAO_EXTRA_1,"T",10,0) 		   + ","
				cQuery_Mtabela	 := cQuery_Mtabela + TRANSFORMA_SQL(T_CONFIGURACAO_EXTRA_2,"T",10,0) 		   + ","
				cQuery_Mtabela	 := cQuery_Mtabela + TRANSFORMA_SQL(T_TAMANHO_CAMPO_NOSSO_NUMERO,"N",06,0) 		
				cQuery_Mtabela	 := cQuery_Mtabela + " )"
				COMITAR_DADOS_SQL(cQuery_Mtabela)
			END TRANSACTION




Traduzindo para o Seu caso Seria algo mais ou menos assim
BEGIN TRANSACTION
   cQuery_Mtabela := "INSERT INTO aliquota ( "
   cQuery_Mtabela := cQuery_Mtabela +	" ufori"
   cQuery_Mtabela := cQuery_Mtabela +	",nomori"
   cQuery_Mtabela := cQuery_Mtabela +	",ufdest"
   cQuery_Mtabela := cQuery_Mtabela +	",nomdest"
   cQuery_Mtabela := cQuery_Mtabela +	",aliq"
   cQuery_Mtabela := cQuery_Mtabela +	",indexuf"
   cQuery_Mtabela := cQuery_Mtabela +	") VALUES( "
   cQuery_Mtabela := cQuery_Mtabela + TRANSFORMA_SQL(cUFORI,"T",02,0)  	+ "," 
   cQuery_Mtabela := cQuery_Mtabela + TRANSFORMA_SQL(cNOMORI,"T",10,0) 	+ "," 
   cQuery_Mtabela := cQuery_Mtabela + TRANSFORMA_SQL(cUFDEST,"T",02,0) 	+ "," 
   cQuery_Mtabela := cQuery_Mtabela + TRANSFORMA_SQL(cUFDEST,"T",02,0) 	+ "," 
   cQuery_Mtabela := cQuery_Mtabela + TRANSFORMA_SQL(cNOMDEST,"T",02,0) + "," 
   cQuery_Mtabela := cQuery_Mtabela + TRANSFORMA_SQL(cAliq,"N",06,2) 	+ "," 
   cQuery_Mtabela := cQuery_Mtabela + TRANSFORMA_SQL(cINDEXUF,"T",02,2)  
   cQuery_Mtabela := cQuery_Mtabela + " )"
   COMITAR_DADOS_SQL(cQuery_Mtabela)
END TRANSACTION

tenho esta função que retorna o erro do banco de dados

*===============================================================================
* Funcao para Comitar o comando de Insercao de dados em uma TABELA mysql
*===============================================================================
FUNCTION COMITAR_DADOS_SQL(cQuery_Mtabela)
    Cursor("SQL")
    sql execute( cQuery_Mtabela )
    IF SQLErrorNO() > 0
	ERROS 	 := 1
	TXT_ERROS :=             "        FAVOR LIGAR PARA O SUPORTE O MAIS RAPIDO POSSIVEL         " + CRTLF
	TXT_ERROS := TXT_ERROS + "==================================================================" + CRTLF
   	TXT_ERROS := TXT_ERROS + "ERRO.: " + SQLErrorMsg() + CRTLF
   	TXT_ERROS := TXT_ERROS + "SQL Nº.: " + STR(SQLErrorNO(),06,0) + CRTLF
   	TXT_ERROS := TXT_ERROS + "BANCO DE DADOS.: " + ALLTRIM(SQLGETDBINFO()) + CRTLF
   	TXT_ERROS := TXT_ERROS + "LINHA.: " + STR(PROCLINE(),10,0) + CRTLF      
	TXT_ERROS := TXT_ERROS + "==================================================================" + CRTLF
   	TXT_ERROS := TXT_ERROS + "            DESCRICAO COMPLETA DA OPERACAO/COMANDO                " + CRTLF
	TXT_ERROS := TXT_ERROS + "==================================================================" + CRTLF
   	TXT_ERROS := TXT_ERROS + ALLTRIM(cQuery_Mtabela)+ CRTLF + CRTLF
	TXT_ERROS := TXT_ERROS + "==================================================================" + CRTLF
	MOSTAR_ERROS_DADOS(TXT_ERROS)
	**MsgStop(SQLErrorMsg()+"Erro ao Cadastar a Informação =>  ERRO SQL Nº.: " + STR(SQLErrorNO(),06,0) + CHR(13)+"Erro ao Tentar Executar o Comando Abaixo"+CHR(13)+ALLTRIM(cQuery_Mtabela) +CHR(13)+"Servidor de Banco de Dados " + alltrim(SQLGETDBINFO()) +CHR(13)+ "ERRO"+ SQLErrorMsg(),SISTEMA )	  	
	RETURN(.F.)
     ELSE
	SQL EXECUTE('COMMIT')  
	RETURN(.T.)
     ENDIF 
   

Link to comment
Share on other sites

Bom dia pessoal...

Obrigado a todos pelas dicas. Ta funcionando.

To com uma dificuldade na atualização da tabela que só aparece o registro ( no WorkBench ) após fechar o programa ( que só tem um cadastro simples, por hora )

Mas vou ver o manual da SLQLIB.

Att.

Everton

Link to comment
Share on other sites

Olá amigo Márcio...

Obrigado por compartilhar seus conhecimentos,

Com certeza estarei adotando o seu exemplo, se assim o permitir.

Do jeito que exemplificou, ficou muito claro a simplicidade da sua função.

Brigadão.

Link to comment
Share on other sites

Bom dia pessoal...

Obrigado a todos pelas dicas. Ta funcionando.

To com uma dificuldade na atualização da tabela que só aparece o registro ( no WorkBench ) após fechar o programa ( que só tem um cadastro simples, por hora )

Mas vou ver o manual da SLQLIB.

Att.

Everton

Everton, bom dia, vc não tem que dar um refresh na Table/Bd? Sei que na SQLRDD vc tem o SR_DBREFRESH limpa as informações e que atualiza as informações, mas no seu caso, vc está usando a TDOLPHIN/SQLLIB, então não sei se existe algo semelhante.

[]s,

Link to comment
Share on other sites

Everton, bom dia, vc não tem que dar um refresh na Table/Bd? Sei que na SQLRDD vc tem o SR_DBREFRESH limpa as informações e que atualiza as informações, mas no seu caso, vc está usando a TDOLPHIN/SQLLIB, então não sei se existe algo semelhante.

[]s,

Ola brother.. na SqlLib é

SQLRefresh()

Acabei de decobrir!

Faltava duas coisas o Commit e o Refresh.

Obrigado

Link to comment
Share on other sites

Everton

Boa tarde

Veja se você está executando commit

TRY
START TRANSACTION
SQL EXECUTE cSql
SQL EXECUTE "COMMIT"
END TRANSACTION
CATCH oErro
MsgAlert( "Erro : " + oErr:Operation + " -> " + oErr:Description )
lRetSql := .F.
END
Att
João Bosco

Faltava o commit e o refresh João..

Obrigado!

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...