Delphi XE4 Passagem de parâmetros não funciona
Olá amigos, estou com um problema com as passagens de parâmetros para um sqldataset. Estou com a estrutura:
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"
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
Curtidas 0
Respostas
Junior
25/07/2013
Consegui descobrir o porque do erro, na minha query tive que por um like pois estava fazendo pesquisa com %.
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
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
Eucatur Ltda.
25/07/2013
Wesley, coloca a QUERY ai pra te ajudar...
Valeu
Valeu
GOSTEI 0
Junior
25/07/2013
Wesley, coloca a QUERY ai pra te ajudar...
Valeu
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
Eucatur Ltda.
25/07/2013
Junior, pelo que eu entendi vc usa um formulário genérico frmPadrao...
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????
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