Array
(
)

Pesquisa dinâmica com TSQLDataSet

Lorde_morte.
   - 08 abr 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´).

Alguem consegue enxergar o erro deste codigo?

Já utilizei o debug e esta tudo correto mas na hora de abrir o ClientDataSet (QENTIDADE) da erro. :shock:


#Código


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.
   - 08 abr 2006

Só para esclarecer, o erro aparece na ultima linha:
#Código

DMENTIDADE.QENTIDADE.Active:=TRUE;



Rjun
   - 08 abr 2006

Faltou o QUOTEDSTR, pois o LIKE precisa que o parâmetro esteja entre aspas.

Dei uma modificada no seu código, pois o seu ia contra minha religião.

#Código


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;



Lorde_morte.
   - 08 abr 2006

O erro continuou: ´NO VALUE FOR PARAMETER ´PAR_CPF´ ´

Os componentes estao corretos mas ainda assim vou por aqui:


Citação:

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


#Código


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



Citação:

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


#Código
object DSQENTIDADE: TDataSource
AutoEdit = False
DataSet = QENTIDADE
Left = 192
Top = 235
end


Abrigado pela atenção pessoa.


Rjun
   - 08 abr 2006

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


Lorde_morte.
   - 08 abr 2006

#Código


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.
:(


Rjun
   - 08 abr 2006

Coloque o Eduardo dentro QuotedStr.


Rjun
   - 08 abr 2006

Assim:

QuotedStr(´Eduardo´);


Lorde_morte.
   - 08 abr 2006

Nada. :(

#Código

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


Que erro estranho.


Rjun
   - 08 abr 2006

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.


Lorde_morte.
   - 08 abr 2006

O erro esta ocorrendo nos dois.

#Código

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


#Código
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.

:(


Lorde_morte.
   - 10 abr 2006

up