CAMPO DATAS NO FIREBIRD 1.5

Delphi

18/08/2009

amigos, boa noite, estou migrando um pequenos sistema que tinha como base de dados Interbase para o Firebord 1.5, porém me deparei com um erro que gostaria de dicas para resolver, seguinte:

utilizo um Dbedit para entrar com a data em um campo Date do Fire, no campo utilizo uma máscara no Tfilde (!99/99/0000;1;_) porem com máscara ou sem mascara se digito uma data no campo e imediatamente apago essa data (deixo em branco) quando retiro o foco do campo é apresentado esse erro: ´Invalid input value´, ou apresenta ´ / / is not a valid date.

qual a melhor solução para arrumar isso?

Obrigago.


Ant.neto

Ant.neto

Curtidas 0

Respostas

Cb

Cb

18/08/2009

Olá

No Exit do DBEdit tente:

try
StrToDate(DBEdit3.Text);
except
    MessageDlg(´Data invalida! Tente novamente.´,mtError,[mbok],0);
    DBEData.SetFocus;


Sacou?


GOSTEI 0
Cb

Cb

18/08/2009

Corrigindo:

No OnExit.


GOSTEI 0
Ant.neto

Ant.neto

18/08/2009

Ola CB, obrigado pela a ajuda, mas não deu certo, alem do mesmos erros, agora todas as datas não estão maos aceitando. da erro em todas.

Obrigado pela a dica mas nesse caso n funcionou, mas vou aproveitar essa dica em outros casos

Valeu.

Olá No Exit do DBEdit tente:
try
StrToDate(DBEdit3.Text);
except
    MessageDlg(´Data invalida! Tente novamente.´,mtError,[mbok],0);
    DBEData.SetFocus;
Sacou?



GOSTEI 0
Cb

Cb

18/08/2009

Eita realmente tem um bug ali no DBedit como DATA.

Uma data por ex: 10/02/1999 ele come o 0 do 02 e ferra tudo no StrToDate.

Mas da pra contornar usando um Maskedit.


GOSTEI 0
Marco Salles

Marco Salles

18/08/2009

talves Resolva :

Mascara do Tfield

!99/99/9999;1;_

Evento OnSetText do Tfield

procedure TForm1.SEUDataSetSEUCAMPOSetText(Sender: TField; const Text: string);
begin
if text=´  /  /    ´ then
 sender.Clear
else
 sender.AsString:=text;
end;



GOSTEI 0
Ant.neto

Ant.neto

18/08/2009

Grande Marco, valeu pela ajuda... deu certo, eu até tentei antes fazer +/- do jeito da sua dica, mas o bestão aqui não pensou no ´else
sender.AsString:=text;´ rs.

Brigadão.


[quote:6b17e7785b=´Marco Salles´]talves Resolva :

Mascara do Tfield

!99/99/9999;1;_

Evento OnSetText do Tfield

procedure TForm1.SEUDataSetSEUCAMPOSetText(Sender: TField; const Text: string);
begin
if text=´  /  /    ´ then
 sender.Clear
else
 sender.AsString:=text;
end;
[/quote:6b17e7785b]


GOSTEI 0
Cb

Cb

18/08/2009

Ao menos comigo aqui continua o DBEdit passando a data num formato errado.

Digita ai 10/06/1974 e pega o valor pelo

showmessage(DBEdit1.text);

Vem algo assim 10/61/974

Só resolvi passando para o DataEdit do RX conponents.


GOSTEI 0
Cb

Cb

18/08/2009

Retorna: 1/06//974


GOSTEI 0
Cb

Cb

18/08/2009

Pior tenta ai:

01/01/1974

Retorna: /1///174

:lol:


GOSTEI 0
Marco Salles

Marco Salles

18/08/2009

Com certeza vc esta fazendo algo errado ou deixando de fazer algo certo

Ao menos comigo aqui continua o DBEdit passando a data num formato errado. Digita ai 10/06/1974 e pega o valor pelo showmessage(DBEdit1.text); Vem algo assim 10/61/974


possivel causa > configuração regional , diferente do contexto

[b:27470f0f60]dd/MM/aaaa[/b:27470f0f60]


GOSTEI 0
Cb

Cb

18/08/2009

Olá.

Não é isto. Eu estou DD/MM/AAAA.

A resolução foi pegar o RXComponents e usar o Edit de data dele.

Ou então colocar um Maskedit jogando o valor no DBEdit.


GOSTEI 0
Cb

Cb

18/08/2009

Esqueci de agradecer ao pessoal a ajuda. Muito Obrigado. :D


GOSTEI 0
Marco Salles

Marco Salles

18/08/2009

Penso que o tópico descambou em um caminho que ficou meio confuso.

O Post inicial era :

utilizo um Dbedit para entrar com a data em um campo Date do Fire, no campo utilizo uma [b:9e4426ba7f]máscara no Tfilde[/b:9e4426ba7f] (!99/99/0000;1;_) porem com máscara ou sem mascara se digito uma data no campo e imediatamente apago essa data (deixo em branco) quando retiro o foco do campo é apresentado esse erro: ´Invalid input value´, ou apresenta ´ / / is not a valid date.


Nesta situação CB a saida é utilizar o evento OnSetText e alterar a Mascara

Mascara do Tfield 
!99/99/9999;1;_ 

Evento OnSetText do Tfield 
Código: 
procedure TForm1.SEUDataSetSEUCAMPOSetText(Sender: TField; const Text: string); 
begin 
if text=´  /  /    ´ then //Utilizando formato Regionais dd/MM/aaaa
 sender.Clear 
else 
 sender.AsString:=text; 
end; 


Agora , nestas condiçoes (Mascara no TFIELD DO CAMPO ) , se não funcionar
para vc estou SURPRESO... Acabei de Refazer este teste Num Campo Data
e utilizei estritamente as Recomendações acima e Não tive nenhun Problema.


GOSTEI 0
Joaoshi

Joaoshi

18/08/2009

Pode ser que não ajude em nada, mas...

DD/MM/AAAA

ou

DD/MM/YYYY



GOSTEI 0
Cb

Cb

18/08/2009

[quote:9e4426ba7f=´Marco Salles´]Penso que o tópico descambou em um caminho que ficou meio confuso.

O Post inicial era :

utilizo um Dbedit para entrar com a data em um campo Date do Fire, no campo utilizo uma [b:9e4426ba7f]máscara no Tfilde[/b:9e4426ba7f] (!99/99/0000;1;_) porem com máscara ou sem mascara se digito uma data no campo e imediatamente apago essa data (deixo em branco) quando retiro o foco do campo é apresentado esse erro: ´Invalid input value´, ou apresenta ´ / / is not a valid date.


Nesta situação CB a saida é utilizar o evento OnSetText e alterar a Mascara

Mascara do Tfield 
!99/99/9999;1;_ 

Evento OnSetText do Tfield 
Código: 
procedure TForm1.SEUDataSetSEUCAMPOSetText(Sender: TField; const Text: string); 
begin 
if text=´  /  /    ´ then //Utilizando formato Regionais dd/MM/aaaa
 sender.Clear 
else 
 sender.AsString:=text; 
end; 


Agora , nestas condiçoes (Mascara no TFIELD DO CAMPO ) , se não funcionar
para vc estou SURPRESO... Acabei de Refazer este teste Num Campo Data
e utilizei estritamente as Recomendações acima e Não tive nenhun Problema.[/quote:9e4426ba7f]

Eu tambem. Uso delphi desde a versão 3, parei em 2005 e voltei agora. Mas a anos não usava banco de dados junto.

Será que todos meus softs anteriores foram com este problema? :P

Tente digitar a data: 10/06/1974 e pegar o valor num botão por showmessage.

Delphi 7.

Mascara: !99/99/0000;1;_

Pra não ficar como delirio meu: :lol: :lol:


Como eu disse, peguei outro componente e não dá erro algum.

:P


GOSTEI 0
Marco Salles

Marco Salles

18/08/2009

Uma Imagem vale mais do que mil palavras

Percebi na sua imagem que não tem a mascara

Ao se digitar uma data (INCOMPLETA) em um componente que reflete uma mascara por exemplo no seu caso [b:c28ae47bed]10/6/1974[/b:c28ae47bed] , certamente a sua imagem
Deveria ficar assim

[b:c28ae47bed]10/_6/1974[/b:c28ae47bed] .... Aonde o TRAÇO ´_´ Refleta a presença da Mascara


Sua Imagem [b:c28ae47bed]10/6/1974[/b:c28ae47bed]

TField com Mascara : [b:c28ae47bed]10/_6/1974[/b:c28ae47bed]

Abração


GOSTEI 0
Cb

Cb

18/08/2009

Isto é um DBEdit usando a mascara no DataSet. Quando eu digito o zero a esquerda ele corta.

Eu digito 10/06/1974, não só este numero. Qualquer que tenha zero a esquerda ele corta e dá o erro. Se digitar 01/01/2000 por exemplo. ele come os zeros e multiplica as /.

Estou fazendo algo errado?

Mascara do Dataset:

!99/99/0000;1;_


Valeu!


GOSTEI 0
Marco Salles

Marco Salles

18/08/2009

Amigo , estou achando interressante sua situação e gostaria de aprender
com ela ... Teria como montar um exemplo simples , do modo que esta fazendo
e enviar para o email para que pudesse simular o que esta acontecendo com
vc
Não consigo simular este erro de jeito nenhum aqui no meu PC


GOSTEI 0
Cb

Cb

18/08/2009

Certo. Acredito seguir o padrão.

Utilizando Delphi 7 + Firebird 2.1 + MDO.

Tenho o Dataset configurado para dar select * numa tabela usuario (por exempo)

Coloco um DBEdit no form ´apontando´ para o campo data do dataset.

Tá lá o erro citado, nem precisa fazer transação. Basta pegar o .text digitado e exibir tá lá tudo bagunçado.

:P

Eu digito com o 0 a esquerda, o DBedit que remove.

Como eu disse anteriormente outros componentes que não o DBEdit não acontece o problema. Por ex um MaskEdit não dá o erro.

Intrigante, não?

Eu suspeito de algum problema com o firebird, pois no passado já utilizei com Mysql server e não lembro de nenhum erro do tipo.


GOSTEI 0
Marco Salles

Marco Salles

18/08/2009

Intrigante

faça um teste

Digiteno even to OnClick de Um Botão

SeuDataSet.Append;
SeuDataSet.FieldByNama(´SeuCampoData´).asString:=´10/06/1974´;

ou

SeuDataSet.Append;
SeuDataSet.FieldByNama(´SeuCampoData´).asDataTime:=StrtTodate(´10/06/1974´);


O que aparece ni DbEdit ?????


GOSTEI 0
Cb

Cb

18/08/2009

O mesmo bug:

´1/06//974´

Engraçado que como eu disse já fiz muitos sistemas em delphi nunca deu isto. O que tem de novo é o MDO e o Firebird. :P

Abração.


GOSTEI 0
Marco Salles

Marco Salles

18/08/2009

Hummmmmm... Ja era de se esperar

[b:d0c2698756]Não acredito que seje do Firebird.[/b:d0c2698756]

Acredito que seje desta tecnologia MDO ????

Eu particularmente desconheço ( Uso e so Uso DbExpress com clientDataSet ,
foi amor a primeira Vista)

Eu qnd começei com Delphi em 2005 Tinha muitas dúvidas e dificuldade ,
inclusive uma dúvida parecida com a sua
Na época usava Paradox e tive um Problema parecido

Esta dúvida pode ser vista em ;

http://forum.devmedia.com.br/viewtopic.php?t=54693&highlight=editmask

Como vc esta passando por um problema parecido , eu resolvi abrir este
projeto usando Paradox para reproduzir o erro (pq hj minha capacidade de
soluciona-lo é mais consistente do que naquela época ) Aonde foi aplicado
uma solução que hj eu não varia

Mas infelismente , não consegui reproduzir o erro ... Na época usava
Delphi5 com WindowsXp , hj uso Delphi2007 com Windows Vista

Resta ainda um outro computador que tem o delphi5 e o Windows Xp Instalado
Nele ainda tem requisos deste projeto citado no post que lhe passei

Vou a tarde abrir o Projeto nele e forçar o Erro ( Usando a mascara citada)
Torço para que dê erro, mas to duvidando , parece que assombração sabe para
quem aparece . Na época fiquei doido e a gente perde um tempo com isto.
coça a cabeça daqui , coça a cabeça dali e da tudo errado


GOSTEI 0
Cb

Cb

18/08/2009

Olá!

MDO: http://www.mdolib.com/


Então, eu já usei DbExpress e até ADO. kekekeke.

Nunca tive isto tambem, estou sem outro SGBD aqui no meu PC para poder testar tambem.

Como eu já devo ter dito, uso delphi a muitos anos. Nunca tive deste problema tambem. Se tive passou batido, mas eu costumo testar MUITO meus sistemas. Duvido que tenha ido algo tão primário.

Como eu disse usando outro componente pra data vai tranquilo, sem erros. Vou tentar mais pra saber o porquê.

Vou tentar ver se aproveito algo do seu topico passado. Retorno se não hoje amanhã.



Abraços. :D


GOSTEI 0
Cb

Cb

18/08/2009

Droga, esqueci de falar o forum está sem edit.

Com o MaskEdit tá certinho! kekekekeke!!


GOSTEI 0
Cb

Cb

18/08/2009

HARURAHRAURAHU! Resolveu. :lol:

Engraçado que se eu peço para ele dar um showmessage(DBEdit.text) o erro tá lá ainda.

O mais interessante ainda é que o RX DBEdit não dá o erro.

Eu antes coloquei o codigo que voce digitou, mas não mandava gravar pois marquei para trace o codigo no settext que voce me passou. Dai ele entrava lá tudo normal. E o showmessage dava o erro.

Desta vez resolvi mandar pro DB e vi que corrigiu o erro.

Não deixa de ser cabuloso e eu fico preocupado em saber se isto passou no passado.

:shock:


GOSTEI 0
POSTAR