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