Duvida sobre timestamp
Galera eu to com uma duvida, eu estou começando a estuda delphi e estamos começando a ver delphi + mysql, meu professor pediu para que criassemos um programa para controle de entrada e saida de pessoal no qual deveria marcar a data e hora de entrada/saida.
no meu banco de dados eu criei uma tablea com os campos hr_entrada e dat_entrada, em dat_entrada eu coloquei como date e no delphi usei o comando date para pegar a data do sistema e salvar no BD, até ai tudo bem.
Mas quando eu uso o comando time pra pegar a hora do sistema e guardar no BD no cmpo hr_entrada, o delphi diz que o valor não é um valor timestamp valido.
ai fica a duvida, eu coloquei o campo como time, porque diabos o valor tem que ser em timestamp? e aproveitando, como passo o valor do comando time para timestamp?
se alguem souber me ajudar, agradeço muito.
no meu banco de dados eu criei uma tablea com os campos hr_entrada e dat_entrada, em dat_entrada eu coloquei como date e no delphi usei o comando date para pegar a data do sistema e salvar no BD, até ai tudo bem.
Mas quando eu uso o comando time pra pegar a hora do sistema e guardar no BD no cmpo hr_entrada, o delphi diz que o valor não é um valor timestamp valido.
ai fica a duvida, eu coloquei o campo como time, porque diabos o valor tem que ser em timestamp? e aproveitando, como passo o valor do comando time para timestamp?
se alguem souber me ajudar, agradeço muito.
Júnior
Curtidas 0
Melhor post
Wilson Junior
12/05/2010
Caro chara Junior,
Timestamp é um tipo de campo do banco de dados que armazena Data e Hora no mesmo campo. (no Delphi TDateTime).
Date é um tipo de campo do banco de dados que armazena somente Data. (no Delphi TDate)
Time é um tipo de campo do banco de dados que armazena somente Hora. (no Delphi TTime)
Portanto, se você declarou no seu banco de dados Timstamp, deverá setar Now, "MeuDataSet_CampoData.AsDateTime: = Now;".
Now siginifica data e hora atual.
Time siginifica hora atual.
Date siginifica data atual.
Obs.: mesmo tendo um campo no banco de dados do tipo Date, Time ou TimeStamp, para o ClientDataSet sempre deve ser utilizado o AsDateTime para, pois não possui um AsDate ou AsTime.
Qualquer dúvida é só perguntar.
Espero ter colaborado.
Timestamp é um tipo de campo do banco de dados que armazena Data e Hora no mesmo campo. (no Delphi TDateTime).
Date é um tipo de campo do banco de dados que armazena somente Data. (no Delphi TDate)
Time é um tipo de campo do banco de dados que armazena somente Hora. (no Delphi TTime)
Portanto, se você declarou no seu banco de dados Timstamp, deverá setar Now, "MeuDataSet_CampoData.AsDateTime: = Now;".
Now siginifica data e hora atual.
Time siginifica hora atual.
Date siginifica data atual.
Obs.: mesmo tendo um campo no banco de dados do tipo Date, Time ou TimeStamp, para o ClientDataSet sempre deve ser utilizado o AsDateTime para, pois não possui um AsDate ou AsTime.
Qualquer dúvida é só perguntar.
Espero ter colaborado.
GOSTEI 1
Mais Respostas
Carlos Mazzi
12/05/2010
Eu não sei como vc está usando no seu Delphi, mas sempre usei a passagem por parametro do mesmo, ou .Value ou . AsString.
Ex:
MeuDataSet_CampoData.AsString: = DateToStr(Now());
MeuDataSet_CampoHora.AsString:= TimeToStr(Now());
Ou qualquer parte do sistemas, por exemplo um Label...
TimeToStr(Now()); // Assim o comando Now(), traz tudo que preciso quanto a datas e horas atual.
GOSTEI 0
Júnior
12/05/2010
certo, começo a entender um pouco melhor, mas tipo, no meu banco o campo hr_entrada é do tipo time e quando eu tento passar pra ele as horas do sistema usando o comando Time, ele da um erro, falando que o valor não é um valor timestamp, so que o campo não é timestamp.
que que eu faço?
eu copiei o trecho do programa que ta dando isso:
DMCOntrole_Aluno.SDAlunos.Edit;
if (DMCOntrole_Aluno.SDAlunoscod_aluno.Value=strtoint(EditCodAluno.Text)) then
begin
DMCOntrole_Aluno.SDAlunosdat_entrada.Value:=Date;
DMCOntrole_Aluno.SDAlunoshr_entrada.Value:=Time;
DMCOntrole_Aluno.SDAlunosdat_saida.Clear;
DMCOntrole_Aluno.SDAlunos.Post;
DMCOntrole_Aluno.SDAlunos.ApplyUpdates(0);
end;
Detalhe: o campo dat_entrada que esta recebendo o Date não deu problema. Sinceramaente ontem eu fiquei até 2 da manha tentando descobri um jeito, mas não consegui.
vocês sbaem qual pode ser o problema?
Valeu pelas respostas de antes.
que que eu faço?
eu copiei o trecho do programa que ta dando isso:
DMCOntrole_Aluno.SDAlunos.Edit;
if (DMCOntrole_Aluno.SDAlunoscod_aluno.Value=strtoint(EditCodAluno.Text)) then
begin
DMCOntrole_Aluno.SDAlunosdat_entrada.Value:=Date;
DMCOntrole_Aluno.SDAlunoshr_entrada.Value:=Time;
DMCOntrole_Aluno.SDAlunosdat_saida.Clear;
DMCOntrole_Aluno.SDAlunos.Post;
DMCOntrole_Aluno.SDAlunos.ApplyUpdates(0);
end;
Detalhe: o campo dat_entrada que esta recebendo o Date não deu problema. Sinceramaente ontem eu fiquei até 2 da manha tentando descobri um jeito, mas não consegui.
vocês sbaem qual pode ser o problema?
Valeu pelas respostas de antes.
GOSTEI 0
Carlos Mazzi
12/05/2010
Pois é meu chapa... fiz o teste, abri meus códigos, e aqui funciona certinho!,
eu só alteraria, de
DMCOntrole_Aluno.SDAlunoshr_entrada.Value:=Time;
para
DMCOntrole_Aluno.SDAlunoshr_entrada.AsString := TimeToSTR(Now());
ai fechou meu amigo.
tenta ver.. se da certo. aqui foi na primeira.
GOSTEI 0
Júnior
12/05/2010
Oi e ai cara, então eu tive aula hoje e apresentei o erro pro meu professor, ele disse que o que tava dando o erro era o applyupdate(0).
so que ele não conseguiu descobrir qual era o erro, ele fez as mudanças no codigo do mesmo jeito que você fez, so que mesmo assim deu o erro no upplyupdate, você saberia qual o erro?
so que ele não conseguiu descobrir qual era o erro, ele fez as mudanças no codigo do mesmo jeito que você fez, so que mesmo assim deu o erro no upplyupdate, você saberia qual o erro?
GOSTEI 0