Mudando Instrução SQL em tempo de execução (ClientDataSet)
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.
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.
Roberto Skylord
Curtidas 0
Respostas
G1b4
06/08/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: !
Espero te-lo ajudado :wink: !
GOSTEI 0
Rafs
06/08/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.
Assim, os comandos que forem inseridos na propriedade CommandText do ClientDataSet irão alterar as instruções que estão na Query.
GOSTEI 0
Roberto Skylord
06/08/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.
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.
GOSTEI 0
Deryck
06/08/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:
jordano.soares@csnet.com.br :arrow:
GOSTEI 0