Fórum Valor nul em PARAMBYNAME #393581

10/01/2011

0

Boa noite   Na seguinte linha de código  
          while not Cds.eof do
            begin
             sUpdate := ' UPDATE PARCELASAPAGAR set DTVENC_PARCELASAPAGAR ' +
                        '  = :DTVENCPARCELASAPAGAR,' +
                        '  DTPAGTO_PARCELASAPAGAR      = :DTPAGTOPARCELASAPAGAR, ' +
                        '  VLPARCELA_PARCELASAPAGAR    = :VLPARCELA,   '   +
                        '  VLPAGO_PARCELASAPAGAR       = :VLPAGO,      '   +
                        '  VLJUROS_PARCELASAPAGAR      = :VLJUROS,     '   +
                        '  VLMULTA_PARCELASAPAGAR      = :VLMULTA,     '   +
                        '  NDOC_PARCELASAPAGAR         = :NDOC,        '   +
                        '  SITUACAO_PARCELASAPAGAR     = :SITUACAO,    '   +
                        '  CD_FORMPAGAMENTO            = :CD_FORMPAGTO '   +
                        '  WHERE CDITEM_PARCELASAPAGAR = :CDITEM     '     +
                        '  AND   CDCONTA_CONTASAPAGAR  = :CDCONTA   ';              tUpdate.Close;
             tUpdate.CommandText := '';
             tUpdate.CommandText := sUpdate;              tUpdate.ParamByName('DTVENCPARCELASAPAGAR').AsDateTime := Cds.FieldByName('DTVENCCDS')
                .AsDateTime;  
             if Cds.FieldByName('DTPAGTOCDS').AsString <> '' then
                tUpdate.ParamByName('DTPAGTOPARCELASAPAGAR').asDatetime :=
                Cds.FieldByname('DTPAGTOCDS').asDatetime              else tUpdate.ParamByName('DTPAGTOPARCELASAPAGAR').asDatetime := null                // Como faço para jogar um valor nulo quando é executado o comando update caso não tenha dt de pagto.. ASVARIANT, não está disponível em ParamByName....    
             tUpdate.ParamByName('VLPARCELA').AsFloat :=
                                        Cds.FieldByName('VLPARCELACDS').AsFloat;              tUpdate.ParamByName('VLPAGO').AsFloat :=
                                        Cds.FieldByName('VLPAGOCDS').AsFloat;              tUpdate.ParamByName('VLJUROS').AsFloat   :=
                                        Cds.FieldByName('VLJUROSCDS').AsFloat;              tUpdate.ParamByName('VLMULTA').AsFloat   :=
                                        Cds.FieldByName('VLMULTACDS').AsFloat;              tUpdate.ParamByName('NDOC').AsString     :=
                                        Cds.FieldByName('NDOCCDS').AsString;              tUpdate.ParamByName('SITUACAO').AsString :=
                                        Cds.FieldByName('SITUACAOCDS').AsString;              tUpdate.ParamByName('CD_FORMPAGTO').AsInteger :=
                                        Cds.FieldByName('CDFORMPAGTO').asInteger;              tUpdate.ParamByName('CDITEM').AsInteger :=
                                        Cds.FieldByName('CDSITEMCDS').AsInteger;              tUpdate.ParamByName('CDCONTA').AsInteger :=
                                        Cds.FieldByName('CDCONTA').AsInteger;              tUpdate.ExecSQL;
             dmConexao.comit;              Cds.Next;
            end;
            tUpdate.Free;
         end;
Estou usando Delphi 2010 e Firebird 2.1   Fico no aguardo   Rogério      
Rogerio Santos

Rogerio Santos

Responder

Posts

11/01/2011

Alan Souza

pode ser feito assim:

if Cds.FieldByName('DTPAGTOCDS').IsNull then
  tUpdate.ParamByName('DTPAGTOPARCELASAPAGAR').Clear
else
  tUpdate.ParamByName('DTPAGTOPARCELASAPAGAR').AsDateTime := Cds.FieldByname('DTPAGTOCDS').AsDateTime;

ou:

if Cds.FieldByName('DTPAGTOCDS').IsNull then
  tUpdate.ParamByName('DTPAGTOPARCELASAPAGAR').Value := Null
else
  tUpdate.ParamByName('DTPAGTOPARCELASAPAGAR').AsDateTime := Cds.FieldByname('DTPAGTOCDS').AsDateTime;
Responder

Gostei + 0

11/01/2011

Rogerio Santos

Olá, boa noite Eu fiz da forma como vc passou   if Cds.FieldByName('DTPAGTOCDS').IsNull then
  tUpdate.ParamByName('DTPAGTOPARCELASAPAGAR').Clear
else
  tUpdate.ParamByName('DTPAGTOPARCELASAPAGAR').AsDateTime := Cds.FieldByname('DTPAGTOCDS').AsDateTime;

mas apresenta msg de erro:   Estou usando o Firebird 2.1 e o Delphi 10 + dbx  
Responder

Gostei + 0

12/01/2011

Alan Souza

tente mudar a propriedade DataType do Param para ftDateTime:



se não der certo, tenta com o Null no Value.
Responder

Gostei + 0

12/01/2011

Rogerio Santos

Olá, consegui fazer.. Fiz assim:     if Cds.FieldByName('DTPAGTOCDS').IsNull then
             begin                 if FormatDateTime('dd/mm/yyyy',
                   Cds.FieldByName('DTPAGTOCDS').AsDateTime) = '30/12/1899' then
                   tUpdate.ParamByName('DTPAGTOPARCELASAPAGAR').DataType := ftDateTime
                else tUpdate.ParamByName('DTPAGTOPARCELASAPAGAR').asDatetime :=
                Cds.FieldByName('DTPAGTOCDS').AsDateTime;
             end
             else tUpdate.ParamByName('DTPAGTOPARCELASAPAGAR').asDatetime :=
                Cds.FieldByName('DTPAGTOCDS').AsDateTime;
Agora, está funcionando certinho, como eu queria   Mas obrigado pela ajuda     Rogério            
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar