Delphi 2010 não aceita Parametro Null

Delphi

16/05/2011

Pessoal,   Estou migrando do delphi 3 para o Delphi 2010 e esbarrei em um problema esquisito. No código abaixo ao montar a consulta dinamicamente ou staticamente não, quando seto alguns valores como null não retorna nenhum registro.   Pelo que constatei pelo program SqlMonitor os parametros são preenchidos com zero. Enquanto na versão compilada em delphi 3 a 7 o parâmetro é null.   Alguém poderia me ajudar?? Abaixo também inclui um trecho da consulta. O sistema inteiro trabalha desta forma.
   if DBLKCBMotorista.KeyValue <> NULL then     DataSet.ParamByName('IntPesTran').AsInteger := DBLKCBMotorista.KeyValue   else begin     DataSet.ParamByName('IntPesTran').DataType := ftInteger;     DataSet.ParamByName('IntPesTran').clear;   end;
   if DBLKCBCavalo.KeyValue <> NULL then     DataSet.ParamByName('StrPlaca').AsString := DBLKCBCavalo.KeyValue   else begin     DataSet.ParamByName('StrPlaca').DataType := ftString;     DataSet.ParamByName('StrPlaca').Clear;   end;
   DataSet.ParamByName('NumCGCRed').DataType := ftFloat;   DataSet.ParamByName('NumCGCRed').Clear;
Parte da consulta 
   DataSet.SQL.Add('AND ((TRelacao.StrPlaca = :StrPlaca) OR (:StrPlaca IS NULL))');   DataSet.SQL.Add('AND ((TRelacao.IntArea = :IntArea) OR (:IntArea IS NULL))');   DataSet.SQL.Add('AND ((NumCGCRed = :NumCGCRed) OR (:NumCGCRed IS NULL))');
Marco Aurelio

Marco Aurelio

Curtidas 0

Respostas

Eduardo Marcolongo

Eduardo Marcolongo

16/05/2011

   DataSet.SQL.Add('AND ((TRelacao.StrPlaca = :StrPlaca) OR (:StrPlaca IS NULL))');   DataSet.SQL.Add('AND ((TRelacao.IntArea = :IntArea) OR (:IntArea IS NULL))');   DataSet.SQL.Add('AND ((NumCGCRed = :NumCGCRed) OR (:NumCGCRed IS NULL))');
Esta parte não deveria ser assim:
   DataSet.SQL.Add('AND ((TRelacao.StrPlaca = :StrPlaca) OR (TRelacao.StrPlaca IS NULL))');   DataSet.SQL.Add('AND ((TRelacao.IntArea = :IntArea) OR (TRelacao.IntArea IS NULL))');   DataSet.SQL.Add('AND ((NumCGCRed = :NumCGCRed) OR (NumCGCRed IS NULL))');
GOSTEI 0
Marco Aurelio

Marco Aurelio

16/05/2011

  Eduardo,    Obrigado pela resposta, mas o problema continua. O problema em si está no parâmetro que o delphi está entendo como diferente de nulo.     Quando o parâmetro não for preenchido ( "Nulo" ) o sistema deverá retornar todos os registros, independentes se está preenchido ou não.
Marco
GOSTEI 0
Rafael Mattos

Rafael Mattos

16/05/2011

  Eduardo,    Obrigado pela resposta, mas o problema continua. O problema em si está no parâmetro que o delphi está entendo como diferente de nulo.     Quando o parâmetro não for preenchido ( "Nulo" ) o sistema deverá retornar todos os registros, independentes se está preenchido ou não.
Marco



  DataSet.ParamByName('NumCGCRed').Clear;


ele não aceita abrir mais o componente com o parametro null.

não cheguei trabalhar com o Delphi 3, mas nem no Delphi 6 e 7 ele aceitava isso
GOSTEI 0
Rafael Mattos

Rafael Mattos

16/05/2011

vc teria que fazer que nem o pessoal falou a em cima
GOSTEI 0
Marco Aurelio

Marco Aurelio

16/05/2011

Obrigado Rafael.
    Complicado pois acontece que alguns pontos do sistema funciona o clear normalmente. Alias encontrei muitos outros pontos no sistema que utiliza o clear. Mapear o porque que esta tela em especifico está assim, está complicado. Como são muitos outros pontos a verificar, não dá para saber de imediato qual mais não funciona.    O componente Query está em um Data Module. O mesmo é preenchido dinamicamente na tela da pesquisa.    Os parâmetros que não são utilizados no filtro, como o exemplo acima, tem que ser passado como nulo para retornar todos registros equivalentes ao mesmo. 
       DataSet.SQL.Add('AND ((TRelacao.IntMotorista = :IntPesTran) OR (:IntPesTran IS NULL))');

    Acredito que se eu alterar o código para quando não tiver valor selecionado do filtro não inclua o código acima citado. O problema é fazer assim no sistema todo.     Como disse, tem tela que funciona. O parâmetro recebe null perfeitamente, nesta específica está recebendo "0";      Mas não vou desistir fácil assim do Delphi 2010.
Valeu.
GOSTEI 0
POSTAR