Pesquisa dinâmica com TSQLDataSet
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:
Desde já obrigado.
[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.
Curtidas 0
Respostas
Lorde_morte.
08/04/2006
Só para esclarecer, o erro aparece na ultima linha:
DMENTIDADE.QENTIDADE.Active:=TRUE;
GOSTEI 0
Rjun
08/04/2006
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].
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;
GOSTEI 0
Lorde_morte.
08/04/2006
[b:6d56c4608b]O erro continuou: ´NO VALUE FOR PARAMETER ´PAR_CPF´ ´[/b:6d56c4608b]
Os componentes estao corretos mas ainda assim vou por aqui:
Abrigado pela atenção pessoa.
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.
GOSTEI 0
Rjun
08/04/2006
Qual o valor que você esta tentando passar no Edit3? Você ja tentou passar um valor direto para ver se funciona?
GOSTEI 0
Lorde_morte.
08/04/2006
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.
:(
GOSTEI 0
Rjun
08/04/2006
Coloque o Eduardo dentro QuotedStr.
GOSTEI 0
Rjun
08/04/2006
Assim:
[b:2c913bbb46]QuotedStr(´Eduardo´);[/b:2c913bbb46]
[b:2c913bbb46]QuotedStr(´Eduardo´);[/b:2c913bbb46]
GOSTEI 0
Lorde_morte.
08/04/2006
Nada. :(
Que erro estranho.
DMEntidade.QSQLDataSetEntidade.CommandText := DMEntidade.QSQLDataSetEntidade.CommandText + ´ AND Nome LIKE :Par_Nome´; DMEntidade.QSQLDataSetEntidade.ParamByName(´PAR_NOME´).AsString := QuotedStr(´Eduardo´);
Que erro estranho.
GOSTEI 0
Rjun
08/04/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.
GOSTEI 0
Lorde_morte.
08/04/2006
O erro esta ocorrendo nos dois.
Mesmo que eu atribua valores aos parametros, por meio dois Parambyname, o sistema esta acusando que eles estao vazios.
:(
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.
:(
GOSTEI 0
Lorde_morte.
08/04/2006
up
GOSTEI 0