ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

[RESOLVIDO]Update campo Time vindo de um TimeEdit

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
walsh
Novato
Novato


Registrado: Domingo, 28 de Dezembro de 2014
Mensagens: 65

MensagemEnviada: Ter Jul 18, 2017 7:05 pm    Assunto: [RESOLVIDO]Update campo Time vindo de um TimeEdit Responder com Citação

Olá amigos!

necessito fazer rodar um update em uma determinada table que o valor venha de um cxTimeEdit, ou pode ser outro componente, desde que funcione hehehe.

Fiz um form para encerrar o expediente do equipamento em uma fabrica de papel para controlar paradas, produção, perdas, etc. A pessoa clica no botão encerrar e abre o form puxando a ultima hora que houve movimentação do equipamento que seria a hora de início, essa hora que a pessoa irá colocar será a hora que encerrou o expediente e irá gravar essa hora na table hora_final, até ai tudo bem, mas não estou conseguindo rodar o update.
Quando clico no botão confirmar que irá executar a query e iria jogar esse horário ele dá erro (apenas assim :. ) acredito que seja os 2 pontos da separação da hora, então acho que devo estar mandando gravar algo errado.
O codigo no botão confirmar é mais ou menos assim:

var
vrEncerra : string;
begin

vrEncerra := ' update apo_boletim_dt set boletim_hora_final = ' +strtotime(cxTimeEdit1.Text);

Já tentei com .time, TimetoStr, etc nada vai, sempre da erro igual em todos ( :. )
Fiz um teste colocando a hora manualmente no update e funcionou de boa, como abaixo:

var
vrEncerra : string;
begin

vrEncerra := ' update apo_boletim_dt set boletim_hora_final = '18:00:00';


Agradeço a ajuda de todos!
Abraço!


Editado pela última vez por walsh em Qui Jul 20, 2017 3:09 pm, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
leo_cj
Colaborador
Colaborador


Registrado: Sábado, 26 de Março de 2011
Mensagens: 1335

MensagemEnviada: Qua Jul 19, 2017 8:59 am    Assunto: Responder com Citação

Da uma olhada no que está vindo do componente, além disso, dê preferência para a utilização de parâmetros, ex:

Código:
begin
  qryEncerra.SQL.Clear;
  qryEncerra.SQL.Add(' update apo_boletim_dt set boletim_hora_final = :dt_Final');
  qryEncerra.Parameters.ParamByName('dt_Final').Value := cxTimeEdit1.Time;
end; 


outros pontos:

- O update é sem where mesmo?
- Utilizando o update você perde a referência antiga, não será necessário manter o histórico?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
natanbh1
Colaborador
Colaborador


Registrado: Terça-Feira, 15 de Março de 2011
Mensagens: 3093
Localização: Belo Horizonte - MG

MensagemEnviada: Qua Jul 19, 2017 9:33 am    Assunto: Responder com Citação

Antes do update veja se a conversão para time está ocorrendo corretamente.

Acrescente um ShowMessage antes do update :

Código:
ShowMessage(TimeToStr(StrToTime(cxTimeEdit1.Text)));

_________________
''A persistência é o caminho para o êxito.''
Charlie Chaplin
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
walsh
Novato
Novato


Registrado: Domingo, 28 de Dezembro de 2014
Mensagens: 65

MensagemEnviada: Qui Jul 20, 2017 3:14 pm    Assunto: Responder com Citação

Olá amigos!

Estava pensando a tarde no dia que postei que talvez funcionaria mesmo com parâmetro, porque outros campos que recebem hora desse componente vem por parâmetro.
Então consegui resolver da seguinte forma:

procedure TfrmEncerrar.cxButton2Click(Sender: TObject);
var
vrEncerra : string;
vHorafinal : TTime;
begin
vHorafinal := cxTimeEdit1.Time;

vrEncerra := ' update apo_boletim_dt set boletim_hora_final = :pHora ';
vrEncerra := vrEncerra + ' where boletim_hora_inicio = boletim_hora_final and ';
vrEncerra := vrEncerra + ' boletim_id = ' +DMGeral.ClientBoletimMSBOLETIM_ID.AsString;

QueryEncerra.Close;
QueryEncerra.SQL.Clear;
QueryEncerra.ParamByName('pHora').AsDateTime:=vHorafinal;
QueryEncerra.SQL.Text:=vrEncerra;
QueryEncerra.ExecSQL;

DMGeral.ClientBoletimDT.Refresh;

close;
end;

Muito obrigado a todos!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
leo_cj
Colaborador
Colaborador


Registrado: Sábado, 26 de Março de 2011
Mensagens: 1335

MensagemEnviada: Qui Jul 20, 2017 3:28 pm    Assunto: Responder com Citação

Como você está passando a data por parâmetro, passa o boletim_id por parâmetro também, fica mais padronizado.

As variáveis vrEncerra e vHorafinal não são necessárias, é possível fazer direto, eu pessoalmente prefiro fazer direto, porém o uso das mesmas não está errado

Código:
procedure TfrmEncerrar.cxButton2Click(Sender: TObject);
begin
  QueryEncerra.Close;
  QueryEncerra.SQL.Clear;

  QueryEncerra.SQL.Add(' update apo_boletim_dt set boletim_hora_final = :pHora ');
  QueryEncerra.SQL.Add(' where boletim_hora_inicio = boletim_hora_final and ');
  QueryEncerra.SQL.Add(' boletim_id = :boletim_id');

  QueryEncerra.ParamByName('pHora').AsDateTime := cxTimeEdit1.Time;
  QueryEncerra.ParamByName('DMGeral.ClientBoletimMSBOLETIM_ID.AsString').AsString := DMGeral.ClientBoletimMSBOLETIM_ID.AsString;
 
  QueryEncerra.ExecSQL;

  DMGeral.ClientBoletimDT.Refresh;

  close;
end;
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
natanbh1
Colaborador
Colaborador


Registrado: Terça-Feira, 15 de Março de 2011
Mensagens: 3093
Localização: Belo Horizonte - MG

MensagemEnviada: Qui Jul 20, 2017 3:34 pm    Assunto: Responder com Citação

Concordo com leo_cj, faça apenas uma correção nesta linha:

Código:
QueryEncerra.ParamByName('DMGeral.ClientBoletimMSBOLETIM_ID.AsString').AsString := DMGeral.ClientBoletimMSBOLETIM_ID.AsString;

Por esta:

Código:
QueryEncerra.ParamByName('boletim_id').AsString := DMGeral.ClientBoletimMSBOLETIM_ID.AsString;

Fica assim:

Código:
procedure TfrmEncerrar.cxButton2Click(Sender: TObject);
begin
  QueryEncerra.Close;
  QueryEncerra.SQL.Clear;

  QueryEncerra.SQL.Add(' update apo_boletim_dt set boletim_hora_final = :pHora ');
  QueryEncerra.SQL.Add(' where boletim_hora_inicio = boletim_hora_final and ');
  QueryEncerra.SQL.Add(' boletim_id = :boletim_id');

  QueryEncerra.ParamByName('pHora').AsDateTime := cxTimeEdit1.Time;
  QueryEncerra.ParamByName('boletim_id').AsString := DMGeral.ClientBoletimMSBOLETIM_ID.AsString;
 
  QueryEncerra.ExecSQL;

  DMGeral.ClientBoletimDT.Refresh;

  close;
end;

_________________
''A persistência é o caminho para o êxito.''
Charlie Chaplin
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB