Fórum Delphi 2010 não aceita Parametro Null #401109

16/05/2011

0

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

Responder

Posts

17/05/2011

Eduardo Marcolongo

   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))');
Responder

Gostei + 0

17/05/2011

Marco Aurelio

  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
Responder

Gostei + 0

17/05/2011

Rafael Mattos

  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
Responder

Gostei + 0

17/05/2011

Rafael Mattos

vc teria que fazer que nem o pessoal falou a em cima
Responder

Gostei + 0

17/05/2011

Marco Aurelio

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.
Responder

Gostei + 0

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

Aceitar