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++
Crie uma classe derivada da classe CADORecordBinding.
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.
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. |