Fórum Exclusão usando data no firebird = 30/12/99 #20097
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
Posts
09/03/2010
Junior Miranda
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
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.
10/03/2010
Maivo Halberstadt
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.