Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
walsh Novato

Registrado: Domingo, 28 de Dezembro de 2014 Mensagens: 65
|
Enviada: Ter Jul 18, 2017 7:05 pm Assunto: [RESOLVIDO]Update campo Time vindo de um TimeEdit |
|
|
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 |
|
 |
leo_cj Colaborador

Registrado: Sábado, 26 de Março de 2011 Mensagens: 1335
|
Enviada: Qua Jul 19, 2017 8:59 am Assunto: |
|
|
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 |
|
 |
natanbh1 Colaborador

Registrado: Terça-Feira, 15 de Março de 2011 Mensagens: 3093 Localização: Belo Horizonte - MG
|
Enviada: Qua Jul 19, 2017 9:33 am Assunto: |
|
|
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 |
|
 |
walsh Novato

Registrado: Domingo, 28 de Dezembro de 2014 Mensagens: 65
|
Enviada: Qui Jul 20, 2017 3:14 pm Assunto: |
|
|
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 |
|
 |
leo_cj Colaborador

Registrado: Sábado, 26 de Março de 2011 Mensagens: 1335
|
Enviada: Qui Jul 20, 2017 3:28 pm Assunto: |
|
|
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 |
|
 |
natanbh1 Colaborador

Registrado: Terça-Feira, 15 de Março de 2011 Mensagens: 3093 Localização: Belo Horizonte - MG
|
Enviada: Qui Jul 20, 2017 3:34 pm Assunto: |
|
|
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 |
|
 |
|