> ## ADO - ACTIVE DATA OBJECTS

> ##### Conteúdo

> - Um pouco de história.
> - ADO - Um pouco de teoria.
> - ADO - Exemplo prático.
> - Usando ADO

> ### Um pouco de história.

> No princípio era o texto e trabalhava-se com arquivos ASCII, depois surgiu a DAO (Data Access Object) , lançada em 1992 e usada apenas pelo MS Access 1.0; em 1993 a versão da DAO foi lançada para o MS Access 1.1 e Visual Basic 3.0. Em 1994 a versão 2.0 veio junto com o Access 2.0 , para quem usava o VB 3.0 havia a 'Compatibility Layer'. A versão 2.5 da DAO veio junto com o VB 4.0 e foi a última para o ambiente de 16 bits. Em 1995 a versão 3.0 contemplava o MS Acces 7.0 e Excel 7.0 e o VB 4.0 para ambiente de 32 bits. Nesta época foi lançado também o RDO versão 1.0 que permitia acesso via ODBC a base de dados usadas no ambiente cliente/Servidor de uma maneira mais simples e rápida pois implementa uma fina camada de código sobre o ODBC API. Em 1996 chegamos a versão 3.5 do Jet para MS Access 97 e MS Excel 97 (Windows 98) e o VB 5.0 e a versão 2.0 do RDO. Após o lançamento da versão 5.0 do Visual Basic a ADO ficou pronta , por isso não veio junta com o VB 5.0. O ADO seria então uma evolução ao RDO ? Ficaríamos tentados a supor , mas não, o ADO não é apenas mais um controle para conexão a banco de dados como a DAO ou o RDO , ele vai além disso, pois pode ser usado para acessar qualquer fonte de informações. Poderiamos dizer que o ADO é uma solução genérica proposta pela Microsoft para acesso uniforme a dados armazenados em diferentes fontes de informação: Web, Client/Servidor, Textos, ISAM(Access,Dbase),etc. Ele é baseado na OLE DB o qual é um conjunto de interfaces do tipo COM ( Component Object Model). O ADO é a interface entre a OLE DB e a sua aplicação. Com o uso de ADO, podemos criar aplicações para acessar e manipular dados em um servidor de banco de dados via um provedor OLE DB. Ele pode ser usado em qualquer ferramenta que o suporte tais como: Visual Basic, Access, ASP (Active Server Pages) , Excel, etc. Naturalmente o ADO possui características chaves para se desenvolver aplicações cliente/servidor e para a Internet e ao contrário da DAO ou RDO não possui uma rígida estrutura hierárquica de objetos, pois seus objetos podem ser criados independentemente uns dos outros,e, ao mesmo tempo este modelo de objetos é parecido com o modelo DAO e RDO , só que bem mais simples, de forma que se você esta familiarizado com DAO ou RDO os traumas não serão muitos. A vantagem do modelo ADO é , segundo a microsoft , a alta velocidade, a facilidade de uso e a baixa utilização de memória. Na minha humilde opinião isto pode ser verdade para aplicações Cliente/Servidor e Web , já para acesso a base de dados padrão ISAM ( Access, Dbase , FoxPro) tenho lá minhas dúvidas. Para usar ADO via ODBC você vai precisar de um DSN (Data Sorce Name) registrado. O ADO , através da tecnologia OLE DB, trabalha com provedores OLE DB, e o OLE DB é uma implementação COM para acesso de dados universal. Vislumbra-se a substituição gradual de ODBC pela tecnologia OLE DB, e a ADO atua como um envoltório ActiveX para OLE DB. Mais uma coisa: aprenda SQL.

> ### ADO - Um pouco de teoria.

> O modelo de objetos ADO - O modelo de objetos ADO é simples e parecido com o modelo DAO/RDO ,ele é composto de seis objetos primários mostrados na figura 1.0. Note que os objetos Errors, Parameters e Fields são partes de uma coleção.

> Fig. 1.0

> Vamos examinar mais de perto cada um deste objetos para tentar compreender o modelo de programação ADO. Tenha paciência pois seremos suscintos na descrição de cada item. Se quiser obter informações detalhadas sobre ADO visite o site da microsot - http://www.microsoft.com/ado.

> ### Objeto Connection

> É usado para criar uma conexão com um servidor de dados e pode ser criado independente de qualquer outro objeto, ele é análogo ao objeto Database do DAO e ao objeto rdoConnection do RDO. Ele representa uma única e específica sessão com uma fonte de dados. Como a ADO acessa dados e serviços de provedores OLE DB o objeto Connection é usado para especificar um provedor particular e os parâmetros necessários.

> O objeto Connection contém duas coleções:

> 1. Errors - contém os erros gerados durante uma conexão.
> 2. Properties - representa o conjunto de propriedades para uma conexão
> O objeto Connection contém os seguintes métodos.
> 1. BeginTrans - inicia uma transação, se a base de dados suportar o processsamento de transações.
> 2. Close - Encerra uma conexão.
> 3. commiTrans - Encerra uma transação.
> 4. Execute - executa um comando SQL.
> 5. Open - abre uma conexão para uma fonte de dados.
> 6. RollbackTrans - Cancela e desfaz uma transação.
> O objeto Connection contém as propriedades dadas a seguir:
> 1. Attributes - Lê os valores de XactAttributeEnum para uma conexão.
> 2. CommandTimeout - Determina o tempo de espera por um comando antes de gerar um erro.
> 3. ConnectionString - Contém a informação necessária para estabelecer uma conexão , tal como um nome DSN ou uma senha.
> 4. ConnectionTimeout - Determina o tempo de espera quando da tentativa de uma conexão antes de gerar um erro.
> 5. DefaultDatabase - Indica a base de dados padrão para uma conexão.
> 6. IsolationLevel - Lê ou determina o nível de isolação de uma transação.
> 7. Mode - indica as permissões disponíveis em uma conexão para modificar dados.
> 8. Provider - Indica o provedor OLE DB para uma conexão.
> 9. Version - Indica a versão do ADO.

> ### Objeto Error

> Um objeto Error é gerado sempre que um erro for encontrado em uma operação ADO. Ele contém os detalhes sobre os erros de acesso a uma fonte de dados relacionados a uma conexão com um provedor.Cada objeto Error representa um erro específico do provedor e não do ADO os quais são mostrados em tempo de execução.

> O objeto Error contém as propriedades:

> 1. Description - explica o erro detalhando-o.
> 2. HelpContext - retorna uma variável de contexto ID como um inteiro longo associado a um tópico do arquivo de HELP.
> 3. HelpFile - retorna o caminho do arquivo de HELP
> 4. NativeError - indica o código de erro específico do provedor para um objeto error.
> 5. Number - indica o número do erro.
> 6. Source - informa o nome do objeto que gerou o erro.
> 7. SQLstate - retorna uma string de cinco caracteres no padrão SQL ANSI.
> A coleção Errors possue um método:
> 1. Clear - remove todos os erros dos objetos Error na coleção.
> A coleção Errors tem duas propriedades:
> 1. Count - indica o número total dos objetos Error.
> 2. Item - retorna um objeto Error.

> ### Objeto Command

> O objeto Command contém a definição de um comando SQL ou de uma stored procedure ou de consultas ação que são executadas em uma fonte de dados. Ele é igual ao objeto QueryDef da DAO ou ao objeto rdoPreparedStatement do RDO. Pode ser usado para consultar um banco de dados e retornar registros em um objeto Recordset ou executar determinada operação.

> O objeto Command possui 5 propriedades:

> 1. ActiveConnection - indica o objeto Connection ao qual o objeto Command esta associado
> 2. CommandText - Contém o texto de um comando SQL
> 3. CommandTimeout - Determina o tempo de espera durante a tentativa de estabelecer uma conexão.
> 4. CommandType - Contém o tipo de Comando.(Stored Procedure, comando SQl, etc..)
> 5. Prepared - Indica se irá ou não salvar uma versão compilada do comando antes de sua execução.
> O objeto Command possui dois métodos:
> 1. CreateParameter - Cria um novo objeto Parametro
> 2. Execute - Executa o comando , consulta SQL ou stored procedure informada na propriedade CommandText
> O objeto Command possui duas coleções:
> 1. Parameters - A coleção dos objetos parametros do objeto Command.
> 2. Properties - O conjunto de propriedades para o objeto Command

> ### Objeto Parameter

> Um objeto Parameter representa um parâmetro ou argumento associado a um objeto Command baseado em uma consulta parametrizada ou uma stored procedure.

> O objeto Parameter possui oito propriedades:

> 1. Attributes - é a soma de um ou de mais de um dos valores de ParameterAttributesEnum
> 2. Direction - Indica se o parâmetro representa um parâmetro de entrada de saída, ambos ou o retorno de uma stored Procedure.
> 3. Name - O nome do parâmetro que pode ser usado como referência.
> 4. NumericScale - Determina ou retorna o número de casa decimais usadas
> 5. Precision - Determina ou retorna o número máximo de dígitos usados enm valores numéricos.
> 6. Size - Tamanho máximo em bytes ou caracteres
> 7. Type - O tipo de dados do objeto parameter
> 8. Value - O valor associado ao objeto parameter
> O objeto Parameter possui um método
> 1. AppendChunck - Usado para passar dados do tipo long binary ou long Character .
> A coleção Parameters possui três métodos:
> 1. Append - Anexa um objeto Parameter à coleção.
> 2. Delete - Remove o objeto Parameter da coleção.
> 3. Refresh - Atualiza o objeto Parameter da coleção.

> ### Objeto Property

> Representa um característica dinâmica de um objeto ADO definida pelo provedor. Os objetos ADO possui dois tipos de propriedades :
> 1. Internas - implementadas no ADO e imediatamente disponíveis para qualquer novo objeto. Elas não aparecem como objetos Property em uma coleção Properties.
> 2. Dinâmicas - definidas pelo provedor. Aparecem na coleção Properties do objeto ADO.
> O objeto Property possui 4 propriedades:
> 1. Attributes - indica as características da propriedade específica do provedor.
> 2. Name - o nome da propriedade
> 3. Type - o tipo de dados da propriedade
> 4. Value - as configurações da propriedade.

> ### Objeto Recordset

> Um objeto recordset representa um conjunto de registros de uma tabela gerados por uma consulta ou por um comando executado. Seu comportamento é idêntico ao recordset do DAO e ao rdoResultSet do RDO.

> Você pode usar o objeto recordset para manipular dados no provedor da mesma forma que o faz localmente , neste caso os recordsets são chamados de Cursores, e podem ser definidos como:

> 1. Dynamic Cursor - Permite a movimentação através do Recordset , ver adições, alterações e excluções feitas pelo usuário.
> 2. Keyset Cursor - Idêntico a Dynamic Cursor ; somente não permite acesso a registros adicionados ou excluídos por outro usuário.
> 3. Static Cursor - Gera uma cópia de um conjunto de registros , não permitindo acesso a adições, alterações e exclusões feitas por outros usuários.É o único cursor suportado localmente.(ADOR)
> 4. Forward-only Cursor - Idêntico ao Dynamic Cursor ; permitindo somente a movimentação para a frente.
> Você não precisa criar um objeto Connection para criar apenas um recordset, pode fazer isto através do método Open via connection string , desta forma a ADO cria um objeto connection sem associá-lo a uma variável objeto. Se desejar trabalhar com múltipos recordsets em uma mesma conexão então deverá criar e abrir um objeto connection.

> O objeto recordset possui duas coleções:

> 1. Fields - Contém todos os Objetos Fields do objeto Recordset
> 2. Properties - Contém todas os objetos Property para uma instância específica do objeto Recordset.
> O objeto recordset possue dezenove métodos:
> 1. Addnew - Cria um novo registro
> 2. CancelUpdate - Cancela atualizaçoes pendentes
> 3. Clone - Cria uma cópia de um objeto recordset
> 4. Close - Fecha um objeto recordset
> 5. Delete - Exclui o registro atual de um objeto recordse aberto.
> 6. GetRows - Retorna múltiplos registros de um recordset em um vetor.
> 7. Move - Muda a posição do registro atual.
> 8. MoveFirst - Muda a posição do registro para o primeiro registro do recordset e o torna o registro atual.
> 9. MoveLast - Muda a posição do registro para o último registro do recordset e o torna o registro atual.
> 10. MoveNext - Muda a posição do registro para o próximo registro.
> 11. MovePrevious - Muda a posiçãodo registro para o registro anterior.
> 12. MoveNextRecordset - Retorna o próximo objeto recordset.
> 13. Open - Abre um Cursor.
> 14. Requery - Atualiza os dados de um recordset executando novamente a consulta que o gerou.
> 15. Resync - Atualiza os dados de um objeto recordset.
> 16. Supports - Informa a funcionalidade que o objeto recordset suporta.
> 17. Update - Salva as alterações feitas no registro atual.
> 18. UpdateBatch - Escreve todas as atualizações pendentes em lote para o disco.
> O objeto Recordset contém dezessete propriedades:
> 1. AbsolutePage - Informa o número da 'página' de localização do registro atual.
> 2. AbsolutePosition - Determina a posição do registro atual.
> 3. ActiveConnection - Informa a qual conexão o objeto recordset pertence.
> 4. BOF - Informa que o registro atual está antes do primeiro registro.(Início do Arquivo)
> 5. Bookmark - Retorna o bookmark que identifica o registro atual ou atribui ao registro atual o bookmark de um outro registro do recordset.
> 6. CacheSize - Informa o número de registros do recordset que estão na memória.
> 7. CursorType - Informa o tipo de cursor usado em u recordset.
> 8. EditMode - Mostra o status da edição que esta sendo realizada no registro atual.
> 9. EOF - Informa que o registro atual está posicionado depois do último registro.(Fim de Arquivo)
> 10. Filter - Informa um filtro para os dados em um recordset.
> 11. LockType - Informa o tipo de bloqueio dos registros durante a edição.
> 12. MaxRecords - Informa o número máximo de registros que serão retornados de uma consulta.
> 13. PageCount - Informa o número de páginas de dados que um recordset contém.
> 14. PageSize - Mostra quantos registros constituem uma página no recordset.
> 15. RecordCount - Informa o número de registros em um recordset.
> 16. Source - Informa a fonte de dados em um objeto recordset ou o nome do objeto ou aplicação que gerou um erro.
> 17. Status - Informa o status do registro atual.

> ### Objeto Field e coleção Fields

> O objeto Field representa a coluna de dados com um tipo de dados comum. A coleção Fields contém todos os objetos Fields de um objeto Recordset.

> O objeto Field contém dois métodos:

> 1. AppendChunck - Anexa dados para um objeto Field binário ou Texto.
> 2. GetChunck - Retorna o contéudo de um objeto Field binário ou Texto.
> O objeto Field possui dez propriedades:
> 1. ActualSize - Informa o tamanho atual de um campo válido.
> 2. Attributes - Informa uma ou mais características do objeto Field.
> 3. DefinedSize - Informa o tamanho definido de um objeto Field.
> 4. Name - Informa o nome do objeto Field
> 5. NumericScale - Determina ou retorna o valor que indica o número de casas decimais para valores numéricos.
> 6. OriginalValue - Informa o valor do campo que existe em um registro antes da alteração.
> 7. Precision - Determina ou retorma o valor que indica o número máximo de dígitos usados para representar valores.
> 8. Type - Informa o tipo de dados de um objeto Field.
> 9. UnderlyingValue - Mostra o valor atual do objeto Field em um arquivo.
> 10. Value - Informa o valor de um objeto Field.
> Ufa ! pensei que não ia terminar , mas de qualquer forma aí esta um resumo de descrição do objeto ADO 2.0. A seguir veremos um exemplo de utilização efetiva da ADO. Até lá...

> Conteúdo

>     Continua...

>     Retorna