# ActiveX Data Objects

O ADO (ActiveX Data Objects) é um mecanismo Component Object Model criado pela Microsoft onde os programas o utilizam para a troca de informações com as bases de dados.
Microsoft's ActiveX Data Objects (ADO) é um conjunto de Component Object Model (COM) objects para acessar base de dados. Parte de MDAC, fornece uma camada intermediária (middleware) entre a linguagem de programação e OLE DB (um meio de acessar dados, sejam eles databases ou uniforme).
O ADO permite que um desenvolvedor escreva programas que acessem dados sem saber como o banco de dados é implementado. Ele deve estar ciente do banco de dados apenas para conexão. Não é necessário conhecimento de SQL para acessar um banco de dados ao usar o ADO, embora se possa usar o ADO para executar comandos SQL diretamente. A desvantagem do último é que ele introduz uma dependência sobre o tipo de banco de dados utilizado.
O ADO está posicionado como um sucessor das camadas de objetos anteriores da Microsoft para acessar fontes de dados, incluindo RDO (Remote Data Objects) e DAO (Data Access Objects). O ADO foi introduzido pela Microsoft em outubro de 1996.

## Internals

O ADO é composto por quatro coleções e doze objetos.

## ADO coleções
### Campos

    Esta coleção contém um conjunto de objetos Field. A coleção pode ser usada em um objeto Recordset ou em um objeto Record. Em um objeto Recordset, cada um dos objetos Field que compõem a coleção Fields corresponde a uma coluna nesse objeto de conjunto de registros. Em um objeto Record, um campo pode ser um URL absoluto ou relativo que aponta para um namespace estruturado em árvore [usado para provedores dados semi-estruturados como o Microsoft OLE DB Provider para publicação na Internet) ou como uma referência ao objeto de fluxo padrão associado a esse objeto de registro.

### Propriedades

    Um objeto pode ter mais de um objeto de propriedade, que estão contidos na coleção de propriedades do objeto.

### Parâmetros

    Um objeto de comando pode ter vários comandos de parâmetros para alterar seu comportamento predefinido e cada um dos objetos de parâmetro está contido na coleção Parâmetros do objeto Command

### Erros

    Todos os erros criados pelo provedor são passados para uma coleção de objetos de erro, enquanto a coleção de erros está contida em um objeto Conexão. Quando uma operação ADO cria um erro, a coleção é desmarcada e um novo grupo de objetos de erro é criado na coleção.

## ADO objects
### Conexão

    O objeto de conexão é a conexão do ADO com um armazenamento de dados via OLE DB. O objeto de conexão armazena informações sobre a sessão e fornece métodos de conexão ao armazenamento de dados. Como algumas lojas de dados possuem métodos diferentes para estabelecer uma conexão, alguns métodos podem não ser suportados no objeto de conexão para provedores OLE DB particulares. Um objeto de conexão se conecta ao armazenamento de dados usando o método 'Abrir' com uma seqüência de conexão que especifica a conexão como uma lista de pares de valores-chave (por exemplo: "Provider = 'SQLOLEDB'; Data Source = 'TheSqlServer'; Initial Catalog = 'Northwind'; Integrated Security = 'SSPI'; "). O início do qual deve identificar o tipo de conexão de armazenamento de dados que o objeto de conexão requer:
    * um provedor OLE DB (por exemplo, SQLOLEDB), usando a sintaxe "provider =";
    * um nome de arquivo, usando a sintaxe "file name =";
    * um provedor remoto e servidor (veja RDS), usando a sintaxe "Remote provider =" e "Remote server ="; ou
    * um URL absoluto, usando a sintaxe "URL ="

### Comando

    Depois que o objeto de conexão estabelece uma sessão para a fonte de dados, as instruções são enviadas ao provedor de dados através do objeto de comando. O objeto de comando pode enviar consultas SQL diretamente ao provedor através do uso da propriedade CommandText, enviar uma consulta parametrizada ou procedimento armazenado através do uso de um objeto de Parâmetro ou coleção de Parâmetros ou executar uma consulta e retornar os resultados para um objeto de conjunto de dados através do Método de Execução. Existem vários outros métodos que podem ser usados no objeto Command relacionado a outros objetos, como os objetos Stream, RecordSet ou Connection.

### Conjunto de registros

    Um conjunto de registros é um grupo de registros e pode ser proveniente de uma tabela base ou como resultado de uma consulta na tabela. O objeto RecordSet contém uma coleção de campos e uma coleção de propriedades. A coleção Fields é um conjunto de objetos Field, que são as colunas correspondentes na tabela. A coleção de propriedades é um conjunto de objetos de propriedade, que define uma determinada funcionalidade de um provedor OLE DB. O RecordSet possui inúmeros métodos e propriedades para examinar os dados que existem dentro dele. Os registros podem ser atualizados no conjunto de registros alterando os valores na gravação e, em seguida, chamando o método Update ou UpdateBatch.

### Imediato

    O conjunto de registros é bloqueado usando o bloqueio adLockOptimistic ou adLockPessimistic. Os dados são atualizados na fonte de dados depois que a gravação é alterada e o método Update é chamado.

### Lote

    O conjunto de registros está bloqueado usando adLockBatchOptimistic e cada vez que a Atualização é chamada, os dados são atualizados em um buffer temporário. Finalmente, quando o UpdateBatch é chamado, os dados são atualizados completamente na fonte de dados. Isso tem a vantagem de tudo estar sendo feito na memória, e se ocorrer um problema, UpdateCancel é chamado e as atualizações não são enviadas para a fonte de dados

### Transação

    Se o provedor OLE DB o permitir, as transações podem ser usadas. Para iniciar a transação, o programador invoca o método BeginTrans e faz as atualizações necessárias. Quando tudo estiver pronto, o programador invoca o método CommitTrans. RollbackTrans pode ser invocado para cancelar quaisquer alterações feitas dentro da transação e reverter o banco de dados para o estado antes da transação ter começado

### Registro

    Este objeto representa um registro no banco de dados e contém uma coleção de campos. Um RecordSet consiste em uma coleção de objetos Record.

### Corrente

    Um fluxo, usado principalmente em um objeto RecordSet, é um meio de ler e escrever um fluxo de bytes. É usado principalmente para salvar um conjunto de registros em um formato XML, para enviar comandos para um provedor OLE DB como uma alternativa ao objeto CommandText e para conter o conteúdo de um arquivo binário ou de texto.

### Parâmetro

    Um parâmetro é um meio de alterar o comportamento de uma funcionalidade comum, por exemplo, um procedimento armazenado pode ter parâmetros diferentes passados para ele, dependendo do que precisa ser feito; estes são chamados de comandos parametrizados.

### Campo

    Cada objeto Record contém muitos campos, e um objeto RecordSet também possui um objeto Field correspondente. O objeto de campo do objeto RecordSet corresponde a uma coluna na tabela de banco de dados que ele faz referência.

### Propriedade

    Este objeto é específico para o provedor OLE DB e define uma habilidade que o provedor implementou. Um objeto de propriedade pode ser uma propriedade incorporada - é uma propriedade bem definida implementada pelo ADO já e, portanto, não pode ser alterada - ou pode ser uma propriedade dinâmica - definida pelo provedor de dados subjacente e pode ser alterada

### Erro

    Quando um erro do provedor OLE DB ocorre durante o uso do ADO, um objeto de erro será criado na coleção Erros. Outros erros não entram em um objeto de erro, no entanto. Por exemplo, todos os erros que ocorrem ao manipular dados em um objeto RecordSet ou Field são armazenados em uma propriedade Status.

## Uso básico

São necessárias algumas etapas básicas para poder acessar e manipular dados usando o ADO:
* Crie um objeto de conexão para se conectar ao banco de dados.
* Crie um objeto de conjunto de registros para receber dados em.
* Abra a conexão
* Popule o conjunto de registros abrindo-o e passando o nome da tabela desejada ou a instrução SQL como um parâmetro para a função abrir .
* Do toda a busca / processamento desejado nos dados obtidos.
* Conheça as alterações feitas nos dados (se houver) usando os métodos Atualizar ou UpdateBatch .
* Fechar o conjunto de registros
* Feche a conexão

### exemplo ASP

Aqui está um exemplo ASP usando ADO para selecionar o campo "Nome", a partir de uma tabela chamada "Agenda", onde um "Número de Telefone" era igual a "555-5555".
This is equivalent to the following ASP code, which uses plain SQL instead of the functionality of the Recordset object:

## Software support

ADO is supported in ASP, Delphi, PowerBuilder, and in Visual Basic for Applications (VBA).