Fórum erro ao salvar uma data vazia #380341

30/06/2010

0

ola bom dia

estou com um maskedit para data de garantia
n é obrigatorio

entao ao salvar ele da erro
dizeno q n é uma '  /  /    ' is not valid date

e da qd ele entra nesta linha

    cdsBensDT_GARANTIA.AsDateTime   :=  StrToDate(MaskEdit3.Text);

oq fazer?

o banco é firebird
e ta definido como date
Diego Macario

Diego Macario

Responder

Posts

30/06/2010

Wilson Junior

try
  cdsBensDT_GARANTIA.AsDateTime := StrToDate( MaskEdit3.Text );
except
  cdsBensDT_GARANTIA.Clear; { Atribui NULL }
end;


Espero ter colaborado.
Responder

Gostei + 0

30/06/2010

Diego Macario

try
  cdsBensDT_GARANTIA.AsDateTime := StrToDate( MaskEdit3.Text );
except
  cdsBensDT_GARANTIA.Clear; { Atribui NULL }
end;


Espero ter colaborado.



cara deu certo entre aspas

ao olhar oq salvou
ele salvou uma data mt louca

30/12/1899


eu hein!!!!
Responder

Gostei + 0

30/06/2010

Wilson Junior

Se você for ler o campo como AsDateTime e ele for NULL, ele irá lhe trazer esta data. Este padrão é do Delphi.

Espero ter colaborado.
Responder

Gostei + 0

30/06/2010

Diego Macario

Se você for ler o campo como AsDateTime e ele for NULL, ele irá lhe trazer esta data. Este padrão é do Delphi.

Espero ter colaborado.



como tratar isso entao amigo?

obrigado pela informacao
Responder

Gostei + 0

30/06/2010

Wilson Junior

1° - o seu campo Data é NOT NULL?
2° - Como você está tratando a gravação deste campo?

Aguardo resposta.
Responder

Gostei + 0

30/06/2010

Marco Salles

try
  cdsBensDT_GARANTIA.AsDateTime := StrToDate( MaskEdit3.Text );
except
  cdsBensDT_GARANTIA.Clear; { Atribui NULL }
end;


Espero ter colaborado.

cara deu certo entre aspas

ao olhar oq salvou
ele salvou uma data mt louca

30/12/1899

eu hein!!!!
..   Pq que vc tem que Atribuir ??? Pq que vc Tem que usar o AsDataTime ???  
try
  cdsBensDT_GARANTIA.AsString := MaskEdit3.Text;
except
   // Faz Nada
  end;

Ou Teste o MaskEdit Antes de Atribuir ( Pq que vc tem que Atribuir Nada ????? )
 

if  MaskEdit3.Text  <> '  /  /    ' Then
   cdsBensDT_GARANTIA.AsString := MaskEdit3.Text;
Nesta Ultima Acreditando que sua Mascara esta com o Padrão !99/99/9999;1;_  
ao olhar oq salvou
ele salvou uma data mt louca

30/12/1899

eu hein!!!!
  So uma Observação.. Se Vc Fizer Assim   cdsBensDT_GARANTIA.AsDateTime := 0; // Ira Com Certeza Gravar 30/12/1899 .. Esta Correto ISTO
       
Responder

Gostei + 0

01/07/2010

Diego Macario

1° - o seu campo Data é NOT NULL?
2° - Como você está tratando a gravação deste campo?

Aguardo resposta.


nao esta definido como not null

bom a excessao da gravacao fiz como vc colocou no post acima...
Responder

Gostei + 0

01/07/2010

Emerson Nascimento

teste com esse código:



var
  dData: TDateTime;

begin
  [...]
  try
    dData := StrToDate(MaskEdit3.Text);//testa a conversão.
    cdsBensDT_GARANTIA.AsDateTime := dData;//se deu certo, atribui...
  except
    ShowMessage('Data inválida!');//se não deu certo, exibe a mensagem.
  end;


Responder

Gostei + 0

05/07/2010

Diego Macario

deixa me explicar oq quero

meu banco de dados o campo data da garantia esta definido como date

uso firebird

quero pode gravar ele vazio...

ou seja

asssim.... usando a mascara de data __/__/____

mas n estou tendo exito

oq fazer?
Responder

Gostei + 0

05/07/2010

Marco Salles

Ola Diego Mas ja foi explicado para Vc   Entendemos a sua situação.. É um Erro Clásico   Sua Mascara Esta definida com os Literai '  /  /    '  Assim se vc não colocar nada no MaskEdit vai gerar uma Exceção de Tipo Inválidos Então , vc deve entre as soluçoes Postadas para Vc , Testar o Conteudo desse MaskEdit.tex e se somente se , ele for diferente de  '  /  /    '  vc atribui o campo Data a valor do MaskEdit.tex  
if MaskEdit1.text <> '  /  /    ' then
 MeuCampoData.AsString:=MaskEdit1.text ;
Segue o Codigo
  A outra Solução Postada e tratando ( Try Except) , so que nesta situação vc mencionou que apareceria um Valor Data Meio Doido ( que tb ja postei antes o Pq da Razão Desta Data )  
try
 MeuCampoData.AsString:=MaskEdit1.text ;
except
 MeuCampoData.Clear;  //Aparece um Valor Doido  30/12/1899
end;
Segue o Codigo
  Uma Terceira Solução e Fazer Nada no Try Excpet

try
 MeuCampoData.AsString:=MaskEdit1.text ;
except
  //Faz Nada
end; 
Segue o Codigo
  Uma quarta Solução é exibir uma Mensage ( Mas esta não vem o caso pq parece que este campo Pode ser Nulo ) Nada o Impede de ser Nulo


try
  UmaVariavelData:=StrtoDate(MaskEdit1.text)
 MeuCampoData.AsString:=MaskEdit1.text ;
except
  //Exibe Uma Mensagem  
end; 
Segue o Codigo
  Então é so Vc Escolher dentre as quatro Soluçoes a que melhor se aplica ao Seu Caso    
Responder

Gostei + 0

05/07/2010

Diego Macario

Ola Diego Mas ja foi explicado para Vc   Entendemos a sua situação.. É um Erro Clásico   Sua Mascara Esta definida com os Literai '  /  /    '  Assim se vc não colocar nada no MaskEdit vai gerar uma Exceção de Tipo Inválidos Então , vc deve entre as soluçoes Postadas para Vc , Testar o Conteudo desse MaskEdit.tex e se somente se , ele for diferente de  '  /  /    '  vc atribui o campo Data a valor do MaskEdit.tex  
if MaskEdit1.text <> '  /  /    ' then
 MeuCampoData.AsString:=MaskEdit1.text ;
Segue o Codigo
  A outra Solução Postada e tratando ( Try Except) , so que nesta situação vc mencionou que apareceria um Valor Data Meio Doido ( que tb ja postei antes o Pq da Razão Desta Data )  
try
 MeuCampoData.AsString:=MaskEdit1.text ;
except
 MeuCampoData.Clear;  //Aparece um Valor Doido  30/12/1899
end;
Segue o Codigo
  Uma Terceira Solução e Fazer Nada no Try Excpet

try
 MeuCampoData.AsString:=MaskEdit1.text ;
except
  //Faz Nada
end; 
Segue o Codigo
  Uma quarta Solução é exibir uma Mensage ( Mas esta não vem o caso pq parece que este campo Pode ser Nulo ) Nada o Impede de ser Nulo


try
  UmaVariavelData:=StrtoDate(MaskEdit1.text)
 MeuCampoData.AsString:=MaskEdit1.text ;
except
  //Exibe Uma Mensagem  
end; 
Segue o Codigo
  Então é so Vc Escolher dentre as quatro Soluçoes a que melhor se aplica ao Seu Caso    


marco antonio, obrigado pela ajuda
entao fica a duvida

se eu defini no banco de dados ele como date, n teria eu q receber ele usando o asdatetime?
so fico com esta duvida...
afinal este metodo n é conversor de datas?

e tb faço em um outro form pesquisa via datas..e ai?

como a data do documento e a data da da nota fiscal sao campos necessarios..entao n ficam em branco...

essa é minha duvida


Responder

Gostei + 0

05/07/2010

Marco Salles

 marco antonio, obrigado pela ajuda
entao fica a duvida

se eu defini no banco de dados ele como date, n teria eu q receber ele usando o asdatetime?
so fico com esta duvida...
afinal este metodo n é conversor de datas?

e tb faço em um outro form pesquisa via datas..e ai?

como a data do documento e a data da da nota fiscal sao campos necessarios..entao n ficam em branco...

essa é minha duvida

  Não precisa , pq o AsString do TField ja Faz isto ( Ele internamente ja Converte para o Tipo Certo)   É a mesma coisa   SeuDataSetSeuField.AsString:=TextoQue RepresentaUmaDataVálida ;    SeuDataSetSeuField.dAsDataTime:=StrToDate(TextoQue RepresentaUmaDataVálida);    A diferença entre a Primeira e a segunda é que na segunda Vc Usa um Conversosr Desnecessariamente Ja que SeuDataSetSeuField tem as Propriedades ( AsString , AsFloat , AsInteger , AsDateTime ...) que poderão seram usadas qnd For convenientemente
Responder

Gostei + 0

05/07/2010

Diego Macario

 marco antonio, obrigado pela ajuda
entao fica a duvida

se eu defini no banco de dados ele como date, n teria eu q receber ele usando o asdatetime?
so fico com esta duvida...
afinal este metodo n é conversor de datas?

e tb faço em um outro form pesquisa via datas..e ai?

como a data do documento e a data da da nota fiscal sao campos necessarios..entao n ficam em branco...

essa é minha duvida

  Não precisa , pq o AsString do TField ja Faz isto ( Ele internamente ja Converte para o Tipo Certo)   É a mesma coisa   SeuDataSetSeuField.AsString:=TextoQue RepresentaUmaDataVálida ;    SeuDataSetSeuField.dAsDataTime:=StrToDate(TextoQue RepresentaUmaDataVálida);    A diferença entre a Primeira e a segunda é que na segunda Vc Usa um Conversosr Desnecessariamente Ja que SeuDataSetSeuField tem as Propriedades ( AsString , AsFloat , AsInteger , AsDateTime ...) que poderão seram usadas qnd For convenientemente


entao amigo
outro dia coloquei da forma que vc fez...
para receber...

td certo
mas eu quero q o retorno da data seja apenas a mascara...
caso esteja em branco...

retorno no dbgrid fosse __/__/____

se nao seria a data real...

mas como faço como vc diz ele retornou uma data diferente...
axo q era uma data bem a frente....
Responder

Gostei + 0

05/07/2010

Marco Salles

entao amigo
outro dia coloquei da forma que vc fez...
para receber...

td certo
mas eu quero q o retorno da data seja apenas a mascara...
caso esteja em branco...

retorno no dbgrid fosse __/__/____

se nao seria a data real...

mas como faço como vc diz ele retornou uma data diferente...
axo q era uma data bem a frente....
...   1) Situaçao mas eu quero q o retorno da data seja apenas a mascara...
caso esteja em branco...

retorno no dbgrid fosse __/__/____
  Resposta Ai o Campo tem que ser definido como String   2) Situação mas como faço como vc diz ele retornou uma data diferente...
Retorna ??? Retorna o que se não se esta Atribuindo nada ao Campo Data Não da para imaginar esta situação    
Responder

Gostei + 0

05/07/2010

Diego Macario

entao amigo
outro dia coloquei da forma que vc fez...
para receber...

td certo
mas eu quero q o retorno da data seja apenas a mascara...
caso esteja em branco...

retorno no dbgrid fosse __/__/____

se nao seria a data real...

mas como faço como vc diz ele retornou uma data diferente...
axo q era uma data bem a frente....
...   1) Situaçao mas eu quero q o retorno da data seja apenas a mascara...
caso esteja em branco...

retorno no dbgrid fosse __/__/____
  Resposta Ai o Campo tem que ser definido como String   2) Situação mas como faço como vc diz ele retornou uma data diferente...
Retorna ??? Retorna o que se não se esta Atribuindo nada ao Campo Data Não da para imaginar esta situação    


amigo
desculpe a forma como disse

mas quando informo sobre o retorno seria
a visualizacao seria como disse acima

retorno no dbgrid fosse __/__/____

agora como estou usando stored procedure...o campo tb tem q ser asstring...

entao o salvar e o stored tem q ser asstring...
e a definicao do campo no cds mantenho como fkdata né?
Responder

Gostei + 0

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

Aceitar