Valor nul em PARAMBYNAME
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
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
Curtidas 0
Respostas
Alan Souza
10/01/2011
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;
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;
GOSTEI 0
Rogerio Santos
10/01/2011
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
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
GOSTEI 0
Alan Souza
10/01/2011
tente mudar a propriedade DataType do Param para ftDateTime:
se não der certo, tenta com o Null no Value.
se não der certo, tenta com o Null no Value.
GOSTEI 0
Rogerio Santos
10/01/2011
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
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
GOSTEI 0