Erro gravar atualização no banco de dados.

18/06/2018

0

Boa tarde Amigos,

Estou tendo alguns problemas ao fazer atualização no banco de dados, usando instrução SQL.

Quando tento usar este comando para atualizar:
Update NFSaida Set  NFeStatus = ''+QuotedStr(''100'')+
'',NFEPROTOCOLO = ''+QuotedStr(''152180019364488'')+'',NFEDATARECIBO = ''+QuotedStr(''18.06.2018 14:18'')+
'' Where NFNumNota = :0 and NFSerie = :1''

Me retorna o seguinte erro:

Classe: TDBXErrorErro:
Token unknown - line 1, column 145
1


Mas se eu faço a jogo este comando no IBEXPERT ele grava normalmente.

O que pode ser?
Dirceu Morais

Dirceu Morais

Responder

Post mais votado

19/06/2018

Qual a instrução exata que você está executando no IBExpert?

Emerson Nascimento

Emerson Nascimento
Responder

Mais Posts

19/06/2018

Dirceu Morais

Estou usando assim:
SqlQuery.sql.text:='Update NFSaida Set  NFeStatus = ''+QuotedStr(''100'')+
'',NFEPROTOCOLO = ''+QuotedStr(''152180019364488'')+'',NFEDATARECIBO = ''+QuotedStr(''18.06.2018 14:18'')+
'' Where NFNumNota = 1233 and NFSerie = 1''
SqlQuery.ExecSQl;
Responder

19/06/2018

Dirceu Morais

No ibexpert eu uso assim:

Update NFSaida Set  NFeStatus = '100'
,NFEPROTOCOLO = '152180019364488',NFEDATARECIBO = '18.06.2018 14:18'
Where NFNumNota = :0 and NFSerie = :1


Na janela que surge eu informo os parametros NFnumnota e NFSerie
Responder

21/06/2018

Dirceu Morais

Vê se podem me ajudar.

Nesta instrução gravou sem sem problemas.
'Update NFSaida Set  NfIdNFE = ''52180601017680000119550010000165581675393370'',NFeStatus = ''100'',NFEPROTOCOLO = ''152180019373004'',NFEDATARECIBO = ''20.06.2018 18:49'' Where NFNumNota = :0'


Já nesta aqui deu o erro: Classe: TDBXErrorErro: Token unknown - line 1, column 145 1
'Update NFSaida Set  NfIdNFE = ''52180601017680000119550010000165631228129800'',NFeStatus = ''100'',NFEPROTOCOLO = ''152180019374440'',NFEDATARECIBO = ''21.06.2018 10:05'' Where NFNumNota = :0'


Deve ser alguma coisa relacionada com a data?

Como Resolver isto?

Estou usando o Firebird 2.5, DBExpress e Delphi XE6

Responder

21/06/2018

Luiz Neto

No primeiro comando executado no IBExpert funcionou e o segundo? <br />
Por um acaso o primeiro comando (que deu certo) tentou cravar no codigo para ver se da problema no processo de comunicação do Delphi com o FB?
Att
LM
Responder

21/06/2018

Emerson Nascimento

tente passar todos os valores como parâmetros.

// usei variáveis porque não sei de onde você tira os valores
strStatus := '100';
strProtocolo := '152180019374440';
dtDataHora := StrToDateTime( '06/21/2018 10:05:00' ); // MM/DD/YYYY HH:mm:ss
intNumero := 1233;
intSerie := 1;

SqlQuery.Sql.text := 'Update NFSaida Set NFeStatus = :nfStatus, NFEPROTOCOLO = :nfProtocolo, NFEDATARECIBO = :nfDataRecibo Where NFNumNota = :nfNum and NFSerie = :nfSerie';
SqlQuery.ParamByName('nfStatus').AsString := strStatus;
SqlQuery.ParamByName('nfProtocolo').AsString := strProtocolo;
SqlQuery.ParamByName('nfDataRecibo').AsSQLTimeStamp := DateTimeToSQLTimeStamp( dtDataHora );
SqlQuery.ParamByName('nfNum').AsInteger := intNumero;
SqlQuery.ParamByName('nfSerie').AsInteger := intSerie;
SqlQuery.ExecSQL;
Responder

21/06/2018

Dirceu Morais

Se eu gravar diretamente pelo IBExpert os <br>dois dão certo.</br>

Segundo comando executado pelo ibExpert
Update NFSaida Set  NfIdNFE =
'52180601017680000119550010000165631228129800',NFeStatus = '100',
NFEPROTOCOLO = '152180019374440',NFEDATARECIBO = '21.06.2018 10:05' Where NFNumNota = 16563
Plan
PLAN (NFSAIDA INDEX (PK_NFSAIDA))

1 record(s) was(were) updated in NFSAIDA

------ Performance info ------
Prepare time = 0ms
Execute time = 47ms
Current memory = 35.586.460
Max memory = 36.819.356
Memory buffers = 2.048
Reads from disk to cache = 0
Writes from cache to disk = 0
Fetches from cache = 15



tentou cravar no codigo para ver se da problema no processo de comunicação do Delphi com o FB?

Não entendi bem sua pergunta, mas tentei gravar várias vezes pelo programa. Sempre o primeiro dá certo e o segundo dá erro.

Tentei usando o Firedac e também apresentou o mesmo erro.
Tentei mudando a data para: yyyy.mm.dd hh:mm e a mesma coisa um dá certo e outro não

;(
Responder

21/06/2018

Dirceu Morais

tente passar todos os valores como parâmetros.

// usei variáveis porque não sei de onde você tira os valores
strStatus := '100';
strProtocolo := '152180019374440';
dtDataHora := StrToDateTime( '06/21/2018 10:05:00' ); // MM/DD/YYYY HH:mm:ss
intNumero := 1233;
intSerie := 1;

SqlQuery.Sql.text := 'Update NFSaida Set NFeStatus = :nfStatus, NFEPROTOCOLO = :nfProtocolo, NFEDATARECIBO = :nfDataRecibo Where NFNumNota = :nfNum and NFSerie = :nfSerie';
SqlQuery.ParamByName('nfStatus').AsString := strStatus;
SqlQuery.ParamByName('nfProtocolo').AsString := strProtocolo;
SqlQuery.ParamByName('nfDataRecibo').AsSQLTimeStamp := DateTimeToSQLTimeStamp( dtDataHora );
SqlQuery.ParamByName('nfNum').AsInteger := intNumero;
SqlQuery.ParamByName('nfSerie').AsInteger := intSerie;
SqlQuery.ExecSQL;


Hum!

Não sei o critério usado pelo sql, por aceitar algumas data/hora e outras não. Mas passei como parâmetro a data, numero da nota e a serie e deu certo na instrução que estava com erro.

Agora vou fazer mais testes com estes parâmetros.


Brigadú

:)
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar