Update em data e hora

10/10/2020

0

Ola Colegas,

Estou com um problemas na gravação em um campo data_hora (timestamp).
Estou utilizando o Firebird.

emissao := formatdateTime('dd.mm.yyyy hh:mm:ss',CampoData.Date);
if Acao = 'Inserir) Then
     Sql := 'Insert into Tabela (codigo, emissao) Values ('+meucodigo+','+emissao)   //NAO INCLUSAO DÁ CERTO
Else
    Sql := 'Update tabela Set Emissao = '+Emissao+' Where codigo = '+Meucodigo;
sqltabela.sql.text := sql;
Try
   Sqltabela.ExecSQl;
Except
    on e : Exception do               
         KDialog('Erro ao executar comando SQL'#13#13'Classe de erro: '+e.ClassName+#13+'Erro encontrado: ' + e.message,'Alerta','ERRO');
end;


Erro:

Erro ao executar comando SQL

Classe de erro: TDBXError
Erro encontrado: Token unknown - line 1, column 570
1

Se eu copiar o comando e executar no IBexpert executa sem erro.

O que posso fazer para melhorar?
Usando o TSQLQuery e o TFDQuery também dá o mesmo.
Dirceu Morais

Dirceu Morais

Responder

Posts

13/10/2020

Imex

Bom dia,

Acho que é melhor utilizar parâmetros na instrução SQL sempre que possível. Ex:

if Acao = 'Inserir) Then
    Sql := 'Insert into Tabela (codigo, emissao) Values (:Codigo, :Emissao)'
Else
    Sql := 'Update tabela Set Emissao = :Emissao Where codigo = :Codigo';
sqltabela.sql.text := sql;
Try
   Sqltabela.ParamByName('Codigo').AsString := meucodigo;
   Sqltabela.ParamByName('Emissao').AsDateTime := CampoData.Date;
   Sqltabela.ExecSQl;


obs: no código acima o campo Codigo foi considerado alfanumérico (string). Você pode adaptar a linha de código de acordo com o tipo de dados correto do campo

Espero que ajude
Responder

13/10/2020

Emerson Nascimento

visto que na inclusão dá certo, tente informar os campos de forma idêntica (na inclusão está tudo em minúsculas, mas na alteração está com a primeira maiúscula).

outra sugestão é fazer um typecast na data:
if (Acao = 'Inserir') Then
    Sql := 'Insert into Tabela (codigo, emissao) Values ( :codigo, :emissao )'
Else
    Sql := 'Update tabela Set emissao = :emissao where codigo = :codigo';

sqltabela.sql.text := sql;

Try
   Sqltabela.ParamByName('codigo').AsString := MeuCodigo;
   Sqltabela.ParamByName('emissao').AsSQLTimeStamp := DateTimeToSQLTimeStamp( CampoData.Date ); // unit Data.SQLTimSt
   Sqltabela.ExecSQl;
Except
    on e : Exception do              
         KDialog('Erro ao executar comando SQL'#13#13'Classe de erro: '+e.ClassName+#13+'Erro encontrado: ' + e.message,'Alerta','ERRO');
end;

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