Fórum Delphi 2010 não aceita Parametro Null #401109
16/05/2011
0
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
Curtir tópico
+ 0Posts
17/05/2011
Eduardo Marcolongo
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
17/05/2011
Marco Aurelio
Marco
Gostei + 0
17/05/2011
Rafael Mattos
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
17/05/2011
Rafael Mattos
Gostei + 0
17/05/2011
Marco Aurelio
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
Clique aqui para fazer login e interagir na Comunidade :)