Fórum Salvar Campo Tipo Horas de uma vez por todas #258888
18/11/2004
0
Estou utilizando Interbase 6.0, Dialeto 3 e delphi 6.0 e IBX como acesso.
O sistema que estou desenvolvendo é para controle de cartão ponto, na qual eu tenho uma tabela que guarda as ´batidas´ nos seguintes campos:
BATIDA_1, BATIDA_2, BATIDA_3, BATIDA_4 todos declarados do tipo TIME.
Diretamente na tabela, ou utilizando o IBExpert, é possível entrar com os dados referentes às batidas normalmente.
No Delphi, tenho um DBGrid que faz o link diretamente com essa tabela.
No fieldsEditor desta tabela, coloquei a máscara ´Short Time´.
Quando vou ´pular´ de campo, o campo que eu tinha digitado como 07:42 por exemplo, ele se transforma em 30/12/1899 07:42 e ainda exibe a mensagem 0,147066... is not a valid timestamp..
Alguém saberia me explicar como fazer esse trem funcionar??
Abraços
Fabio
Fabboca
Curtir tópico
+ 0Posts
18/11/2004
Vinicius2k
Eu não tenho o IB 6 disponível para testar, mas acabo de simular no FB 1.5.1 e funciona adequadamente.
- Confirme se as colunas são, realmente, do tipo TIME. Se forem TIMESTAMP a situação muda completamente... o tipo TIMESTAMP ´guarda´ Data e Hora e quando vc não informa uma data é assumido a data 1 (30/12/1899).
- Confirme se o tipo do TField é TTimeField.
- Pode não ter nenhuma relação, mas seu IBX está atualizado? Se não, vale a pena atualizar : http://codecentral.borland.com/codecentral/ccweb.exe/author?authorid=102
Espero ter ajudado...
T+
Gostei + 0
18/11/2004
Fabboca
Na tabela, os campos estão declarados como TIME.
|- Confirme se o tipo do TField é TTimeField. |
Onde que posso verificar/alterar um TField??
veja bem, na minha aplicacao tenho um IBDatabase, um IBTransaction,
um IBTable, um DataSource e um DBGrid ligado direto na tabela.
se eu inserir no grid o seguinte: ´0742´ ele me retorna um erro de que ´0742´ não é um time valido.
pois bem, se eu inserir ´07:42:00´ ele me retorna que 0.21.... não é um timestamp valido....
Fabio.
Gostei + 0
18/11/2004
Vinicius2k
No próprio FieldsEditor, quando vc seleciona um TField, o Object Inspector exibe seu tipo na parte superior, por exemplo:
[b:44c2686721]IBQuery1BATIDA_1 TTimeField[/b:44c2686721]
Suspeito que o seu problema seja com a máscara de edição... como vc está editando diretamente no Grid, a conversão ficará a cargo da própria aplicação, então sua máscara deve estar com ´save literal chars´ habilitada :
[b:44c2686721]!90:00;[color=red:44c2686721]1[/color:44c2686721];_[/b:44c2686721]
É isso ?
T+
Gostei + 0
18/11/2004
Fabboca
eu já estou quase definindo os campos como varchar...
| No próprio FieldsEditor, quando vc seleciona um TField, o Object
| Inspector exibe seu tipo na parte superior, por exemplo:
| IBQuery1BATIDA_1 T<--->TimeField
Ok, está definido como TimeField.
|Suspeito que o seu problema seja com a máscara de edição... como vc |está editando diretamente no Grid, a conversão ficará a cargo da própria |aplicação, então sua máscara deve estar com ´save literal chars´ |habilitada :
|!90:00;1;_
eu não estou utilizando máscara... seria digitação direta no grid ou então em um dbEdit.... o erro é o mesmo.....
Se ainda tiver alguma dica... eu agradeço....
[/b]
Gostei + 0
18/11/2004
Vinicius2k
humm... é pq vc disse, no primeiro post, que havia ajustado o EditMask do TField para ShortTime...
Bem... fica meio difícl ´chutar´, pq a única vez q eu consegui simular seu erro, foi colocando uma máscara sem salvar a parte literal...
Vc mencionou q está usando o Dialeto 3, o IBDatabase está configurado para o Dialeto 3?
T+
Gostei + 0
18/11/2004
Fabboca
Os dialetos estao configurados como 3 na base e no IBDatabase.
Fabio.
Gostei + 0
18/11/2004
Vinicius2k
Como também não tenho o IB 6 para teste, não posso garantir que o problema seja no seu código e não um bug, até o momento desconhecido para mim, do próprio IB...
Aguarde mais um pouco, talvez algum colega que já tenha passado por isso tenha alguma sugestão... se eu me lembrar de mais alguma coisa, postarei aqui...
T+
Gostei + 0
18/11/2004
Christian_adriano
Tetei implementar pra chegar no erro mencionado, e consegui, mais só com o TIBDataSet. Agora com um TIBQuery funciona Normal.
Tente utilizar um TIBQuery.
Exemplo com TIBQuery:
with IBQuery1 do begin
Close;
SQL.Text := ´insert into teste values (:ttt)´;
ParamByName(´ttt´).AsString := edit1.Text;
ExecSQL;
IBTransaction1.CommitRetaining;
end;
OBS. Vc pode passar a Hora como uma Parametro do tipo String que o banco vai aceita.
espero ter ajudado.
[]´s.
Christian.
Gostei + 0
19/11/2004
Fabboca
acho que o caminho talvez seja por ai mesmo, realmente desta forma funciona.
Agora preciso encontrar um meio disso tudo funcionar num dbGrid.
Abs
Fabio
Gostei + 0