Exclusão usando data no firebird = 30/12/99

Firebird

09/03/2010

Preciso excluir um lançamento de um controle de conta corrente, sendo que preciso excluir somente aquele registro exato, tenho os campos SEQUENCIAL, CONTA, E DATA que servem para diferenciar o lançamento dos demais contidos dentro do BD. Pois bem consigo obter normalmente o valor do campo SEQUENCIAL, o valor do campo CONTA, mas o campo DATA me retorna sempre 30/12/99 sendo que a data é 05/01/09 . (vi através do debug)   Tentei jogar essa data para um maskedit só para ver e jogou 30/12/99 maskedit1.text := DateToStr(CDSMovctaDATA.value);   a data dentro do bd está 05/01/09 , olhando pelo ibexpert, não tem nenhum lançamento sem data   o que estou fazendo errado?   a idéia é mais ou menos o seguinte (não dêem importância a sintaxes, falta de begin, end, etc.. o que vou escrever abaixo não é exatamente o código, é apenas para tentar explicar melhor o que preciso, ok.)   var comando:string;       seq:string;       cta:string;       data:TDateTime;           seq := CDSMovctaNUMSEQ.asstring;   // funciona perfeito : sequencial = '132'       cta := CDSMovctaCONTA.asstring;     // funciona perfeito : conta = '53'       data := CDSMovctaDATA.Value;          // deveria carregar 05/01/09 mas carrega 30/12/99         comando := 'delete from movcta where ';       comando := 'NUMSEQ =' + quotedstr(seq) + ' AND ';       comando := 'CONTA =' + quotedstr(cta) + ' AND ';       comando := 'DATA =' + quotedstr(DateToStr(data))';   ou seja, a variável "comando" era para ficar:   'delete from movcta where numseq = 132 and conta = 53 and data = 05/01/09'   mas fica   'delete from movcta where numseq = 132 and conta = 53 and data = 30/12/99'   -------- Obrigado e conto com a ajuda de vcs.. estou travado nesse problema.. sem poder seguir a diante      
Maivo Halberstadt

Maivo Halberstadt

Curtidas 0

Respostas

Junior Miranda

Junior Miranda

09/03/2010

30/12/99 = 30/12/1899(Data de partida). Isto significa que a variável DATA do tipo TDateTime está sendo atribuída com o valor 0. Dá uma olhada em CDSMovctaDATA.Value.

[]'s
GOSTEI 0
Luis Godinho

Luis Godinho

09/03/2010

No seu código você usa data := CDSMovctaDATA.Value, tente usar data := CDSMovctaDATA.AsDateTime;   Um outro detalhe que observei em seu código é que esta apenas usando o DatetoStr para converter a data. Devo lembrar que quando usa comando SQL direto, sem o uso de parametros a data deverá estar no formado "MM/DD/YYYY", sendo assim use ao invês de DateToStr a função FormatDateTime('MM/DD/YYYY',data);   Espero ter ajudado.
GOSTEI 0
Maivo Halberstadt

Maivo Halberstadt

09/03/2010

Mancada minha, é que estou trabalhando direto das 7:00 as 23:00 e as vezes o cérebro começa a falhar.. Eu errei na hora de escrever o código... o correto era     ...... := CDSMovctaDATA.Value; e eu tenho outra tabela com o nome parecido..... CDSMovcxaDATA.Value; troquei um "t" por um "x" , ao invés de pegar a data de MOVCTA (Movimento de contas) estava pegando de MOVCXA (Movimento do caixa)   Obrigado a todos e me desculpem.  
GOSTEI 0
POSTAR