ADO - Otimizando a sua conexão nos detalhes


Você costuma ler o Help do VB ? É uma boa prática ... Na verdade este hábito poderá lhe poupar de muitas dores de cabeça... Quer ver só ???

Você sabe o que faz e como funciona a instrução SET ? Não sabe ?? Então vamos ao HELP do VB...

SET - Atribui uma referência de um objeto a uma variável ou propriedade.

Sintaxe : Set objectvar = {[New] objectexpression | Nothing}

Onde temos:

Parte Descrição
objectvar O nome da variável ou propriedade. É obrigatório.
New É usado na declaração para permitir a crição implícita do objeto. Quando usada com a instrução SET cria uma nova instância de classe.

Se objectvar contiver uma referência a um objeto , esta referência é liberada quando um novo New é atribuido.

A palavra chave New não pode ser usada para criar um nova instância de qualquer tipo de dado intrínsico e não pode ser usado para criar objetos dependentes. É opcional.

objectexpression É o nome de um objeto , outra variável declarada do mesmo tipo do objeto ou uma função ou método que retorna um objeto do mesmo tipo. É obrigatório.
Nothing Descontinua a associação de objectvar com qualquer objeto específico e libera os recursos do sistema e da memória associados com a prévia referência do objeto quando nenhuma outra variável fizer referência ao mesmo.

Quando você usa a instrução SET para atribuir uma referência de um objeto a uma variável , uma referência ao objeto é criada. NÃO é criada uma cópia do objeto para a variável.

Você pode ter mais de uma variável objeto referenciando o mesmo objeto , então , como tais variáveis são referências para o objeto e não cópias do objeto , qualquer alteração no objeto é refletida em todas as variáveis que estiverem referenciando o objeto. Ao usar a palavra chave NEW estamos criando uma nova instância do objeto.

Onde eu estou querendo chegar ??? Calma , eu chego lá... Agora observe o código abaixo :

Dim conexao, rst

Set conexao = CreateObject("ADODB.Connection")
Set rst = CreateObject("ADODB.RecordSet")
conexao.Open "Provider = Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\Northwind.mdb"
rst.ActiveConnection = conexao 
rst.Open "select * from Produtos"

Tudo certo ? Bem , aparentemente tudo certo. O código vai funcionar , mas... Preste Atenção !!!

Você tem DUAS conexões abertas !!! : uma na variável conexao e outra na variável rst.

POR QUÊ ????

Porque você NÃO usou a instrução SET para atribuir uma referência do objeto conexao para a propriedade ActiveConnection da variável rst.

No código acima você esta atribuindo o VALOR da propriedade padrão do objeto conexao e não a referência do objeto. Como a propriedade padrão do objeto conexao é a string de conexao - ConnectionString - estamos abrindo uma nova conexão via variável rst.

Tudo isto vale tanto para o objeto Recordset como para o objeto Command.

Para encerrar o assunto por aqui chegamos a seguinte conclusão :

Use sempre a instrução SET na atribuição do objeto de conexão para a propriedade ActiveConnection e assim você estará otimizando a sua conexão e os recursos do sistema. Corrigindo o código acima teremos:

Dim conexao, rst

Set conexao = CreateObject("ADODB.Connection")
Set rst = CreateObject("ADODB.RecordSet")
conexao.Open "Provider = Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\Northwind.mdb"
Set rst.ActiveConnection = conexao 
rst.Open "select * from Produtos"

Agora sim... O sistema agradece...

Até a próxima...


José Carlos Macoratti