Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

LeoLoko

Fechar multiplos Record Sets

Recommended Posts

Galera estou enfrentando um problema, que talvez possa ser simples, mas pra mim não está sendo.

 

Tenho um codigo asp que faz várias requisições e vai guardando os recordsets, exemplo:

set rs1 = conn.execute("LALALA")
set rs2 = conn.execute("LELeLe")
set rs3 = conn.execute("LiLiLi")

rs1.Close
rs2.Close
rs3.Close

Infelizmente desse jeito os rs continuam abertos, o único fechado é o rs3, pois foi o último a ser aberto. o que deixa uma conexao pendente.

 

Já se eu fizer assim:

 

set rs1 = conn.execute("LALALA")
rs1.Close

set rs2 = conn.execute("LELeLe")
rs2.Close

set rs3 = conn.execute("LiLiLi")
rs3.Close

Isso funciona perfeitamente, todos os rs são fechados belezinha.

 

 

Mas o meu problema é o seguinte... a pessoa que fez o codigo, que não sei quem é... primeiro ela faz todos os selects e vai guardando em vários recordsets... aí ele vai usar eles lá em baixo no codigo, dps de várias coisas, entre elas mais selects e recordsets.... resultado: eu não consigo fechar os recordsets.

 

O que eu posso fazer pra conseguir fecha-los? sem uma mudança muito brusca?

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Da forma anterior fecha sim os recordsets, o que deve estar acontecendo é algum outro problema ou outro recordset fica aberto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem certeza que o primeiro caso ano funciona?

 

Nunca fiz este teste mas nao vejo motivo para nao funcionar

 

Ao menos que esteja dentro de um IF ou outra condição que nao seja executada ou que ja tenha sido fechado e voce nao percebeu

 

Tem a mensagem de erro ou apenas nao funciona?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Da primeira forma realmente nao funciona.... facam o seguinte teste simples, como os exemplos que eu dei... mas antes de executar a pagina, abram o CMD e digitem:

 

netstat -na |find ":1433" |find "WAIT" /c

Provavelmente se vcs nao estiverem rondando nada alem do teste, irá aprecer o número 0

 

rodem o script da primeira forma, e digitem novamente o netstat irá aparecer o número 2

 

aguardem 5 minutos que é o tempo configurado no SQL Server para que essas 2 conexoes pendentes caiam

 

rode o netstat novamente, aparecerá o número 0

 

rodem o script da segunda forma, irá aparecer 0, pois as conexoes realmente foram fechadas como deveriam

 

Agora imaginem o site com grande números de acesso... aqui chega utilizar 100% do processador, + de 4000 conexoes pendentes simultaneamente...

 

Tah f*** :(

Compartilhar este post


Link para o post
Compartilhar em outros sites

Achei uma solução... bem mais ou menos... mas resolver parte do problema

 

é a seguinte:

 

set rs = CreateObject("adodb.recordset")
rs.CursorLocation = adUseClient
rs.LockType = adLockBatchOptimistic
rs.open "minha_query", conexao
set rs.ActiveConnection = Nothing

Isso funciona, e eu consigo usar o recordset mais a frente... porém quando é um select com count(*), não funciona... alguém sabe porque?

Compartilhar este post


Link para o post
Compartilhar em outros sites

que erro ocorre?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.