erro ao salvar uma data vazia
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
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
Curtidas 0
Mais Respostas
Wilson Junior
30/06/2010
try
cdsBensDT_GARANTIA.AsDateTime := StrToDate( MaskEdit3.Text );
except
cdsBensDT_GARANTIA.Clear; { Atribui NULL }
end;
Espero ter colaborado.
GOSTEI 0
Diego Macario
30/06/2010
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!!!!
GOSTEI 0
Wilson Junior
30/06/2010
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.
Espero ter colaborado.
GOSTEI 0
Diego Macario
30/06/2010
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.
Espero ter colaborado.
como tratar isso entao amigo?
obrigado pela informacao
GOSTEI 0
Wilson Junior
30/06/2010
1° - o seu campo Data é NOT NULL?
2° - Como você está tratando a gravação deste campo?
Aguardo resposta.
2° - Como você está tratando a gravação deste campo?
Aguardo resposta.
GOSTEI 0
Marco Salles
30/06/2010
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!!!!
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;
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 ISTOele salvou uma data mt louca
30/12/1899
eu hein!!!!
GOSTEI 0
Diego Macario
30/06/2010
1° - o seu campo Data é NOT NULL?
2° - Como você está tratando a gravação deste campo?
Aguardo resposta.
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...
GOSTEI 0
Emerson Nascimento
30/06/2010
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;
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;
GOSTEI 0
Diego Macario
30/06/2010
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?
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?
GOSTEI 0
Marco Salles
30/06/2010
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
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 )
Uma Terceira Solução e Fazer Nada no Try Excpet
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
Então é so Vc Escolher dentre as quatro Soluçoes a que melhor se aplica ao Seu Caso
if MaskEdit1.text <> ' / / ' then MeuCampoData.AsString:=MaskEdit1.text ; Segue o Codigo
try MeuCampoData.AsString:=MaskEdit1.text ; except MeuCampoData.Clear; //Aparece um Valor Doido 30/12/1899 end; Segue o Codigo
try MeuCampoData.AsString:=MaskEdit1.text ; except //Faz Nada end; Segue o Codigo
try UmaVariavelData:=StrtoDate(MaskEdit1.text) MeuCampoData.AsString:=MaskEdit1.text ; except //Exibe Uma Mensagem end; Segue o Codigo
GOSTEI 0
Diego Macario
30/06/2010
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
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 )
Uma Terceira Solução e Fazer Nada no Try Excpet
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
Então é so Vc Escolher dentre as quatro Soluçoes a que melhor se aplica ao Seu Caso
if MaskEdit1.text <> ' / / ' then MeuCampoData.AsString:=MaskEdit1.text ; Segue o Codigo
try MeuCampoData.AsString:=MaskEdit1.text ; except MeuCampoData.Clear; //Aparece um Valor Doido 30/12/1899 end; Segue o Codigo
try MeuCampoData.AsString:=MaskEdit1.text ; except //Faz Nada end; Segue o Codigo
try UmaVariavelData:=StrtoDate(MaskEdit1.text) MeuCampoData.AsString:=MaskEdit1.text ; except //Exibe Uma Mensagem end; Segue o Codigo
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
GOSTEI 0
Marco Salles
30/06/2010
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 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
GOSTEI 0
Diego Macario
30/06/2010
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 convenientementeentao 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
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....
GOSTEI 0
Marco Salles
30/06/2010
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...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....
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
GOSTEI 0
Diego Macario
30/06/2010
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...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....
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é?
GOSTEI 0
Marco Salles
30/06/2010
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é?
GOSTEI 0
Valnei Reis
30/06/2010
Bom dia, caro amigo
Eu já passei por este tipo de problema e agora consegui utilizando esta pequena rotina, que muitos falam que não dá certo, mas para o meu feijão com arroz, tem dado muito certo ultimamente.
segue a rotina.
if (PossuiEntrada = True) then
Dm.SQLDataSet5.ParamByName('d_Entrada').AsDate := JvDateEdit1.Date
else
Dm.SQLDataSet5.ParamByName('d_Entrada').DataType:= FtDate;
Bom o if, é apenas um exemplo ok.
o que manda mesmo é o tipy de parâmetro dataType,
Pois ele grava a data em branco.
Tive este pequeno problema, há um tempo atrás, quando tive que criar um módulo de cancelamento de baixa.
A data do pagamento, deveria voltar a ser em branco, então fiz este procedimento e tem funcionado perfeitamente, mas, não sei se em algum outro gerenciador de banco de dados vai funcionar, faça um teste, eu utilizo o Firebird.
Há não se esqueça de declarar em uses o Math.
Espero que tenha fim este seu problema.
t+
Eu já passei por este tipo de problema e agora consegui utilizando esta pequena rotina, que muitos falam que não dá certo, mas para o meu feijão com arroz, tem dado muito certo ultimamente.
segue a rotina.
if (PossuiEntrada = True) then
Dm.SQLDataSet5.ParamByName('d_Entrada').AsDate := JvDateEdit1.Date
else
Dm.SQLDataSet5.ParamByName('d_Entrada').DataType:= FtDate;
Bom o if, é apenas um exemplo ok.
o que manda mesmo é o tipy de parâmetro dataType,
Pois ele grava a data em branco.
Tive este pequeno problema, há um tempo atrás, quando tive que criar um módulo de cancelamento de baixa.
A data do pagamento, deveria voltar a ser em branco, então fiz este procedimento e tem funcionado perfeitamente, mas, não sei se em algum outro gerenciador de banco de dados vai funcionar, faça um teste, eu utilizo o Firebird.
Há não se esqueça de declarar em uses o Math.
Espero que tenha fim este seu problema.
t+
GOSTEI 0
Edmilson Borges
30/06/2010
Só para constar, também estava com este problema havia tempo e a solução do caro colega Valnei Henrique funcionou certinho para mim. Utilizo Delphi com os bancos firebird, Oracle e MS SQL Server e em todos a solução funcionou.
Vlw Valnei.
Abraço
GOSTEI 0