ADO: desconectando um Recordset gerado por um objeto Command
Sempre que você cria uma aplicação n-camadas ou distribuída, torna-se muito importante que seu código consuma o mínimo de recursos do servidor. Para tanto, manter uma conexão ao servidor de banco de dados pode gerar sérios gargalos. Criar um Recordset desconectado de um Recordset padrão é simples. Contudo, você pode não saber como desconectar um Recordset que foi gerado de um objeto Command.
Para fazer isto, você cria o objeto Command e
configura suas propriedades do modo como normalmente faria, contudo, ao invés
de chamar o método Execute, você passa o objeto Command para o método Open do
Recordset no argumento Source. Então, você desconecta o Recordset normalmente
e destrói o objeto Command. O código a seguir demonstra isto.
Dim cmd As ADODB.Command
Dim rst As ADODB.Recordset
Dim param As ADODB.Parameter
Set cmd = CreateObject("ADODB.Command")
With cmd
.CommandText = "sp_myStoredProc"
.CommandType = adCmdStoredProc
.ActiveConnection = STR_CONN 'uma
string de conexão
Set param = .CreateParameter("Param1", _
adVarChar, adParamInput, 2, "foo")
.Parameters.Append param
End With
Set rst = CreateObject("ADODB.Recordset")
With rst
.CursorLocation = adUseClient
.Open cmd, CursorType:=adOpenStatic, _
Options:=adCmdStoredProc
Set .ActiveConnection = Nothing
End With
Set DataGrid1.DataSource = rst
Set cmd = Nothing
End Sub