Ainda com problema

07/08/2008

1

Galera agradeço a ajuda que me deram, mas ainda encontro problemas.

Aqui vai uma parte do código

Dm.SQLDataSet5.Close;
Dm.SQLDataSet5.CommandText := ´Select * from Parcela where NumResumo=:resumo´;
Dm.SQLDataSet5.ParamByName(´resumo´).AsInteger := g_numero_da_nova_venda;
Dm.SQLDataSet5.Open;
if not Dm.SQLDataSet5.IsEmpty then
begin
Dm.SQLDataSet5.First;
while not Dm.SQLDataSet5.Eof do
begin
Dm.SQLDataSet6.Close;
Dm.SQLDataSet6.CommandText := ´Insert Into Carne´ +
´(NumResumo, Parcela, DtVencimento, Valor_Parcela, Valor_Entrada, DtEntrada, CodCliente, DtVenda)´ +
´values(:resumo,:nparc,:dVencto,:vlrParc,:vlrEnt,:dtEnt,:codCli, :dDtVenda)´;
// Passa valores paa a query por meio dos parametros
Dm.SQLDataSet6.ParamByName(´resumo´).AsInteger := Dm.SQLDataSet5.FieldByName(´NumResumo´).AsInteger;
Dm.SQLDataSet6.ParamByName(´nparc´).AsInteger := Dm.SQLDataSet5.FieldByName(´Parcela´).AsVariant;
Dm.SQLDataSet6.ParamByName(´dVencto´).AsDate := Dm.SQLDataSet5.FieldByName(´DtVencimento´).AsDateTime;
Dm.SQLDataSet6.ParamByName(´vlrParc´).AsFloat := Dm.SQLDataSet5.FieldByname(´Valor_parcela´).AsFloat;
Dm.SQLDataSet6.ParamByName(´vlrEnt´).AsFloat := Dm.SQLDataSet5.FieldByName(´Valor_Entrada´).AsFloat;


[color=blue:544036cbb1][b:544036cbb1] //
if (Dm.SQLDataSet5.FieldByName(´DtEntrada´).AsString = ´´) then
Dm.SQLDataSet6.ParamByName(´dtEnt´).AsDateTime := null
else
Dm.SQLDataSet6.ParamByName(´dtEnt´).AsDate := Dm.SQLDataSet5.FieldByName(´DtEntrada´).AsDateTime;
//
[/b:544036cbb1][/color:544036cbb1]
Dm.SQLDataSet6.ParamByName(´dDtVenda´).AsDate := now();
Dm.SQLDataSet6.ParamByName(´codcli´).AsInteger := nClienteEncontrado;
// Executa a query
Dm.SQLDataSet6.ExecSQL;
Dm.cds_Carne.ApplyUpdates(-1);
Dm.SQLDataSet5.Next;
end;
end;


Bom é o seguinte, no texto em azul (que esta entre as barras \\,) ele tem que verificar se o campo data da tabela parcela possui data de entrada, se não houver ele deverá gravar na tabela carne a data de entrada como sendo NULL (vazia, sem nada), se tiver data de entrada, então grava a data de entrada que foi defina no componente MaskEdit.

Parece simples, mas infelizmente não deu muito certo. Utilizo componentes do DbExpress com Firebird 2.0

O problema é que sem a rotina de verificação ele grava 30/12/1899. e isto esta me causando problemas em outros módulos, pois esta data não pode existir.
Sei que é um dilema este negocio de data de 1899, conforme alguns tópicos do fórum. Que infelizmente foi tentado de diversas maneiras e infelizmente o resultado não foi o esperado.


Grato a todos que de alguma forma ajudaram.

Valnei.


Responder

Posts

07/08/2008

Luiz Henrique

Bom dia objetivacreator

Fiz um teste, aqui e gravou assim Null assim, com o componente TSQLDataSet:

...ParamByName(´PDATA´).AsString:= ´´;
...ExecSQL;

Com o IBExpert:
Selecionei antes, tinha data, executei o comando acima e ficou Null.

Espero que ajude, T+


Responder

07/08/2008

Luiz Henrique

...logico, fiz no Delphi e usei o IBExpert para acompanhamento...


Responder

08/08/2008

Thomaz_prg

Não faça assim:

Dm.SQLDataSet6.ParamByName(´dtEnt´).AsDateTime := null


Ao invés disso, deixe assim:

Dm.SQLDataSet6.ParamByName(´dtEnt´).Clear;


Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira