Compartilhar via


Uso de Extensões do Visual C++

Aplica-se ao: Access 2013, Office 2013

A interface IADORecordBinding

As extensões do Microsoft Visual C++ para ADO associam, ou acoplam, os campos de um objeto Recordset às variáveis C/C++. Sempre que a linha atual do Recordset acoplado é alterada, todos os campos acoplados no Recordset são copiados para essas variáveis. Se necessário, os dados copiados são convertidos no tipo de dados declarado da variável C/C++.

O método BindToRecordset da interface IADORecordBinding acopla campos às variáveis C/C++. O método AddNew adiciona uma nova linha ao Recordset acoplado. O método Update preenche os campos nas novas linhas de Recordset ou atualiza os campos nas linhas existentes, com o valor das variáveis C/C++.

A interface IADORecordBinding é implementada pelo objeto Recordset. Não é possível codificar a implementação sozinho.

Entradas de ligação

As extensões do Visual C++ para ADO mapeiam os campos de um objeto Recordset para as variáveis C/C++. A definição de um mapeamento entre um campo e uma variável é chamada entrada de ligação. As macros fornecem entradas de ligação para dados numéricos de tamanhos fixo e variável. As entradas de ligação e as variáveis C/C++ são declaradas em uma classe derivada da classe CADORecordBinding de extensões do Visual C++. A classe CADORecordBinding é definida internamente pelas macros de entrada de ligação.

O ADO mapeia internamente os parâmetros nessas macros para uma estrutura DBBINDING do OLE DB e cria um objeto Accessor do OLE DB para gerenciar o movimento e a conversão de dados entre campos e variáveis. O OLE DB define os dados em três partes: um buffer para repositório dos dados; um status que indica se um campo foi armazenado com êxito no buffer, ou como a variável deve ser restaurada para o campo; e o comprimento dos dados. (Para obter mais informações, consulte OLE DB Programmer's Reference, capítulo 6: Getting and Setting Data [em inglês].)

Arquivo de cabeçalho

Inclua o arquivo a seguir em seu aplicativo para usar as extensões do Visual C++ para ADO:

 
#include <icrsint.h> 

Acoplando campos de Recordset

Para acoplar campos de Recordset às variáveis C/C++

  1. Crie uma classe derivada da classe CADORecordBinding.

  2. Especifique as entradas de ligação e as variáveis C/C++ correspondentes na classe derivada. Delimite por colchetes as entradas de ligação entre as macros BEGIN_ADO_BINDING e END_ADO_BINDING. Não termine as macros com vírgula ou ponto-e-vírgula. Delimitadores apropriados são especificados automaticamente por cada macro. Especifique uma entrada de ligação para cada campo a ser mapeado para uma variável C/C++. Use um membro apropriado da família de macros ADO_FIXED_LENGTH_ENTRY, ADO_NUMERIC_ENTRY ou ADO_VARIABLE_LENGTH_ENTRY.

  3. No seu aplicativo, crie uma instância da classe derivada de CADORecordBinding. Obtenha a interface IADORecordBinding de Recordset. Em seguida, chame o método BindToRecordset para acoplar os campos Recordset às variáveis C/C++.

Consulte o Exemplo de extensões do Visual C++ para obter mais informações.

Métodos de interface

A interface IADORecordBinding possui três métodos: BindToRecordset, AddNew e Update. O único argumento de cada método é um ponteiro para uma instância da classe derivada de CADORecordBinding. Portanto, os métodos AddNew e Update não podem especificar nenhum parâmetro de seus homônimos de método ADO.

Sintaxe

O método BindToRecordset associa os campos Recordset às variáveis C/C++.

BindToRecordset(CADORecordBinding *binding)

O método AddNew chama seu homônimo, o método ADO AddNew, para adicionar uma nova linha a Recordset.

AddNew(CADORecordBinding *binding)

O método Update chama seu homônimo, o método ADO Update, para atualizar o Recordset.

Update(CADORecordBinding *binding)

Macros de entrada de ligação

As macros de entrada de ligação definem a associação de um campo Recordset e uma variável. Uma macro inicial e uma macro final delimitam o conjunto de entradas de ligação.

As famílias de macros são fornecidas para dados de comprimento fixo, como adDate ou adBoolean; dados numéricos, como adTinyInt, adInteger ou adDouble; e dados de comprimento variável, como adChar, adVarChar ou adVarBinary. Todos os tipos numéricos, exceto adVarNumeric, também são tipos de comprimento fixo. Cada família possui conjuntos de parâmetros diferentes, o que permite excluir as informações de ligação que não sejam de seu interesse.

Para obter informações adicionais, consulte a Referência do programador do OLE DB, apêndice A: Tipos de dados.

Início das entradas de ligação

BEGIN_ADO_BINDING(Classe)

Dados de comprimento fixo

ADO_FIXED_LENGTH_ENTRY(Ordinal, DataType, Buffer, Status, Modifi)
ADO_FIXED_LENGTH_ENTRY2(Ordinal, DataType, Buffer, Modifi)

Dados numéricos

ADO_NUMERIC_ENTRY(Ordinal, DataType, Buffer, Precision, Scale, Status, Modifi)
ADO_NUMERIC_ENTRY2(Ordinal, DataType, Buffer, Precision, Scale, Modifi)

Dados de comprimento variável

ADO_VARIABLE_LENGTH_ENTRY(Ordinal, DataType, Buffer, Tamanho, Status, Comprimento, Modificação)
ADO_VARIABLE_LENGTH_ENTRY2(Ordinal, DataType, Buffer, Tamanho, Status, Modificar)
ADO_VARIABLE_LENGTH_ENTRY3(Ordinal, DataType, Buffer, Tamanho, Comprimento, Modificação)
ADO_VARIABLE_LENGTH_ENTRY4(Ordinal, DataType, Buffer, Size, Modifi)

Final das entradas de ligação

END_ADO_BINDING()

Parâmetro

Descrição

Classe

Classe na qual são definidas as entradas de ligação e as variáveis C/C++.

Ordinal

Número ordinal, contado a partir de um, do campo Recordset correspondente a sua variável C/C++.

DataType

Tipo de dados ADO equivalente da variável C/C++ (consulte DataTypeEnum para obter uma lista de tipos de dados válidos). Se necessário, o valor do campo Recordset será convertido nesse tipo de dados.

Buffer

Nome da variável C/C++ de repositório do campo Recordset.

Tamanho

Tamanho máximo, em bytes, de Buffer. Se Buffer contiver uma sequência de caracteres de comprimento variável, deixe espaço para um zero de terminação.

Status

Nome de uma variável que indicará se o conteúdo de Buffer é válido e se a conversão do campo em DataType foi bem-sucedida. Os dois valores mais importantes dessa variável são adFldOK, indicando que a conversão foi bem-sucedida; e adFldNull, indicando que o valor do campo será um VARIANT de tipo VT_NULL, e não simplesmente vazio. Os valores possíveis para Status estão listados na próxima tabela, "Valores de status".

Modificar

Sinalizador booleano; se for TRUE, indicará que o ADO tem permissão para atualizar o campo Recordset correspondente com o valor contido em Buffer. Defina o parâmetro booleano modify como TRUE para permitir que o ADO atualize o campo acoplado e como FALSE se desejar examinar o campo, mas sem alterá-lo.

Precisão

Número de dígitos que podem ser representados em uma variável numérica.

Escala

Número de casas decimais em uma variável numérica.

Length

Nome de uma variável de quatro bytes que conterá o comprimento real dos dados em Buffer.

Valores de status

O valor da variável Status indica se um campo foi copiado com êxito para uma variável.

Ao configurar os dados, defina Status como adFldNull para indicar que o campo Recordset seja definido como nulo.

Constant

Valor

Descrição

adFldOK

0

Um valor de campo não-nulo foi retornado.

adFldBadAccessor

1

A ligação era inválida.

adFldCantConvertValue

2

O valor não pôde ser convertido devido a razões diferentes de incompatibilidade de sinal ou estouro de dados.

adFldNull

3

Quando um campo é obtido, indica que um valor nulo foi retornado. Na configuração de um campo, indica que o campo deve ser definido como NULL quando ele não puder codificar o próprio NULL (por exemplo, uma matriz de caracteres ou um número inteiro).

adFldTruncated

4

Os dados de comprimento variável ou os dígitos numéricos foram truncados.

adFldSignMismatch

5

O valor tem sinal e o tipo de dados variáveis não.

adFldDataOverFlow

6

O valor é maior do que pôde ser armazenado no tipo de dados variáveis.

adFldCantCreate

7

Tipo de coluna desconhecida e campo já aberto.

adFldUn disponível

8

Não foi possível determinar o valor de campo — por exemplo, em um novo campo sem alocação sem nenhum valor padrão.

adFldPermissionDenied

9

Durante uma atualização, não houve permissão para gravar dados.

adFldIntegrityViolation

10

Durante uma atualização, o valor de campo violaria a integridade da coluna.

adFldSchemaViolation

11

Durante uma atualização, o valor de campo violaria o esquema de coluna.

adFldBadStatus

12

Durante uma atualização, um parâmetro de status inválido foi retornado.

adFldDefault

13

Durante uma atualização, um valor padrão foi utilizado.