Fórum Salvar Campo Tipo Horas de uma vez por todas #258888

18/11/2004

0

Olá pessoal, estive pesquisando no fórum e até agora não encontrei uma explicação óbvia de como trabalhar com horas.

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

Fabboca

Responder

Posts

18/11/2004

Vinicius2k

Fábio,

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+


Responder

Gostei + 0

18/11/2004

Fabboca

Vinicius, desculpa a minha falta de experiência, mas ai vai.

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.


Responder

Gostei + 0

18/11/2004

Vinicius2k

Onde que posso verificar/alterar um TField??

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]

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....

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+


Responder

Gostei + 0

18/11/2004

Fabboca

Ainda não.... hehehe...

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]



Responder

Gostei + 0

18/11/2004

Vinicius2k

eu não estou utilizando máscara... seria digitação direta no grid ou então em um dbEdit.... o erro é o mesmo.....

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+


Responder

Gostei + 0

18/11/2004

Fabboca

Bom... perdão ... mas eu já tentei de todas as formas e o erro persiste.

Os dialetos estao configurados como 3 na base e no IBDatabase.


Fabio.


Responder

Gostei + 0

18/11/2004

Vinicius2k

Eu, realmente, não sei o que pode ser, já que não consigo simular seu erro...

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+


Responder

Gostei + 0

18/11/2004

Christian_adriano

Caro ´fabboca´,

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.


Responder

Gostei + 0

19/11/2004

Fabboca

Christian... Obrigado pelo help..

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


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar