Ir para conteúdo

POWERED BY:

Arquivado

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

Andressito

Disconnected recorsets

Recommended Posts

Boa noite!

 

Estou usando a ideia de disconnected recordsets, como vi em um exemplo.

O problema é que se eu faço rs.close e rs = nothing na função que cria o disconnected recordset, eu não consigo usar na função principal. O recordset existe, mas o status é 0 (closed).

 

Eis a função que faz a query

Function dbQuery(strSQL)

Const adOpenStatic = 3    
Const adUseClient = 3
Const adLockBatchOptimistic = 4 
Dim   conn
Dim   rs

   'Cria a conexão com o banco de dados
   Set conn = Server.CreateObject("ADODB.Connection")
   conn.Provider = "Microsoft.ACE.OLEDB.12.0"
   conn.Open (Server.MapPath("/teste.accdb"))

   'Cria o objeto Recordset
   Set rs = Server.CreateObject("ADODB.Recordset")
   rs.CursorLocation = adUseClient
   
   'Executa query SQL
   rs.Open strSQL, conn, adOpenStatic, adLockBatchOptimistic

   'Disconecta o Recordset
   Set rs.ActiveConnection = Nothing

   'Retorna o Recordset
   Set dbQuery = rs

   conn.Close
   rs.Close
   Set conn = Nothing
   Set rs   = Nothing
End Function

E esta é a função principal

 

Function teste()
...
   sql = "SELECT * FROM usuarios WHERE "
   sql = sql & "cpf = '" & cpf & "'"

   Set userRS = dbQuery(sql)

   do until userRS.EOF
   for each x in userRS.Fields
   Response.Write(x.name)
   Response.Write(" = ")
   Response.Write(x.value & "<br />" & vbcrlf) 
   next
   Response.Write("<br />")
   userRS.MoveNext
   loop
...
End Function

Novamente: o rs existe, mas eu não posso acessar a propriedade EOF porque o rs está fechado.

Não sei se entendi errado a ideia, mas não seria justamente para trabalhar com uma cópia do rs no cliente? Tanto que o exemplo fecha o rs no final. Se eu deixo o rs aberto, eu consigo acessar, mas sou obrigado a fechar o rs na função principal.

 

Agradeço qualquer ajuda/opinião

 

Abraço e bom fim de ano!

 

Andre

Compartilhar este post


Link para o post
Compartilhar em outros sites

olha akipode te ajudar

Compartilhar este post


Link para o post
Compartilhar em outros sites

olha akipode te ajudar

 

Na verdade, essa ideia de matar o objeto de conexão eu tinha entendido e estou usando por isso.

Acontece que o exemplo que vi, depois de passar o recordset como resultado da function, fecha e encerra os objetos conexão E recordset. E a ideia seria trabalhar com um recordset no client. Mas não funcionou assim.

O que eu consegui fazer é dar um <set rs = nothing>, mas manter o rs aberto. Dessa forma, eu imagino que libere o máximo de recursos e ainda consigo trabalhar com o rs. Só que tenho que fazer o <set rs = nothing> no código principal.

O que eu queria saber é se essa é a forma correta de usar disconnected recordset como retorno de função.

 

De qualquer forma, agradeço!!

 

Andre

Compartilhar este post


Link para o post
Compartilhar em outros sites

com o rs fechado, ele naun consegue trabalhar,o recorset desconectados pode salvar recursos de servidor de banco de dados e melhorar a escalabilidade.você pode tentar após finalizar os processos chamar outra funcaun para fechá-lo

Compartilhar este post


Link para o post
Compartilhar em outros sites

com o rs fechado, ele naun consegue trabalhar,o recorset desconectados pode salvar recursos de servidor de banco de dados e melhorar a escalabilidade.você pode tentar após finalizar os processos chamar outra funcaun para fechá-lo

 

Então, pelo jeito, a forma que estou usando agora:

Function myFunction()
...
   myFunction = rs
   conn.Close
   Set conn = Nothing
   Set rs = Nothing
End Function

set rs2 = myFunction
...
'usa o recorset'
...
rs2.Close
Set rs2 = Nothing

É uma das melhores formas para liberar os recursos, usando só o necessário? E dessa forma eu realmente encerro todos os objetos e conexões criadas?

Se for, eu já fico satisfeito =)

 

Abraço

Compartilhar este post


Link para o post
Compartilhar em outros sites

sem duvida, uma forma a otimizar os acessos e obter notáveis ganhos de desempenho na aplicação. Um recurso que resulta numa incrível melhora na aplicação é o uso de recordsets desconectados.

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.