Fórum Problemas com TSqlQuery no DBExpress #232774

17/05/2004

0

Estou desenvolvendo um sistema com dbexpress e tenho uma tabela de profissionais onde possuem 3 tipos de registros: medicos, anestesistas e outros, no formulario onde preciso separar este profissionais pelos seus respectivos tipos. Para isso uso a seguinte instrução SQL:

[i:396962be3a]select codigo, nome from profissionais where funcao = ´medico´ order by nome[/i:396962be3a]

A query aceita normalmente a instrução e o active consegue ficar setado para true, mas quando vou acessar o campo para informar o nome do profissional cujo o tipo é medico ou qualquer outro tipo acontece o seguinte erro:

tempo de execução: dbexpress error: Operation Not Suported.

Na depuração: Table Unknown profissionais at line 1, column 38.

Se alguem puder por favor me ajudem...

Desde já agradeço!


Jsaraujo

Jsaraujo

Responder

Posts

17/05/2004

Cabelo

Caro Colega..

Isto acontece pq para acessar os dados com os componentes DBExpress vc deve utilizar um ClientDataSet, que é um componete que direciona qual a sequncia de dados vc utiliza, isto é um SQLQuery é somente unidirecional, não podendo assim trazer os dados na tela..

Para utilizar o Client, selecione-o na paleta do DBExpress, juntamente com um DataSetProvider..

Na propriedade DataSet do DataSetProvider selecione a SQLQuery, dê um nome para o Provider.
Na propriedade ProviderName do Client, selecione o DataSet Provider, continue usando as instruções da mesma foema como vc utiliza agora..
Para acessar os dados, quando der um open na Query, dê um open no Client tb, e acesse os dados através do Client como vc faz com a Query, perceba que agora usando um componente bidirecional, vc consegue visualizar todos os registros, e tb consegue fazer manutenção nos mesmos..

espero ter ajudado..

sem mais

Cabelo


Responder

Gostei + 0

17/05/2004

Jsaraujo

Ola companheiro segui seu conselho e funcionou muito obrigado pela dica!


Responder

Gostei + 0

17/05/2004

Cabelo

Caro colega

Só para completar..

se vc fosse utilizar um DBGrid, vc teria que usar um DataSource, para ligar o DBGrid, para isso, selecione o DataSource na paleta DataAccess, e na propriedade DataSet do dataSource, selecione o ClientDataSet..

espero ter ajudado..

sem mais

Cabelo


Responder

Gostei + 0

31/05/2004

Karencamila

estou mudando a conexao do meu sistema do BDE para DBExpress, e as dicas do cabelo_uni foram muito úteis.

Fiz uma consulta exatamente como na dica do cabelo_uni, porém percebi que em um mesmo select (select * from table) é mais demorado o ClientDataSet.Open do que o Query.Open ( via BDE ).

Pq isso acontece??

Oq seria mais viável: continuar como está ( BDE ) ou mudar toda a conexão ( para DbExpress) ???


Responder

Gostei + 0

31/05/2004

Cbritojunior

Vc pode otimizar o processo de abertura do ClientDataSet, paginando os ResultSets retornados, como na Web por exemplo.

Para isso vc utilizará as duas propriedades ´mágicas´ do ClientDataSet.
A propriedade PacketRecords e FetchOnDemand.

Colocando o propriedade FetchOnDemand para True e alterando o
PacketRecords de -1 (default) para 30, a query retornará somente 30 registros, sendo quanto o cursor chegar o registro de nº 30, a query será repaginada de 31..60.

Mas lembre-se, nunca ofereça uma abertura total de tabela como essas, procure sempre utilizar a cláusula where em suas consultas, de forma a fragmentar tanto vertical quanto horizontalmente suas buscas.

Espero ter ajudado.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar