Capturar SQL de componentes da Dbexpress
Bom dia estou fazendo uma rotina de Filtro padrão para os meus formulário e estou com um problema para Capturar O texto sql de um componente SQLquery e SQLDataSet. No caso não estou conseguindo voltar até a origem do sql. Exemplo para eu descobrir o SQL basico onde os componentes estão dispostos da seguinte maneira:
SQLQuery linkado ao DataSetProvider que esta linkado ao ClientDataSet isto no DataModule.
no formulário o DataSourde linkado ao ClientDataSet.
variaveis :
vFields := pDataSource.DataSet;
vSQLtext := TSQLQuery(TDataSetProvider (TClientDataSetvFields).ProviderName).DataSet).slq.Text;
verifique que até o DataSetProvider eu consigo cheqar mas não consigo ir até o sql.text.
Fazendo isto eu pegarei o sql basico quando clicar no formulário eu farei o filtro utilizando como parâmetro os dbedits que o usuario informar.
se alguém puder me informar como conseguir retornar até o sql basico com informei acima. Obrigado.
Vanilson
SQLQuery linkado ao DataSetProvider que esta linkado ao ClientDataSet isto no DataModule.
no formulário o DataSourde linkado ao ClientDataSet.
variaveis :
vFields := pDataSource.DataSet;
vSQLtext := TSQLQuery(TDataSetProvider (TClientDataSetvFields).ProviderName).DataSet).slq.Text;
verifique que até o DataSetProvider eu consigo cheqar mas não consigo ir até o sql.text.
Fazendo isto eu pegarei o sql basico quando clicar no formulário eu farei o filtro utilizando como parâmetro os dbedits que o usuario informar.
se alguém puder me informar como conseguir retornar até o sql basico com informei acima. Obrigado.
Vanilson
Vanilsonvjm
Curtidas 0
Respostas
Programaker
06/05/2005
Isso acontece porque o provider se liga ao ClienteDataset pela propriedade providerName, que é uma String e não uma referência. isso acontece por causa do esqueminha de multicamadas, onde o provider eo c.d.s podem estar em processos diferentes, onde ligá-los por referência não faz sentido.
Pra chegar no SQLQuery, você precisa começar sua jornada a partir do provider, porque esse sim estará ligado à query através de uma referência.
Mas se você tem SQLQueries e SQLDataSets no programa, cuidado com o código do typecast ali! lembre-se que o SQLDataSet tem CommandText (String) e não SQL (TStrings ou TStringList, num lembro...). Eu já tive dores de cabeça com isso. Escolha um dos dois e defina-o como padrão, para oder tratá-los da mesma forma.
Se for mudar o SQL do componente em tempo de execução, escolha a SQLQuery. Eu já tive problemas tentando mexer no ComandText uma vez, porque todas as configurações dos parâmetros se perdem. A Query é mais estável, não tem frescura quanto a isso
Já vou indo; espero ter ajudado!
Pra chegar no SQLQuery, você precisa começar sua jornada a partir do provider, porque esse sim estará ligado à query através de uma referência.
Mas se você tem SQLQueries e SQLDataSets no programa, cuidado com o código do typecast ali! lembre-se que o SQLDataSet tem CommandText (String) e não SQL (TStrings ou TStringList, num lembro...). Eu já tive dores de cabeça com isso. Escolha um dos dois e defina-o como padrão, para oder tratá-los da mesma forma.
Se for mudar o SQL do componente em tempo de execução, escolha a SQLQuery. Eu já tive problemas tentando mexer no ComandText uma vez, porque todas as configurações dos parâmetros se perdem. A Query é mais estável, não tem frescura quanto a isso
Já vou indo; espero ter ajudado!
GOSTEI 0
Vanilsonvjm
06/05/2005
Agradeço a sua ajuda foi muito boa. Obrigado!
Eu estava achando que pelo fato do ClientDataSet linkar ao DataSetProvider teria uma outra propriedade que me retorna-se o DataSetProvider linkado a ele. pois se existisse eu so passaria o componente DataSource do Formulário e faria o filtro do SQL automáitcamente. Más vou tentar fazer esta forma que você me passou.
Obrigado.
Vanilson
Eu estava achando que pelo fato do ClientDataSet linkar ao DataSetProvider teria uma outra propriedade que me retorna-se o DataSetProvider linkado a ele. pois se existisse eu so passaria o componente DataSource do Formulário e faria o filtro do SQL automáitcamente. Más vou tentar fazer esta forma que você me passou.
Obrigado.
Vanilson
GOSTEI 0