Pesquisa dinâmica com TSQLDataSet

08/04/2006

Quando o usuário digita o cpf ou o nome do fornecedor o delphi esta dando erro dizendo que par_cpf e par_nome estao vazios(no value for parameter ´PAR_CPF´).

[b:5d061e330e]Alguem consegue enxergar o erro deste codigo?[/b:5d061e330e]

Já utilizei o debug e esta tudo correto mas na hora de abrir o ClientDataSet ([b:5d061e330e]QENTIDADE[/b:5d061e330e]) da erro. :shock:


procedure TBFornecedores.ExecutarQuery;
begin
   DMENTIDADE.QENTIDADE.Active:=FALSE;
   DMENTIDADE.QSQLDataSetENTIDADE.Active:=FALSE;
   DMENTIDADE.QSQLDataSetENTIDADE.CommandText:=´SELECT NOME,INSCRICAOFEDERAL,codigo FROM ENTIDADE WHERE CODIGO IN (SELECT CODIGOENTIDADE FROM FORNECEDORES) AND CODIGO IN (´+FORNECEDOR.CODIGO+´)´;

   IF EDIT2.TEXT<>´´ THEN
   BEGIN
     DMENTIDADE.QSQLDataSetENTIDADE.CommandText:=DMENTIDADE.QSQLDataSetENTIDADE.CommandText+´ AND NOME LIKE :PAR_NOME´;
     if length(Edit2.Text)>=60 then//O delphi esta estranhando o ¬
         DMENTIDADE.QSQLDataSetENTIDADE.ParamByName(´PAR_NOME´).AsString:=Edit2.Text <--ALIMENTO OS PARAMETROS AQUI!
     else
         DMENTIDADE.QSQLDataSetENTIDADE.ParamByName(´PAR_NOME´).AsString:=Edit2.Text+´¬´;<--ALIMENTO OS PARAMETROS AQUI!
   END;


   IF EDIT3.TEXT<>´´ THEN
   BEGIN
     DMENTIDADE.QSQLDataSetENTIDADE.CommandText:=DMENTIDADE.QSQLDataSetENTIDADE.CommandText+´ AND INSCRICAOFEDERAL LIKE :PAR_CPF´;
     if length(Edit3.Text)>=18 then//O delphi esta estranhando o ¬
         DMENTIDADE.QSQLDataSetENTIDADE.ParamByName(´PAR_CPF´).AsString:=Edit3.Text  <--ALIMENTO OS PARAMETROS AQUI!
     else
         DMENTIDADE.QSQLDataSetENTIDADE.ParamByName(´PAR_CPF´).AsString:=Edit3.Text+´¬´;<--ALIMENTO OS PARAMETROS AQUI!
   END;
   DMENTIDADE.QSQLDataSetENTIDADE.CommandText:=DMENTIDADE.QSQLDataSetENTIDADE.CommandText+´ ORDER BY NOME´;

   DMENTIDADE.QSQLDataSetENTIDADE.active:=true;
   DMENTIDADE.QENTIDADE.Active:=TRUE;
end;


Desde já obrigado.


Lorde_morte.

Respostas

08/04/2006

Lorde_morte.

Só para esclarecer, o erro aparece na ultima linha:
DMENTIDADE.QENTIDADE.Active:=TRUE;



Responder Citar

08/04/2006

Rjun

Faltou o [b:0963950ec2]QUOTEDSTR[/b:0963950ec2], pois o LIKE precisa que o parâmetro esteja entre aspas.

Dei uma modificada no seu código, pois o seu ia contra minha [b:0963950ec2]religião[/b:0963950ec2].

procedure TBFornecedores.ExecutarQuery;
begin
  DMEntidade.QEntidade.Active := False;
  DMEntidade.QSQLDataSetEntidade.Active:=FALSE;
  DMEntidade.QSQLDataSetEntidade.CommandText :=
    ´SELECT Nome, InscricaoFederal, Codigo FROM Entidade WHERE Codigo In ´ +
    ´(SELECT CodigoEntidade FROM Fornecedores) AND Codigo IN (´ +
    FORNECEDOR.CODIGO + ´)´;

  if (Edit2.Text <> ´´) then
  begin
    DMEntidade.QSQLDataSetEntidade.CommandText := DMEntidade.QSQLDataSetEntidade.CommandText +
      ´ AND Nome LIKE :Par_Nome´;

    if Length(Edit2.Text) >= 60 then
      DMEntidade.QSQLDataSetEntidade.ParamByName(´PAR_NOME´).AsString := Edit2.Text
    else
      DMEntidade.QSQLDataSetEntidade.ParamByName(´PAR_NOME´).AsString := QuotedStr(Edit2.Text + ´¬´);
  end;

  if (Edit3.Text <> ´´) then
  begin
    DMEntidade.QSQLDataSetEntidade.CommandText := DMEntidade.QSQLDataSetEntidade.CommandText +
      ´ AND InscricaoFederal LIKE :PAR_CPF´;

    if Length(Edit3.Text) >= 18 then
      DMEntidade.QSQLDataSetEntidade.ParamByName(´PAR_CPF´).AsString := Edit3.Text
    else
      DMEntidade.QSQLDataSetEntidade.ParamByName(´PAR_CPF´).AsString := QuotedStr(Edit3.Text + ´¬´);
  end;

  DMEntidade.QSQLDataSetEntidade.CommandText := DMENTIDADE.QSQLDataSetENTIDADE.CommandText +
    ´ ORDER BY Nome´;

  DMEntidade.QSQLDataSetEntidade.active := True;
  DMEntidade.QEntidade.Active := True;
end;



Responder Citar

08/04/2006

Lorde_morte.

[b:6d56c4608b]O erro continuou: ´NO VALUE FOR PARAMETER ´PAR_CPF´ ´[/b:6d56c4608b]

Os componentes estao corretos mas ainda assim vou por aqui:

object QSQLDataSetENTIDADE: TSQLDataSet CommandText = ´select * from ENTIDADE´ MaxBlobSize = -1 Params = <> SQLConnection = AutoCom.AutomacaoComercial2 Left = 64 Top = 160 end


object QDataSetProviderENTIDADE: TDataSetProvider
  DataSet = QSQLDataSetENTIDADE
  Left = 64
  Top = 232
end


object QENTIDADE: TClientDataSet Aggregates = <> Params = <> ProviderName = ´QDataSetProviderENTIDADE´ AfterInsert = ENTIDADEAfterInsert Left = 192 Top = 160 object QENTIDADECODIGO: TIntegerField FieldName = ´CODIGO´ Required = True end object QENTIDADENOME: TStringField FieldName = ´NOME´ Required = True Size = 60 end object QENTIDADEINSCRICAOFEDERAL: TStringField FieldName = ´INSCRICAOFEDERAL´ Size = 18 end end


object DSQENTIDADE: TDataSource
  AutoEdit = False
  DataSet = QENTIDADE
  Left = 192
  Top = 235
end


Abrigado pela atenção pessoa.


Responder Citar

08/04/2006

Rjun

Qual o valor que você esta tentando passar no Edit3? Você ja tentou passar um valor direto para ver se funciona?


Responder Citar

08/04/2006

Lorde_morte.

   
DMEntidade.QSQLDataSetEntidade.CommandText := DMEntidade.QSQLDataSetEntidade.CommandText + 
      ´ AND Nome LIKE :Par_Nome´; 
   DMEntidade.QSQLDataSetEntidade.ParamByName(´PAR_NOME´).AsString := ´EDUARDO´;


O erro continuou.
Até ja reiniciei o computador.
:(


Responder Citar

08/04/2006

Rjun

Coloque o Eduardo dentro QuotedStr.


Responder Citar

08/04/2006

Rjun

Assim:

[b:2c913bbb46]QuotedStr(´Eduardo´);[/b:2c913bbb46]


Responder Citar

08/04/2006

Lorde_morte.

Nada. :(

DMEntidade.QSQLDataSetEntidade.CommandText := DMEntidade.QSQLDataSetEntidade.CommandText + 
      ´ AND Nome LIKE :Par_Nome´; 
   DMEntidade.QSQLDataSetEntidade.ParamByName(´PAR_NOME´).AsString := QuotedStr(´Eduardo´);


Que erro estranho.


Responder Citar

08/04/2006

Rjun

Você disse que o erro está em PAR_CPF mas você está setando PAR_NOME. Coloque um valor para PAR_CPF e veja se o erro persiste.


Responder Citar

08/04/2006

Lorde_morte.

O erro esta ocorrendo nos dois.

DMEntidade.QSQLDataSetEntidade.CommandText := DMEntidade.QSQLDataSetEntidade.CommandText + 
      ´ AND InscricaoFederal LIKE :PAR_CPF´;


DMEntidade.QSQLDataSetEntidade.CommandText := DMEntidade.QSQLDataSetEntidade.CommandText + 
      ´ AND Nome LIKE :Par_Nome´;


Mesmo que eu atribua valores aos parametros, por meio dois Parambyname, o sistema esta acusando que eles estao vazios.

:(


Responder Citar

10/04/2006

Lorde_morte.

up


Responder Citar