Etensões do Visual C++

A interface IADORecordBinding

As extensões Microsoft Visual C++ para ADO associa campos de um objeto Recordset a variáveis C/C++. Sempre que a linha atual do conjunto de registros associado for alterada, todos os campos associados no Conjunto de registros serão copiados para as variáveis C/C++. 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 associa campos a variáveis C/C++. O método AddNew adiciona uma nova linha ao Conjunto de registros associado. O método Update preenche campos em novas linhas do Conjunto de registros ou atualiza campos em linhas existentes, com o valor das variáveis C/C++.

A interface IADORecordBinding é implementada pelo objeto Recordset. Você não codifica a implementação por conta própria.

Entradas de associação

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

O ADO mapeia internamente os parâmetros nessas macros para uma estrutura DBBINDING do OLE DB e cria um objeto OLE DB Accessor para gerenciar a movimentação e a conversão de dados entre campos e variáveis. O OLE DB define dados como consistindo em três partes: um buffer em que os dados são armazenados; um status que indica se um campo foi armazenado com êxito no buffer ou como a variável deve ser restaurada no campo; e o comprimento dos dados. (Consulte Obter e definir dados (OLE DB) na referência do programador OLE DB para obter mais informações.)

Arquivos de cabeçalho

Inclua o seguinte arquivo em seu aplicativo para usar as Extensões do Visual C++ para ADO:

#include <icrsint.h>

Campos de conjunto de registros de associação

Para associar campos de conjunto de registros a variáveis C/C++

  1. Crie uma classe derivada da classe CADORecordBinding.

  2. Especifique as entradas de associação e as variáveis C/C++ correspondentes na classe derivada. Colchete as entradas de associação entre macros BEGIN_ADO_BINDING e END_ADO_BINDING. Não termine as macros com vírgulas ou ponto e vírgula. Delimitadores apropriados são especificados automaticamente por cada macro.

    Especifique uma entrada de associaçã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. Em seu aplicativo, crie uma instância da classe derivada de CADORecordBinding. Obtenha a interface IADORecordBinding de Conjunto de registros. Em seguida, chame o método BindToRecordset para associar os campos do Conjunto de registros às variáveis C/C++.

Para obter mais informações, consulte o Exemplo de Extensões do Visual C++.

Métodos de interface

A interface IADORecordBinding tem três métodos: BindToRecordset, AddNew e Update. O único argumento para 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 dos parâmetros de seus nomes de método ADO.

Syntax

O método BindToRecordset associa os campos de Conjunto de registros a variáveis C/C++.

BindToRecordset(CADORecordBinding *binding)

O método AddNew invoca seu xará, o método ADO AddNew, para adicionar uma nova linha ao Conjunto de registros.

AddNew(CADORecordBinding *binding)

O método Update invoca seu homônimo, o método ADO Update, para atualizar o Conjunto de registros.

Update(CADORecordBinding *binding)

Macros de entrada de associação

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

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 tem diferentes conjuntos de parâmetros para que você possa excluir informações de associação que não são de interesse.

Para obter mais informações, consulte Apêndice A: Tipos de dados, da Referência do Programador OLE DB.

Iniciar entradas de associação

BEGIN_ADO_BINDING(Class)

Dados de comprimento fixo

ADO_FIXED_LENGTH_ENTRY(Ordinal, DataType, Buffer, Status, Modify)

ADO_FIXED_LENGTH_ENTRY2(Ordinal, DataType, Buffer, Modify)

Dados numéricos

ADO_NUMERIC_ENTRY(Ordinal, DataType, Buffer, Precision, Scale, Status, Modify)

ADO_NUMERIC_ENTRY2(Ordinal, DataType, Buffer, Precision, Scale, Modify)

Dados de comprimento variável

ADO_VARIABLE_LENGTH_ENTRY(Ordinal, DataType, Buffer, Size, Status, Length, Modify)

ADO_VARIABLE_LENGTH_ENTRY2(Ordinal, DataType, Buffer, Size, Status, Modify)

ADO_VARIABLE_LENGTH_ENTRY3(Ordinal, DataType, Buffer, Size, Length, Modify)

ADO_VARIABLE_LENGTH_ENTRY4(Ordinal, DataType, Buffer, Size, Modify)

Encerrar entradas de associação

END_ADO_BINDING()

Parâmetro Descrição
Classe Classe na qual as entradas de associação e variáveis C/C++ são definidas.
Ordinal Número ordinal, contando de um, do campo Conjunto de registros correspondente à 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). O valor do campo Conjunto de registros será convertido para esse tipo de dados, se necessário.
Buffer Nome da variável C/C++ em que o campo Conjunto de registros será armazenado.
Tamanho Tamanho máximo em bytes do Buffer. Se o Buffer contiver uma cadeia de caracteres de comprimento variável, permita espaço para um zero de terminação.
Status Nome de uma variável que indicará se o conteúdo do Buffer é válido e se a conversão do campo para DataType foi bem-sucedida.

Os dois valores mais importantes para essa variável são adFldOK, o que significa que a conversão foi bem-sucedida; e adFldNull, o que significa que o valor do campo seria uma VARIANT do tipo VT_NULL e não apenas vazio.

Os valores possíveis para Status são listados na próxima tabela, "Valores de Status".
Modificar Sinalizador booliano; se TRUE, indica que o ADO tem permissão para atualizar o campo Conjunto de registros correspondente com o valor contido no Buffer.

Defina o parâmetro de modificação booliano como TRUE para permitir que o ADO atualize o campo associado e FALSE se você quiser examinar o campo, mas não 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.
Comprimento Nome de uma variável de quatro bytes que conterá o comprimento real dos dados no Buffer.

Valores de status

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

Ao definir dados, Status pode ser definido como adFldNull para indicar que o campo Conjunto de registros deve ser definido como nulo.

Constante Valor Descrição
adFldOK 0 Um valor de campo não nulo foi retornado.
adFldBadAccessor 1 A associação era inválida.
adFldCantConvertValue 2 O valor não pôde ser convertido por outros motivos que não a incompatibilidade de sinais ou o estouro de dados.
adFldNull 3 Ao obter um campo, indica que um valor nulo foi retornado.

Ao definir um campo, indica que o campo deve ser definido como NULL quando o campo não puder codificar NULL em si (por exemplo, uma matriz de caracteres ou um inteiro).
adFldTruncated 4 Dados de comprimento variável ou dígitos numéricos foram truncados.
adFldSignMismatch 5 O valor é assinado e o tipo de dados variável não é assinado.
adFldDataOverFlow 6 O valor é maior do que poderia ser armazenado no tipo de dados variável.
adFldCantCreate 7 O tipo de coluna e o campo desconhecidos já estão abertos.
adFldUnavailable 8 O valor do campo não pôde ser determinado, por exemplo, em um novo campo não atribuído sem valor padrão.
adFldPermissionDenied 9 Ao atualizar, não há permissão para gravar dados.
adFldIntegrityViolation 10 Ao atualizar, o valor do campo violaria a integridade da coluna.
adFldSchemaViolation 11 Ao atualizar, o valor do campo violaria o esquema da coluna.
adFldBadStatus 12 Ao atualizar, parâmetro de status inválido.
adFldDefault 13 Ao atualizar, um valor padrão foi usado.

Consulte Também

Exemplo de extensões do Visual C++Cabeçalho de Extensões do Visual C++