Jump to content
Fivewin Brasil

Erro besta em SQL... Resolvido


Valdir

Recommended Posts

Bom dia pessoal..

Como falei antes, comecei a brincar e aprender os comandos SQL nativos.

Já na minha primeira experiência, deparei com o seguinte erro:

- "Data truncated for column 'aliq' at row 1"

No Bd a estrutura está assim :

- aliq,double,6,2, null

Trata-se de um simples cadastro de aliquotas do ICMS.

Pelo que entendi, seria o tamanho do campo na tabela que estaria errado.

Más como podem ver, o tamanho está correto.

Alguém, por favor, poderia me explicar o que posso estar fazendo de errado ?

Obrigado.

Link to comment
Share on other sites

Olha.. aproveitando que o Valdir ta mexendo com comandos SQL, resolvi também aprender para, aos poucos, ir mudando meus comandos do DBase para SQL.

Estou usando a SQLLib e montei uma inclusão de dados assim:

Sql_Command := "Insert To Clientes"
Sql_Command += "codigocliente, nomecliente, cidade, loja, telefonefixo, telefonecelular, Anotacoes"
Sql_Command += "VALUES"
Sql_Command += "cCodigoCliente, cNomeCliente, cCidade, cLoja, cTelefoneFixo, cTelefoneCelular, cAnotacao"
BEGIN TRANSACTION
SQl EXECUTE Sql_Command
SQL COMMIT
END TRANSACTION
Não dá erro, mas também não inclui o registro.. Já verifiquei o manual e alguns tópicos no fórum, infelizmente não cheguei a uma conclusão de onde está o erro..
Alguem poderia dar uma dica?
Att.
Everton
Link to comment
Share on other sites

Pelo que vi está faltando espaço e o IN antes do TO . Veja assim

Sql_Command := "Insert in To Clientes "

Sql_Command += " codigocliente, nomecliente, cidade, loja, telefonefixo, telefonecelular, Anotacoes "

Sql_Command += " VALUES "

Sql_Command += " cCodigoCliente, cNomeCliente, cCidade, cLoja, cTelefoneFixo, cTelefoneCelular, cAnotacao"

Link to comment
Share on other sites

deu certo não amigo,

Se não der certo posta a estrutura da sua tabela

lembrando que as vezes pode ser conversão de dados

Tipo codigocliente é INT(6) e esta recebendo da variavel cCodigoCliente como sendo char(06)

codigocliente    varchar(10) PK
nomecliente      varchar(45)
cidade           varchar(45)
loja             varchar(45)
telefonefixo     varchar(45)
telefonecelular  varchar(45)
Anotacoes        longtext   

Marcio. coloquei tudo como VarChar, mas a variável do codigo é numérica ai uso o Strzero().

Deveria dar certo não e mesmo?

Att.

Everton

Link to comment
Share on other sites

Tente assim:

Sql_command:="Insert into Clientes ( codigocliente, nomecliente, cidade, loja, telefonefixo, telefonecelular, anotacoes ) VALUES ( "

Sql_command+=Any2Sql(cCodigocliente)+","

Sql_command+=Any2Sql(cNomecliente)+","

Sql_command+=Any2Sql(cCidade)+","

Sql_command+=Any2Sql(cLoja)+","

Sql_command+=Any2Sql(cTelefonefixo)+","

Sql_command+=Any2Sql(cTelefonecelular)+","

Sql_command+=Any2Sql(cAnotacao)+")"

SqlExecute(Sql_command)

Depois veja se ele criou um sqllog.txt com algum erro na pasta do sistema.

abs

Alberto - SP

Link to comment
Share on other sites

Olá amigo Jorge...

Obrigado por responder, más infelizmente também não funfou.

Quando Incluo ou altero os valores dos campos tipo VarChar não tenho problemas.

Agora quando tento Gravar um campo Numérico, aparece o erro:

"DATA TRUNCATED for Column Aliq at Row 1"

Acontece que o campo 'Aliq' da Tabela está como numérico (Double) com duas casas decimais.

Já troquei seus tipos também e não obtive sucesso.

Alguma outra sugestão ?

Obrigado.

Link to comment
Share on other sites

Amado Mestre e Guru Evandro..

Blz meu amigo.?

Eis o código:

oQry = oServer:Query( "SELECT * FROM fivesys.aliquota Order by ufori" )
oQry:SetPages( 100 )
cCmdSql:= "INSERT INTO aliquota (ufori,nomori,ufdest,nomdest,aliq,indexuf) VALUES('"+cUFORI+"','"+cNOMORI+"','"+cUFDEST+"','"+cNOMDEST+"','+cAliq+','"+cINDEXUF+"')"
oServer:Execute( cCmdSql )
************************************************************************************
** Erro ao tentar Incluir um novo registro no Bd.
** Error description: Error MYSQL/1265 Data truncated for column 'aliq' at row 1
** No Bd a estrutura está assim :
** - aliq,double,6,2, null
************************************************************************************
Obrigado e forte abraço.
Link to comment
Share on other sites

Valdir

Mostra a string convertida :

? cCmdSql ou MsgAlert(cCmdSql)

Att

João Bosco

Olá amigo João Bosco

Obrigado por responder.

cCmdSql = "INSERT INTO aliquota (ufori,nomori,ufdest,nomdest,aliq,indexuf) VALUES('"SP"','"SAO PAULO"','"SP','"SAO APULO"','cAliq','"SPSP"')"

Reparei que a variável cAliq não passa o valor pencentual de 18,00% para a cCmdSql.

Esta variável recebe um valor digitado pelo usuário. Neste caso seria de 18,00%

Num teste aqui, substitui a variavel cAlq pelo valor de 18,00... gravou sem problemas.

Talvez o problema esteja relacionado na forma de repassar o valor da cAliq no cCmdSql.

Será que é isso ?

Obrigado.

Link to comment
Share on other sites

Valdir

Se o cAliq é valor não precisa colocar as aspas ' ', nem simples, nem dupla

o comando deve ficar assim:

cCmdSql = "INSERT INTO aliquota (ufori,nomori,ufdest,nomdest,aliq,indexuf) VALUES('"SP"','"SAO PAULO"','"SP','"SAO APULO"',18,'"SPSP"')"

o meu comando ficaria assim:

INSERT INTO aliquota (ufori,nomori,ufdest,nomdest,aliq,indexuf) VALUES('SP','SAO PAULO','SP','SAO APULO',18,'SPSP')

ou assim, se for varchar:

INSERT INTO aliquota (ufori,nomori,ufdest,nomdest,aliq,indexuf) VALUES('SP','SAO PAULO','SP','SAO APULO','18','SPSP')

Att

João Bosco

Link to comment
Share on other sites

Valdir

Se o cAliq é valor não precisa colocar as aspas ' ', nem simples, nem dupla

o comando deve ficar assim:

cCmdSql = "INSERT INTO aliquota (ufori,nomori,ufdest,nomdest,aliq,indexuf) VALUES('"SP"','"SAO PAULO"','"SP','"SAO APULO"',18,'"SPSP"')"

o meu comando ficaria assim:

INSERT INTO aliquota (ufori,nomori,ufdest,nomdest,aliq,indexuf) VALUES('SP','SAO PAULO','SP','SAO APULO',18,'SPSP')

ou assim, se for varchar:

INSERT INTO aliquota (ufori,nomori,ufdest,nomdest,aliq,indexuf) VALUES('SP','SAO PAULO','SP','SAO APULO','18','SPSP')

Att

João Bosco

Exatamente meu amigo...

O problema está relacionado com o valor da cAliq que não está sendo passado para acCmdSql.

Quando substituo a cAliq pelo valor literal de 18, o registro é incluso normalmente.

Agora preciso entender porque esse valor não está sendo passado para a cCmdSql pela variável cAliq.

Tens alguma sugestão.?

Obrigado.

Link to comment
Share on other sites

Ola Valdir a função abaixo quem me arrumou foi o Marcelo(MARCA) ele cria um arquivo texto de sua instrução SQL, fica mais fácil achar alguns erro.

AchaErro(cCmdSql)

FUNCTION AchaErro(_ComandoSql)
LOCAL cLisErr,mListOp

cLisErr := "ACHAR" + AllTrim(Str(Day(Date()))) + AllTrim(Str(Month(Date()))) + ".LOG"
mListOp := MemoRead(cLisErr)
mListOp += _ComandoSql + CHR(13) + CHR(10)
MemoWrit(cLisErr, mListOp)

WinExec( "Notepad " + cLisErr)

RETURN

Link to comment
Share on other sites

Valdir

Retire as aspas simples do seu comando '+cAliq+' e troque para +cAliq+

Ou ainda coloque as aspas simples dentro das aspas duplas " ' "+cAliq+ " ' "

Att

João Bosco

Olá amigo João Bosco...

Bom dia.

Infelizmente também não deu certo.

O mais estranho é o fato da cAliq não passar nenhum valor para cCmdSql.

Olhando a Classe, na função oServer:Execute(), é diferenciado quando se tem variaveis do tipo VarChar ou Numéricas

Muito estranho isso.

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...