Objeto Recodset (ADO)

Objeto Recodset (ADO)


Objeto Recordset (ADO)
Muitos desenvolvedores encontram dificuldade em trabalhar com o ADO, por essa razão resolvi fazer um breve exemplo de uso de uma de suas ferramentas mais utilizadas - o Recordset. O Recordset é o Objeto mais utilizado por desenvolvedores que usam o ADO, e sempre existe a dúvida de como trabalhar corretamente com o Recordset, ou se está aproveitando o máximo seus recursos.
Quando trabalho com ASP, no desenvolvimento de páginas Web sempre faço chamada de dados usando o Recordset, e também em alguns casos quando trabalho com Delphi, como eu já disse anteriormenete, o ADO é uma ferramenta poderosa de acesso a dados e acredito que seja a mais fácil de trabalhar.

Bem, vamos ao que interessa!
 


Recordset

O objeto Recordset representa um conjunto de registros recuperados de um provedor de dados. Este objeto é indispensável para o processamento ADO, porque ele permite recuperar dados diretamente. O ADO permite que você abra um objeto Recordset diretamente, ou crie um através do Objeto Command ou Connection.


O Objeto Recordset possui três propriedades principais para manipulação, onde surge a maioria das dúvidas dos desenvolvedores. Tentarei explicá-las de maneira objetiva. 

  •  CursorLocation
Podem ser duas opções: 
adUseServer e adUseClient.
De maneira geral um cursor é um conjunto de registros em memória, e claro algum software é responsável por manter o controle desse conjunto. O adUseServer, cursores estação servidor são mantidos pela fonte de dados atual, ou seja, de onde os registros foram recuperados. Já o adUseClient, cursores estação cliente, são mantidos pelo Microsoft OLE DB, que por sua vez tenta nivelar o meio de campo fornecendo recursos e capacidades que estão "faltando" em alguns servidores. Exemplo:


Dim tbExemplo
Set tbExemplo = Server.CreateObject("ADODB.RecordSet")
tbExemplo.CursorLocation = 2'(adUseServer) modo servidor
 ou
tbExemplo.CursorLocation = 3'(adUseClient) modo Cliente. (*) mais rápido

Obs.: Se nenhum CursorLocation for especificado o ADO assume o adUseServer como padrão. E alguns recursos estão disponíveis apenas na estação cliente.

  •  CursorType
Podem ser quatro opções: adOpenDinamyc, adOpenKey, adOpenStatic eadOpenFowardOnly.
O CursorType especifica o comportamento do Objeto recordset. Acompanhe:

adOpenDinamyc - Você abre o Recordset de maneira dinâmica, e permite todos os movimentos como MoveNext, MoveFirst, AddNew, etc... E ainda mantêm o Recordset atualizado com as mudanças feitas por outros usuários na base de dados.

adOpenKey - Recordset de chave configurável (keyset), funciona como o Recordset dinâmico, exceto pelo fato de você não ver novos registros adicionados ou apagados da base de dados. Ideal para operações com dados, inclusive quando precisa se movimentar pela tabela aleatoriamente.

adOpenStatic - Ideal para relatórios onde as informações não precisam estar completamente atualizadas, pois depois de aberto fica completamente desconectado da base de dados enquanto você se movimenta pelos registros. Abre o recordset de maneira estática.

adOpenFowardOnly - Idêntico ao estático, exceto pelo fato de você só poder mover o ponteiro da tabela para frente. Este oferece a mais rápida performance. É mais flexível do que suponhamos, pois do método MoveNext, você pode usar o Move, para pular registros que intervenham, desde que esteja movendo para frente. Este método é o mais usado em casos como abrir uma tabela de cidades para poder mostrar um ComboBox apenas para cidades de determinado estado, é muito rápido. Tome muito cuidado com este método, mesmo que você precise usar o comando MoveFirst ele obedecerá normalmente, porém ele força o provedor abrir e fechar o Recordset para atingir o primeiro registro, fazendo com que sua aplicação se torne lenta.

Em geral se você um tipo de cursor que tenha apenas a habilidade que você precisa em sua aplicação, você ganha melhor performance.

tbExemplo.CursorType = 0 '(adOpenFowardOnly), mais rápido 
tbExemplo.CursorType = 1 '(adOpenStatic)
tbExemplo.CursorType = 2 '(adOpenDinamic)
tbExemplo.CursorType = 3 '(adOpenKey)

Obs.: Fique atento, se você não especificar o tipo de cursor o adForwardOnly como padrão.


•  LockType

adLockReadOnly - Usado para recordsets que não precisam ser editados. Alta performance.

adLockPerssimistc - Para bloqueios pessimistas, onde os registros são mantidos bloqueados durante todo o processo de edição.

adLockOptimistic - Para bloqueios otimistas, onde os registros são mantidos bloqueados apenas enquando o dado está sendo atualizado.

adBatchOptimistic - Para recordsets que usarão o método UpdateBatch para atualizar múltiplos registros numa única operação.

tbExemplo.LockType = 1'(adLockReadOnly), mais rápido, somente leitura 
tbExemplo.LockType = 2'(adLockPessimistc) bloqueia regsitro na fonte 
tbExemplo.LockType = 3'(adLockOptimistic) bloqueia somente na chamada
tbExemplo.LockType = 4'(adLockBatchOptimistic)

Obs.: Se você não especificar o tipó de bloqueio o ADO usará o adReadOnly como padrão (somente leitura).

O Recordset padrão do ADO é Estação Servidor, Forward-only, e Read-only. Se você deseja mover-se pelos registros aleatoriamente, ou alterar registros, é necessário preencher as propriedades corretas.

Citarei um exemplo para abrir uma tabela (Recordset) em alta performance em MySQL:

Dim Objdb, db_host, db_name, db_username, db_password 
db_host = "mysql.server_exemplo.com"
db_name = "banco_de_dados"
db_username = "nome_usuario"
db_password = "senha_usuario"

Set Objdb = Server.CreateObject("ADODB.Connection")
Objdb.Provider = "MSDASQL.1"
Objdb.Open
"Driver={MySQL ODBC 3.51 Driver};"& _ 
  "Server="&db_host&";"& _
  "Port=3306;Database="&db_name&";"& _
  "User="&db_username&";Password="&db_password&";Option=3;"

Dim tbExemplo, strExemplo
Set tbExemplo = Server.CreateObject("ADODB.RecordSet")
tbExemplo.CursorLocation = 3' modo Cliente.

tbExemplo.CursorType = 0' apenas para frente

tbExemplo.LockType = 1' somente leitura
strExemplo = "SELECT * FROM `tabela`;"
tbExemplo.Open strExemplo, ObjDB

Nenhum comentário:

Postar um comentário