Fórum Problema com Maximo de cursores aberto - Delphi\Oracle #363808
12/09/2008
0
Boa tarde à todos,
Eu utilizo o delphi 2005 trabalhando com DBExpress acessando o oracle.
Sempre que eu abro um determino form criado nesse momento e esse form acessa uma tabela utilizando o trio (TClientDataSet, TSqlDataSet e TDataSetProvider) eu rodo o select abaixo
select count(*) num_curs
from v$open_cursor o, v$session s
where o.sid=s.sid and osuser = ´seu_usuario´
order by num_curs
e ele me retorna um numero x de cursores aberto quando abro uma manutenção ele me retorna x + 5 (ou seja 5 novas consultas a base), mais quando eu fecho esse form dando free. e rodo novamente o sql citado acima ele continua retornando os x + 5 cursores, ai se eu abrir e fechar varias vezes essa tela o sistema apresenta um erro ´máximo de cursores aberto´ e depois o sistema não consegue fazer mais nenhum acesso ao banco, tenho q fechar e abrir novamente o sistema.
Quando se utiliza os componentes TQuery existe um método chamado UnPrepare e Prepare que fecha o cursor, mais utilizando os componentes do dbexpress eu não conseguir liberar esse recurso, eu li na internet que o TDataSetProvider libera automaticamente esse recurso atraves de uma operação chamada Providing, mais não sei o por que ele não esta liberando esse cursor.
Alguem souber como resolvo esse problema ?
Obrigado pela atenção.
Alan
Eu utilizo o delphi 2005 trabalhando com DBExpress acessando o oracle.
Sempre que eu abro um determino form criado nesse momento e esse form acessa uma tabela utilizando o trio (TClientDataSet, TSqlDataSet e TDataSetProvider) eu rodo o select abaixo
select count(*) num_curs
from v$open_cursor o, v$session s
where o.sid=s.sid and osuser = ´seu_usuario´
order by num_curs
e ele me retorna um numero x de cursores aberto quando abro uma manutenção ele me retorna x + 5 (ou seja 5 novas consultas a base), mais quando eu fecho esse form dando free. e rodo novamente o sql citado acima ele continua retornando os x + 5 cursores, ai se eu abrir e fechar varias vezes essa tela o sistema apresenta um erro ´máximo de cursores aberto´ e depois o sistema não consegue fazer mais nenhum acesso ao banco, tenho q fechar e abrir novamente o sistema.
Quando se utiliza os componentes TQuery existe um método chamado UnPrepare e Prepare que fecha o cursor, mais utilizando os componentes do dbexpress eu não conseguir liberar esse recurso, eu li na internet que o TDataSetProvider libera automaticamente esse recurso atraves de uma operação chamada Providing, mais não sei o por que ele não esta liberando esse cursor.
Alguem souber como resolvo esse problema ?
Obrigado pela atenção.
Alan
Alancampos
Curtir tópico
+ 1
Responder
Posts
05/05/2015
Bruno Machado
To com um problema similar, utilizo o Delphi 2005, e por ele faço algumas chamadas de procedures/functions para o Oracle. Mas ao final de cada chamada, eu dou um "Free". Mesmo assim os cursos abertos estão se acumulando. Dentro das procedures que chamo pelo Delphi, existem outras chamadas.. Me passa a impressão que essas chamadas secundárias não estão sendo liberadas pelo free..
Já procurei alguma maneira de liberar o recurso no final de cada procedure do oracle mas não encontrei..
Se alguém puder ajudar, ficaria grato!
Já procurei alguma maneira de liberar o recurso no final de cada procedure do oracle mas não encontrei..
Se alguém puder ajudar, ficaria grato!
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)