GARANTIR DESCONTO

Fórum Parametro nulo #375929

14/10/2009

0

Olá pessoal seguinte estou precisando passar um parametro nulo para uma data em uma sqlquery, porem esta dando erro dizendo que nao converte nulo em double estou utilizando

firebird 1.5
delphi 7
sqlconnection

ja tentei colocar o tipo do parametro
datatype := ftDate

ja tentei colocar direito
value := null

tambem ja tentei
AsDate := null

AsDateTime := null

AsSQLTimeStamp := null

clear

alguem poderia me ajudar

vlw


Ricardo54351060

Ricardo54351060

Responder

Posts

14/10/2009

Afarias

Query.ParamByName(´P_DATA´).Clear;


T+


Responder

Gostei + 0

14/10/2009

Ricardo54351060

Obrigado pela resposta porém quando utilizo o clear ele informa que nao existe valor para o parametro


Responder

Gostei + 0

14/10/2009

Afarias

Q componentes está usando? Qual a SQL e nome do parâmetro? Mostre a parte do código q está com problema.


T+


Responder

Gostei + 0

14/10/2009

Ricardo54351060

Estou usando um SQLQuery da dbExpress o banco é um Firebird 1.5 e o Delphi 7

Abaixo segue o código
try
if valida = true then
begin
t.IsolationLevel := xilREADCOMMITTED;
t.TransactionID := random(100);
dm.SQLConnection1.StartTransaction(t);
SQL := TSQLQuery.Create(nil);
SQL.SQLConnection := dm.SQLConnection1;
with SQL do
begin
Close;
SQL.Clear;
SQL.Add(´INSERT INTO ´ +
´ contas_receber ( ´ +
´ REC_NUMERO_TITULO, ´ +
´ REC_NUMERO_PARCELA, ´ +
´ REC_NUMERO_NF, ´ +
´ REC_NUMERO_PEDIDO, ´ +
´ REC_NUMERO_RPS, ´ +
´ REC_ESPECIE, ´ +
´ REC_DATA_EMISSAO, ´ +
´ REC_DATA_VENCIMENTO, ´ +
´ REC_DATA_RECEBIMENTO, ´ +
´ REC_TIPO_DE_CONTA, ´ +
´ REC_CENTRO_DE_CUSTO, ´ +
´ REC_CONTA, ´ +
´ REC_CODIGO_DO_CLIENTE, ´ +
´ REC_VL_TITULO, ´ +
´ REC_VL_DESCONTO, ´ +
´ REC_VL_PAGO, ´ +
´ REC_VL_JUROS, ´ +
´ REC_BANCO_RECEBIMENTO, ´ +
´ REC_FORMA_PAGAMENTO, ´ +
´ REC_OBSERVACAO, ´ +
´ REC_NUMERO_NFE, ´ +
´ REC_VL_A_PAGAR, ´ +
´ REC_SITUACAO, ´ +
´ REC_CODIGO_VENDEDOR, ´ +
´ VALOR_TAXA_ADM, ´ +
´ VALUES ( ´ +
´ :REC_NUMERO_TITULO, ´ +
´ :REC_NUMERO_PARCELA, ´ +
´ :REC_NUMERO_NF, ´ +
´ :REC_NUMERO_PEDIDO, ´ +
´ :REC_NUMERO_RPS, ´ +
´ :REC_ESPECIE, ´ +
´ :REC_DATA_EMISSAO, ´ +
´ :REC_DATA_VENCIMENTO, ´ +
´ :REC_DATA_RECEBIMENTO, ´ +
´ :REC_TIPO_DE_CONTA, ´ +
´ :REC_CENTRO_DE_CUSTO, ´ +
´ :REC_CONTA, ´ +
´ :REC_CODIGO_DO_CLIENTE, ´ +
´ :REC_VL_TITULO, ´ +
´ :REC_VL_DESCONTO, ´ +
´ :REC_VL_PAGO, ´ +
´ :REC_VL_JUROS, ´ +
´ :REC_BANCO_RECEBIMENTO, ´ +
´ :REC_FORMA_PAGAMENTO, ´ +
´ :REC_OBSERVACAO, ´ +
´ :REC_NUMERO_NFE, ´ +
´ :REC_VL_A_PAGAR, ´ +
´ :REC_SITUACAO, ´ +
´ :REC_CODIGO_VENDEDOR, ´ +
´ :VALOR_TAXA_ADM);´);
ParamByName(´REC_NUMERO_TITULO´).value := trim(titulo);
ParamByName(´REC_NUMERO_PARCELA´).value := trim(parcela);
ParamByName(´REC_NUMERO_NF´).value := trim(numeroNotaFiscal);
ParamByName(´REC_NUMERO_PEDIDO´).value := trim(numeroPedido);
ParamByName(´REC_NUMERO_RPS´).value := trim(numeroRps);
ParamByName(´REC_ESPECIE´).value := trim(especie);
ParamByName(´REC_DATA_EMISSAO´).value := dataEmissao;
ParamByName(´REC_DATA_VENCIMENTO´).value := dataVencimento;

if dataRecebimento > 0 then
ParamByName(´REC_DATA_RECEBIMENTO´).value := dataRecebimento
else
ParamByname(´REC_DATA_RECEBIMENTO´).Clear;

ParamByName(´REC_TIPO_DE_CONTA´).value := trim(planoTipo);
ParamByName(´REC_CENTRO_DE_CUSTO´).value := trim(planoCentro);
ParamByName(´REC_CONTA´).value := trim(planoConta);
ParamByName(´REC_CODIGO_DO_CLIENTE´).value := codigoCliente;
ParamByName(´REC_VL_TITULO´).value := valorTitulo;
ParamByName(´REC_VL_DESCONTO´).value := valorDesconto;
ParamByName(´REC_VL_PAGO´).value := valorPago;
ParamByName(´REC_VL_JUROS´).value := valorJuros;
ParamByName(´REC_BANCO_RECEBIMENTO´).value := trim(bancoRecebimento);
ParamByName(´REC_FORMA_PAGAMENTO´).value := trim(formaPagamento);
ParamByName(´REC_OBSERVACAO´).value := observacao;
ParamByName(´REC_NUMERO_NFE´).value := trim(numeroNfe);
ParamByName(´REC_VL_A_PAGAR´).value := valorPagar;
ParamByName(´REC_SITUACAO´).value := trim(situacao);
ParamByName(´REC_CODIGO_VENDEDOR´).value := codigoVendedor;
ParamByName(´VALOR_TAXA_ADM´).value := valorTaxaAdm;
ExecSQL;
end;
SQL.Free;
dm.SQLConnection1.Commit(t);
retorno := true;
messagedlg(´Gravação efetuada com sucesso!´, mtInformation, [mbOK], 0);
end;
except
on E: Exception do
begin
dm.SQLConnection1.Rollback(t);
SQL.Free;
messagedlg(´erro de gravação verifique! ´ + E.Message, mtError, [mbOK], 0);
end;
end;


Responder

Gostei + 0

14/10/2009

Afarias

Antes de qualquer coisa, tem 1 erro no seu SQL, aqui:

´VALOR_TAXA_ADM[b:944f6dc18a],[/b:944f6dc18a] ´ +
´ VALUES ( ´ +

quando deveria ser:

´VALOR_TAXA_ADM[b:944f6dc18a])[/b:944f6dc18a] ´ +
´ VALUES ( ´ +


É estranho .. mas bom... eu não uso DBX e não saberia dizer se ele dá esse erro normalmente ao dar um Clear em um parâmetro q não recebeu valor. Eu acho q vc poderia simplesmente ignorar ou contornar (se for esse o caso), tipo:

if dataRecebimento > 0 then
ParamByName(´REC_DATA_RECEBIMENTO´).value := dataRecebimento
else
if not ParamByName(´REC_DATA_RECEBIMENTO´).IsNull then
ParamByname(´REC_DATA_RECEBIMENTO´).Clear;

ou

if dataRecebimento > 0 then
ParamByName(´REC_DATA_RECEBIMENTO´).value := dataRecebimento
else
try
ParamByname(´REC_DATA_RECEBIMENTO´).Clear;
except end;


T+


Responder

Gostei + 0

14/10/2009

Ricardo54351060

Tendi, no caso do insert poderia ignorar a dataRecebimento, agora quando eu chegar no estorno ai vai ser problema pois ai eu teria que tirar a dataRecebimento

mas vlw pelas dicas


Responder

Gostei + 0

14/10/2009

Ricardo54351060

Para conhecimento de todos

Após varias tentativas descobri que para passar um parametro nulo através da sqlquery o Null deverá ficar entre parenteses (Null)

Obrigado a todos

fui


Responder

Gostei + 0

14/10/2009

Steve_narancic

Para conhecimento de todos Após varias tentativas descobri que para passar um parametro nulo através da sqlquery o Null deverá ficar entre parenteses (Null) Obrigado a todos fui


ta brincando???
eu ja fiz funcionar, definindo o tipo do parametro antes de passar o valor para o mesmo como no exemplo a seguir:
qry.sql.add(´update notas set datarecebimento = :datarecebimento where codigo = 1´);
qry.parambyname(´datarecebimento´).datatype:= ftDateTime;
qry.parambyname(´datarecebimento´).value:= null;
qry.execsql;



Responder

Gostei + 0

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

Aceitar