Como mudar SQL dinamicamente de um WebService
Olá pessoal
tenho a seguinte arquitetura...
um SOAP Server Application com um Soap DataModule, com uma query (qryPessoa) e um datasetprovider (dspPessoa), corretamente ligados e realizando o seguinte comando SQL: ´SELECT * FROM TAB_PESSOA´.
E uma aplicação cliente que faz as operações (insert, update, delete), utilizando um clientdataset.
Até aqui tudo funciona corretamente!
Meu problema é quando tento realizar uma pesquisa sobre o ClientDataSet, considerando que minha tabela possui um tamanho razoável, e o banco estara diposnivel num servidor fora da empresa, seria interessante otimizar o result set... para isso eu deveria alterar a query e carregar novamente o clientdataset...
ai está o problema... eu até (em tese) consigo alterar o sql de minha qryPessoa, porém ao recarregar o clientdataset, o resultado esperado não ocorre... o que temos é o comando sql antigo (´SELECT * FROM TAB_PESSOA´), e infelizmente isto nao me atende... :o(
alguém saberia de orientar para solucionar este problema???
tipo... gostaria de passar inicialmente o comando
select * from tab_pessoa where nom_pessoa like ´¬Daniel¬´ . Por exemplo!
[]s[color=darkblue:0778a0cc6f][/color:0778a0cc6f]
tenho a seguinte arquitetura...
um SOAP Server Application com um Soap DataModule, com uma query (qryPessoa) e um datasetprovider (dspPessoa), corretamente ligados e realizando o seguinte comando SQL: ´SELECT * FROM TAB_PESSOA´.
E uma aplicação cliente que faz as operações (insert, update, delete), utilizando um clientdataset.
Até aqui tudo funciona corretamente!
Meu problema é quando tento realizar uma pesquisa sobre o ClientDataSet, considerando que minha tabela possui um tamanho razoável, e o banco estara diposnivel num servidor fora da empresa, seria interessante otimizar o result set... para isso eu deveria alterar a query e carregar novamente o clientdataset...
ai está o problema... eu até (em tese) consigo alterar o sql de minha qryPessoa, porém ao recarregar o clientdataset, o resultado esperado não ocorre... o que temos é o comando sql antigo (´SELECT * FROM TAB_PESSOA´), e infelizmente isto nao me atende... :o(
alguém saberia de orientar para solucionar este problema???
tipo... gostaria de passar inicialmente o comando
select * from tab_pessoa where nom_pessoa like ´¬Daniel¬´ . Por exemplo!
[]s[color=darkblue:0778a0cc6f][/color:0778a0cc6f]
Danielnascimento
Curtidas 0
Respostas
Rômulo Barros
26/07/2004
[color=red:b7b989dbd1][b:b7b989dbd1]Respondendo:[/b:b7b989dbd1][/color:b7b989dbd1]
Altere a propriedade do DataSetProvider Options[poAllowChangeCommandText] para True e siga os passos:
Quando vc abre o ClientDataSet, o conteúdo da sua propriedade COMMANDTEXT apenas será executado se não houver nenhuma outra instrução SQL na propriedade Sql da SqlQuery. Por isso é que deveremos limpar o SQL da SqlQuery. Também é por isso que o propriedade Options[poAllowChangeCommandText] do DataSetProvider vem por default o valor ´False´
:lol: :lol: :lol:
Altere a propriedade do DataSetProvider Options[poAllowChangeCommandText] para True e siga os passos:
SqlQuery.Sql.Clear; ClientDataSet.CommandText := ´Novo Select´ ; ClientDataSet.Open();
Quando vc abre o ClientDataSet, o conteúdo da sua propriedade COMMANDTEXT apenas será executado se não houver nenhuma outra instrução SQL na propriedade Sql da SqlQuery. Por isso é que deveremos limpar o SQL da SqlQuery. Também é por isso que o propriedade Options[poAllowChangeCommandText] do DataSetProvider vem por default o valor ´False´
:lol: :lol: :lol:
GOSTEI 0
Danielnascimento
26/07/2004
:D Ok obrigado... estarei implementando as alterações sugeridas e fazendo os devidos testes...
porem vc saberia me explicar o pq, de qdo eu utilizo um clientdataset, com uma tsqlquery, e um datasetprovider numa aplicação local e altero q query funciona... :oops:
Abraços e muito obrigado!
porem vc saberia me explicar o pq, de qdo eu utilizo um clientdataset, com uma tsqlquery, e um datasetprovider numa aplicação local e altero q query funciona... :oops:
Abraços e muito obrigado!
GOSTEI 0
Danielnascimento
26/07/2004
o que aconteceu... minha query esta no servidor da aplicação e nao tem como acessá-la diretamente... vc teria alguma outra sugestão?
[]s
Daniel
[]s
Daniel
GOSTEI 0
Rômulo Barros
26/07/2004
:D Ok obrigado... estarei implementando as alterações sugeridas e fazendo os devidos testes...
porem vc saberia me explicar o pq, de qdo eu utilizo um clientdataset, com uma tsqlquery, e um datasetprovider numa aplicação local e altero q query funciona... :oops:
Abraços e muito obrigado!
Supondo PoAllowChangeCommandText do DataSetProvider como True, temos:
Se a propriedade Sql do TSqlQuery estiver vazia, será válido o q estiver na propriedade CommandText do ClientDataSet. Se Sql não estivar vazio, será válido a TsqlQuery.
GOSTEI 0
Fr3dll
26/07/2004
Mas quando utilizo o command text para definir a SQL e faço alguma lateração nos dados (inclusão, exclusão, edição), elas nao sao alteradas depois do ApplyUpdates, como corrigir isso?
GOSTEI 0
Fr3dll
26/07/2004
SOBE
GOSTEI 0