Delphi XE4 Passagem de parâmetros não funciona

Delphi

25/07/2013

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"
Junior

Junior

Curtidas 0

Respostas

Junior

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

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.

Eucatur Ltda.

25/07/2013

Wesley, coloca a QUERY ai pra te ajudar...

Valeu
GOSTEI 0
Junior

Junior

25/07/2013

Wesley, coloca a QUERY ai pra te ajudar...

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.

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????


GOSTEI 0
POSTAR