Fórum Capturar SQL de componentes da Dbexpress #280414
06/05/2005
0
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
Curtir tópico
+ 0
Responder
Posts
08/05/2005
Programaker
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!
Responder
Gostei + 0
09/05/2005
Vanilsonvjm
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
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)