Fórum Delphi XE4 Passagem de parâmetros não funciona #449478
25/07/2013
0
sqldataset > provider > clientdataset
no sqldataset coloquei a command : select * from FORNECEDOR where :pCOLUNA = :pVALOR
configurei o datatype dos params, dei um fetch params no clientdataset, até ai tudo bem.
No meu form modelo faço a seguinte instrução em um botão de pesquisa:
TClientDataSet(datasource.DataSet).Params[0].Value := coluna;
TClientDataSet(datasource.DataSet).Params[1].Value := valor;
// Dei esses showmessage pra ver o valor dos parâmetros.
ShowMessage(DM.cdsFornecedor.Params[0].AsString);
ShowMessage(DM.sdsFornecedor.Params[0].AsString);
ds.DataSet.open;
Executando o projeto e vendo os valores do show message, só aparece valor no clientdataset.
Porque o cds não repassa o parâmetro para o sds?
Com isso tenho um erro na execução pois a query esta abrindo sem parâmetros, da um erro "data Type unknow"
Junior
Curtir tópico
+ 0Posts
25/07/2013
Junior
Mas agora não consigo pesquisar nenhum valor, quando não informo nenhum valor para a pesquisa ele me traz todos corretamente, mas quando passo um valor pra pesquisa ela retorna vazia.
Meu botão pesquisar ficou assim
procedure TfrmPadrao.btnPesquisarClick(Sender: TObject);
var
I: integer;
begin
ds.DataSet.Close;
if (cbxFiltro.Text <> EmptyStr) then
for I := 0 to ds.DataSet.FieldCount - 1 do
begin
if (ds.DataSet.Fields[i].DisplayLabel = cbxFiltro.Text) then
if (ds.DataSet.Fields[i].DataType in [ftString,ftWideString,ftFixedChar]) then
begin
TClientDataSet(ds.DataSet).Params[0].Value := ds.DataSet.Fields[i].FieldName;
TClientDataSet(ds.DataSet).Params[1].Value := '%'+edtParametro.Text+'%';
ds.DataSet.Open;
end;
end;
end;Gostei + 0
26/07/2013
Eucatur Ltda.
Valeu
Gostei + 0
26/07/2013
Junior
Valeu
Eu pensei nessa possibilidade, mas trabalho com a mesma programação de CRUD pra todos os formulários da minha aplicação, não tenho como saber qual a tabela que vai ser chamada pra passar pra query.
Ou tem como saber em que tabela o datasource esta?
Gostei + 0
27/07/2013
Eucatur Ltda.
OK!
Na sua consulta ai vc passa 2 param... 0,1....
No 0 vc seta o Campo a ser filtrado...
No 1 vc seta o valor a ser filtrado...
Na sua query então, terá que ter Exemplo: -> SELECT * FROM Tabela WHERE :Campo LIKE :Valor
Esta correto a sua query????
Para consultas genéricas, o ideal é fazer um SQL simples sem WHERE trazendo todos os dados...
Digamos que vc possa fazer então uma função para retornar esses dados....
Uma pergunta, esta usando DataSnap????
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)