Array
(
)

Mudando Instrução SQL em tempo de execução (ClientDataSet)

Roberto Skylord
   - 06 ago 2004

Olá Pessoal
Estou com a seguinte dúvida.

Eu tenho uma aplicação que quando o usuário efetua uma consulta, é apresentada uma tela padrão para que ele escolha por quais campos ele gostaria de filtrar a query e os respectivos valores.
Ex.
SELECT a, b, c FROM tbl1 (Esta é a parte fixa do SQL que fica na TQuery)

Quando o usuário selecionava a consulta, era apresentado a ele as seguintes opções
a
b
c

Dependendo das opções escolhidas (campos, maior que , entre, etc) o programa terminava de montar o statement SQL.
Ex.:
WHERE a = ´blablabla´ ORDER BY b

e adicionava este Where ao Select já existente.
Isto é feito diretamente na TQuery, que está no formulário local.

A minha dúvida é, como fazer isto, considerando que a Query está agora no DataModule, e no formulário existe apenas o ClientDataSet referente àquela Query, sem que para isto eu precise declarar a unit do DM na seção uses do meu form?

Valeu.


G1b4
   - 06 ago 2004

Para não declarar na uses seu datamodule.... você pode trabalhar com a propriedade filter do clientdataset, ou Findkey, findnearest e locate... Para ordenar, use o indexfieldname...

Espero te-lo ajudado :wink: !


Rafs
   - 06 ago 2004

Para incluir instruções SQL no ClientDataSet, utilize a propriedade CommandText e altere a propriedade poAllowCommandText do DataSetProvider para True.
Assim, os comandos que forem inseridos na propriedade CommandText do ClientDataSet irão alterar as instruções que estão na Query.


Roberto Skylord
   - 06 ago 2004

O caso do Filter funcionaria para consultas em tabelas com poucas informações.
Mas uma das tabelas possui mais de 3 milhões de registros, e cresce na razão de 30mil+ por mês, o que inviabiliza o seu uso. Mesmo assim valeu pela força.

Vou testar o ComandText. Eu tinha tentado uma vez mas não tinha funcionado.

Valeu aos dois.


Deryck
   - 06 ago 2004

Você que modifica o SQL da ibquery em tempo de excução? Se for isso, eu sei como fazer, é bem simples, me explica o que você quer certinha que te mando uma explicação detalhada, de preferencia, manda no meu mail e aqui no forum também ...
jordano.soares@csnet.com.br :arrow: