Parametro nulo
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
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
Curtidas 0
Respostas
Afarias
14/10/2009
Query.ParamByName(´P_DATA´).Clear;
T+
T+
GOSTEI 0
Ricardo54351060
14/10/2009
Obrigado pela resposta porém quando utilizo o clear ele informa que nao existe valor para o parametro
GOSTEI 0
Afarias
14/10/2009
Q componentes está usando? Qual a SQL e nome do parâmetro? Mostre a parte do código q está com problema.
T+
T+
GOSTEI 0
Ricardo54351060
14/10/2009
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;
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;
GOSTEI 0
Afarias
14/10/2009
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+
´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+
GOSTEI 0
Ricardo54351060
14/10/2009
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
mas vlw pelas dicas
GOSTEI 0
Ricardo54351060
14/10/2009
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
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
GOSTEI 0
Steve_narancic
14/10/2009
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;
GOSTEI 0