Ainda com problema
07/08/2008
0
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.
Objetivacreator
Posts
07/08/2008
Luiz Henrique
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+
07/08/2008
Luiz Henrique
08/08/2008
Thomaz_prg
Dm.SQLDataSet6.ParamByName(´dtEnt´).AsDateTime := null
Ao invés disso, deixe assim:
Dm.SQLDataSet6.ParamByName(´dtEnt´).Clear;
Clique aqui para fazer login e interagir na Comunidade :)