DBExpress X Data nula outra vez
Oi pessoal, já fiz esta pergunta uma vez, e até agora ninguém me deu uma solução.., será que ninguém nunca passou por isso ?, e se passou como resolveu.
Uso Delphi 7 X DBExpress X Firebird 1.5RC6
O Problema:
Tenho um form ligado a um Datamodule, todos os componentes são TDBEdits, um dos fields é timestamp, ou seja, desejo gravar uma data, quando o usuário digita uma data valida OK, grava certinho, o problema é quando resolve apagar esta data.
A data foi gravada por exemplo como: 20/10/2003 por algum motivo o usuário quer apagar esta data que não é campo obrigatório, como faço para voltar para null. Não utilizo Insert, Update direto no banco, pois quando faço através destes comandos tudo bem, mas não posso perder este form, e trocar tudo por edit / maskedit, não acredito que não possa ter uma forma mais eficaz ::)))
1) Quando ele deleta a data existente no TDBedit e pressiona enter ou tab ou clica para sair do campo, aparece a seguinte mensagem
SqlTimestamp could not valid.
Já tentei tratar no evento Exit, Change, no datamodule no ONGettext, ONSetText mas nada feito. Após o Applyupdates(0) - Aparece um erro de Acess violation, se vc tenta gravar data nula.
Alguém tem alguma dica.
Muito obrigado
César
Uso Delphi 7 X DBExpress X Firebird 1.5RC6
O Problema:
Tenho um form ligado a um Datamodule, todos os componentes são TDBEdits, um dos fields é timestamp, ou seja, desejo gravar uma data, quando o usuário digita uma data valida OK, grava certinho, o problema é quando resolve apagar esta data.
A data foi gravada por exemplo como: 20/10/2003 por algum motivo o usuário quer apagar esta data que não é campo obrigatório, como faço para voltar para null. Não utilizo Insert, Update direto no banco, pois quando faço através destes comandos tudo bem, mas não posso perder este form, e trocar tudo por edit / maskedit, não acredito que não possa ter uma forma mais eficaz ::)))
1) Quando ele deleta a data existente no TDBedit e pressiona enter ou tab ou clica para sair do campo, aparece a seguinte mensagem
SqlTimestamp could not valid.
Já tentei tratar no evento Exit, Change, no datamodule no ONGettext, ONSetText mas nada feito. Após o Applyupdates(0) - Aparece um erro de Acess violation, se vc tenta gravar data nula.
Alguém tem alguma dica.
Muito obrigado
César
Cesarpir
Curtidas 0
Respostas
Edgar Olavo
11/11/2003
Olá
Fiz uma simulação aqui e não deu esse erro, tudo funcionou.
Se você puder mandar o código e o banco de dados ajudaria muito a resolver seu problema.
até
Fiz uma simulação aqui e não deu esse erro, tudo funcionou.
Se você puder mandar o código e o banco de dados ajudaria muito a resolver seu problema.
até
GOSTEI 0
Fred
11/11/2003
Experimente pressionar ESC e depois tente sair do campo!! 8)
GOSTEI 0
Markk
11/11/2003
O erro aparece quando você testa o aplicativo dentro do Delphi? Já tentou verificar se rodando o aplicativo direto se ocorre o mesmo erro?
Se não, anule a data com:
StrToDate(´´);
Se não, anule a data com:
StrToDate(´´);
GOSTEI 0
Lorde_morte.
11/11/2003
Séra que alguem já solucionou este problema?
GOSTEI 0
Cesarpir
11/11/2003
Amigo Lorde_morte, até hoje estou com este problema é mole, mas se ajudar vc recentemente comecei a trabalhar em uma empresa que utiliza
os componentes do elivado, ele tem um componente chamado TEvDBDateEdit que com resolve o problema, posso pressionar delete, e gravar que ele grava data nula no banco, existindo uma data registrada antes ou não, porém não é free.
Sem querer fazer propaganda, mas por enquanto é a única forma que vi, deve existir outros free.
Só para comentar este problema estava usando firebird 1.5, nesta empresa que estou desenvolvendo usando os componentes do elivado utilizo o Mysql40.
Bom espero que te ajude ou pelo menos uma luz, caso ache uma solução favor avise-me, obrigado.
Abraços
César
os componentes do elivado, ele tem um componente chamado TEvDBDateEdit que com resolve o problema, posso pressionar delete, e gravar que ele grava data nula no banco, existindo uma data registrada antes ou não, porém não é free.
Sem querer fazer propaganda, mas por enquanto é a única forma que vi, deve existir outros free.
Só para comentar este problema estava usando firebird 1.5, nesta empresa que estou desenvolvendo usando os componentes do elivado utilizo o Mysql40.
Bom espero que te ajude ou pelo menos uma luz, caso ache uma solução favor avise-me, obrigado.
Abraços
César
GOSTEI 0
Cesarpir
11/11/2003
Desculpe esqueci de dizer mas só da este problema quando no field do campo data eu coloco a mascar 99/99/9999;1
Ai da erro, mas sem ela blz, o problema é que o usuário tem que digitar as barras.
Valeu
César
Ai da erro, mas sem ela blz, o problema é que o usuário tem que digitar as barras.
Valeu
César
GOSTEI 0
Lorde_morte.
11/11/2003
Ai da erro, mas sem ela blz, o problema é que o usuário tem que digitar as barras.
Mas nao é nada profissional deixar um campo data sem qualquer mascara.
Ninguem sabe como solucionar esse problema?
Me ajudem!!
GOSTEI 0
Olavojr
11/11/2003
Sua resposta em:
http://forum.clubedelphi.net/viewtopic.php?t=69016
http://forum.clubedelphi.net/viewtopic.php?t=69016
GOSTEI 0
Brasidata
11/11/2003
Anos depois venho dar uma dica simples para resolver definitivamente a questão do amigo cesarpir (mesmo que ele já o tenha resolvido), e espero que sirva pra quem mais estiver passando por este problema.
O código abaixo deverá ser colocado no evento OnChange do DBedit que estiver com esse problema. Como o código usa TypeCast, não importa o nome do componente, do campo ou BD.
if ((SENDER as TDBEdit).DataSource.DataSet.State in [dsInsert,dsEdit]) AND ((SENDER as TDBEdit).Text = ´ / / ´) then
(SENDER as TDBEdit).Field.Clear;
Abraços a todos.
MARCO DELL ISOLA
BRASIDATA :D
O código abaixo deverá ser colocado no evento OnChange do DBedit que estiver com esse problema. Como o código usa TypeCast, não importa o nome do componente, do campo ou BD.
if ((SENDER as TDBEdit).DataSource.DataSet.State in [dsInsert,dsEdit]) AND ((SENDER as TDBEdit).Text = ´ / / ´) then
(SENDER as TDBEdit).Field.Clear;
Abraços a todos.
MARCO DELL ISOLA
BRASIDATA :D
GOSTEI 0