Extensões do Visual C++
Interface IADORecordBinding
As Extensões do Microsoft Visual C++ para ADO associam ou vinculam campos de um objeto Recordset a variáveis C/C++. Sempre que a linha atual do conjunto de registros associado é alterada, todos os campos associados no conjunto de registros sã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 Recordset associado. O método Update preenche campos em novas linhas do Recordset ou atualiza campos em linhas existentes, com o valor das variáveis C/C++.
A interface IADORecordBinding é implementada pelo objeto Recordset. Você não desenvolve a implementação sozinho.
Entradas de associação
As Extensões do Visual C++ para o ADO mapeiam campos 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 as 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 de do OLE DB DBBINDING e cria um objeto acessador de OLE DB para gerenciar a movimentação e a conversão de dados entre campos e variáveis. O OLE DB define dados como compostos por três partes: um buffer de 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 para o campo; e o comprimento dos dados. (Consulte Obtenção e Configuração de Dados (OLE DB)na Referência do Programador OLE DB, para obter mais informações.)
Arquivo 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 vinculação de conjunto de registros
Para associar campos de Recordset a variáveis C/C++
Crie uma classe derivada da classe CADORecordBinding.
Especifique as entradas de associação e as variáveis C/C++ correspondentes na classe derivada. Coloque as entradas de associação entre colchetes entre os macros BEGIN_ADO_BINDING e END_ADO_BINDING. Não encerre 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 do ADO_FIXED_LENGTH_ENTRY, ADO_NUMERIC_ENTRYou ADO_VARIABLE_LENGTH_ENTRY família de macros.
Em seu aplicativo, crie uma instância da classe derivada de CADORecordBinding. Obtenha a interface IADORecordBinding do Recordset. Em seguida, chame o método BindToRecordset para associar os campos Recordset às variáveis C/C++.
Para 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, AddNewe 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 dos respectivos nomes de método ADO.
Sintaxe
O método BindToRecordset associa os campos do Recordset a variáveis C/C++.
BindToRecordset(CADORecordBinding *binding)
O método AddNew invoca seu homônimo, o método AddNew do ADO, para adicionar uma nova linha ao Recordset.
AddNew(CADORecordBinding *binding)
O método Update invoca seu homônimo, o método ADO Update, para atualizar o Recordset.
Update(CADORecordBinding *binding)
Macros de entrada de vinculação
As macros de vinculação de entrada definem a ligação entre um campo de Recordset e uma variável. Uma macro inicial e final delimita o conjunto de entradas de associação.
As famílias de macros são fornecidas para dados de comprimento fixo, como adDate ou adBoolean; dados numéricos, como adTinyInt, adIntegerou 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 vinculaçã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 vinculação
BEGIN_ADO_BINDING( classe)
Dados do Fixed-Length
ADO_FIXED_LENGTH_ENTRY(Ordinal, DataType, Buffer, Status, Modify)
ADO_FIXED_LENGTH_ENTRY2(Ordinal, DataType, Buffer, Modify)
Dados numéricos
ADO_NUMERIC_ENTRY(Ordinal, TipoDeDado, Buffer, Precisão, Escala, Status, Modificar)
ADO_NUMERIC_ENTRY2(Ordinal, DataType, Buffer, Precisão, Escala, Modificar)
Dados do Variable-Length
ADO_VARIABLE_LENGTH_ENTRY(Ordinal, DataType, Buffer, Tamanho, Status, Comprimento, Modificar)
ADO_VARIABLE_LENGTH_ENTRY2(Ordinal, DataType, Buffer, Tamanho, Status, Modificar)
ADO_VARIABLE_LENGTH_ENTRY3(Ordinal, TipoDeDado, Buffer, Tamanho, Comprimento, Modificar)
ADO_VARIABLE_LENGTH_ENTRY4(Ordinal, DataType, Buffer, Tamanho, Modificação)
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, começando do um, do campo Recordset correspondente à variável C/C++. |
tipo de dado | 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 do conjunto de registros será convertido neste tipo de dado, se necessário. |
Buffer | Nome da variável C/C++ onde o campo Recordset será armazenado. |
de tamanho de | Tamanho máximo em bytes do Buffer . Se buffer conterá 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 de Buffer são válidos 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 um VARIANT do tipo VT_NULL e não apenas vazio. Os valores possíveis para Status estão listados na próxima tabela, "Valores de Status". |
modificar | Sinalizador booleano; se TRUE, indica que o ADO tem permissão para atualizar o campo do conjunto de registros correspondente com o valor contido no buffer . Defina o parâmetro booliano para modificar para TRUE, permitindo que o ADO atualize o campo associado, e para FALSE se você quiser examinar o campo, mas não mudá-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 em 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 do 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 vinculação é inválida. |
adFldCantConvertValue | 2 | O valor não pôde ser convertido por motivos diferentes de incompatibilidade de sinal ou 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 pode 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 da variável é não-assinado. |
adFldDataOverFlow | 6 | O valor é maior do que poderia ser armazenado no tipo de dados variável. |
adFldCantCreate | 7 | Tipo de coluna desconhecido e campo já está aberto. |
adFldUnavailable | 8 | Não foi possível determinar o valor do campo, 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 de 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++