Condividi tramite


Estensioni di Visual C++

Interfaccia IADORecordBinding

Le estensioni di Microsoft Visual C++ per ADO associano i campi di un oggetto Recordset alle variabili C/C++. Ogni volta che viene modificata la riga corrente dell'oggetto Recordset associato, tutti i campi associati nell'oggetto Recordset vengono copiati nelle variabili C/C++. Se necessario, i dati copiati vengono convertiti nel tipo di dati dichiarato della variabile C/C++.

Il metodo BindToRecordset dell'interfaccia IADORecordBinding associa i campi alle variabili C/C++. Il metodo AddNew aggiunge una nuova riga all'oggetto Recordset associato. Il metodo Update popola i campi nelle nuove righe dell'oggetto Recordset o aggiorna i campi nelle righe esistenti con il valore delle variabili C/C++.

L'interfaccia IADORecordBinding viene implementata dall'oggetto Recordset. L'implementazione non viene codificata manualmente.

Voci di associazione

Le estensioni di Visual C++ per ADO eseguono il mapping dei campi di un oggetto Recordset alle variabili C/C++. La definizione di un mapping tra un campo e una variabile è detta voce di associazione. Le macro forniscono voci di associazione per dati numerici, a lunghezza fissa e a lunghezza variabile. Le voci di associazione e le variabili C/C++ vengono dichiarate in una classe derivata dalla classe delle estensioni di Visual C++, CADORecordBinding. La classe CADORecordBinding viene definita internamente dalle macro delle voci di associazione.

ADO esegue internamente il mapping dei parametri di queste macro a una struttura OLE DB DBBINDING e crea un oggetto OLE DB funzione di accesso per gestire lo spostamento e la conversione dei dati tra campi e variabili. OLE DB definisce i dati come costituiti da tre parti: un buffer in cui vengono archiviati i dati, uno stato che indica se un campo è stato archiviato correttamente nel buffer o come la variabile deve essere ripristinata nel campo e la lunghezza dei dati. Per altre informazioni, vedere Recupero e impostazione dei dati (OLE DB) nella Guida di riferimento per programmatori OLE DB.

File di intestazione

Per usare le estensioni di Visual C++ per ADO includere nell'applicazione il file seguente:

#include <icrsint.h>

Associazione dei campi dell'oggetto Recordset

Per associare i campi dell'oggetto Recordset alle variabili C/C++

  1. Creare una classe derivata dalla classe CADORecordBinding.

  2. Specificare le voci di associazione e le variabili C/C++ corrispondenti nella classe derivata. Mettere tra parentesi le voci di associazione tra le macro BEGIN_ADO_BINDING e END_ADO_BINDING. Non terminare le macro con virgole o punti e virgola. I delimitatori appropriati vengono specificati automaticamente da ogni macro.

    Specificare una voce di associazione per ogni campo di cui eseguire il mapping a una variabile C/C++. Usare un membro appropriato della famiglia di macro ADO_FIXED_LENGTH_ENTRY, ADO_NUMERIC_ENTRY o ADO_VARIABLE_LENGTH_ENTRY.

  3. Nell'applicazione creare un'istanza della classe derivata da CADORecordBinding. Ottenere l'interfaccia IADORecordBinding dall'oggetto Recordset. Chiamare quindi il metodo BindToRecordset per associare i campi dell'oggetto Recordset alle variabili C/C++.

Per altre informazioni, vedere Esempio di estensioni di Visual C++.

Metodi di interfaccia

L'interfaccia IADORecordBinding include tre metodi: BindToRecordset, AddNew e Update. L'unico argomento di ogni metodo è un puntatore a un'istanza della classe derivata da CADORecordBinding. Pertanto, i metodi AddNew e Update non possono specificare alcun parametro dei relativi metodi omonimi ADO.

Sintassi

Il metodo BindToRecordset associa i campi dell'oggetto Recordset alle variabili C/C++.

BindToRecordset(CADORecordBinding *binding)

Il metodo AddNew richiama il relativo omonimo, il metodo ADO AddNew, per aggiungere una nuova riga all'oggetto Recordset.

AddNew(CADORecordBinding *binding)

Il metodo Update richiama il relativo omonimo, il metodo ADO Update, per aggiornare l'oggetto Recordset.

Update(CADORecordBinding *binding)

Macro delle voci di associazione

Le macro delle voci di associazione definiscono l'associazione di un campo dell'oggetto Recordset e di una variabile. Una macro iniziale e una finale delimitano il set di voci di associazione.

Le famiglie di macro vengono fornite per i dati a lunghezza fissa, come adDate o adBoolean, per i dati numerici, come adTinyInt, adInteger o adDouble e per i dati a lunghezza variabile, come adChar, adVarChar o adVarBinary. Tutti i tipi numerici, ad eccezione di adVarNumeric, sono anche tipi a lunghezza fissa. Ogni famiglia contiene set di parametri diversi in modo da poter escludere le informazioni di associazione che non sono di alcun interesse.

Per altre informazioni, vedere Appendice A: Tipi di dati, della Guida di riferimento per programmatori OLE DB.

Voci di associazione iniziali

BEGIN_ADO_BINDING(Class)

Dati a lunghezza fissa

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

ADO_FIXED_LENGTH_ENTRY2(Ordinal, DataType, Buffer, Modify)

Dati numerici

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

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

Dati a lunghezza variabile

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)

Voci di associazione finali

END_ADO_BINDING()

Parametro Descrizione
Classe Classe in cui vengono definite le voci di associazione e le variabili C/C++.
Ordinale Numero ordinale, a partire da uno, del campo dell'oggetto Recordset corrispondente alla variabile C/C++.
DataType Tipo di dati ADO equivalente della variabile C/C++ (vedere DataTypeEnum per un elenco di tipi di dati validi). Se necessario, il valore del campo dell'oggetto Recordset verrà convertito in questo tipo di dati.
Buffer Nome della variabile C/C++ in cui verrà archiviato il campo dell'oggetto Recordset.
Dimensione Dimensioni massime in byte del parametro Buffer. Se Buffer conterrà una stringa di lunghezza variabile, lasciare spazio per uno zero finale.
Stato Nome di una variabile che indica se il contenuto di Buffer è valido e se la conversione del campo in DataType ha avuto esito positivo.

I due valori più importanti per questa variabile sono adFldOK, che indica che la conversione ha avuto esito positivo, e adFldNull, che indica che il valore del campo sarà un valore VARIANT di tipo VT_NULL e non semplicemente vuota.

I valori possibili per Status sono elencati nella tabella successiva, "Valori di Status".
Modifica Flag booleano; se TRUE, indica che ADO è autorizzato ad aggiornare il campo dell'oggetto Recordset corrispondente con il valore contenuto in Buffer.

Impostare il parametro booleano modify su TRUE per consentire ad ADO di aggiornare il campo associato e su FALSE se si vuole esaminare il campo ma non modificarlo.
Precisione Numero di cifre che possono essere rappresentate in una variabile numerica.
Ridimensiona Numero di posizioni decimali in una variabile numerica.
Lunghezza Nome di una variabile a quattro byte che conterrà la lunghezza effettiva dei dati in Buffer.

Valori di stato

Il valore della variabile Status indica se un campo è stato copiato correttamente in una variabile.

Quando si impostano i dati, Status può essere impostato su adFldNull per indicare che il campo dell'oggetto Recordset deve essere impostato su Null.

Costante Valore Descrizione
adFldOK 0 È stato restituito un valore di campo non Null.
adFldBadAccessor 1 L'associazione non è valida.
adFldCantConvertValue 2 Non è stato possibile convertire il valore per motivi diversi dalla non corrispondenza di segno o dall'overflow dei dati.
adFldNull 3 Quando si ottiene un campo, indica che è stato restituito un valore Null.

Quando si imposta un campo, indica che il campo deve essere impostato su NULL quando il campo stesso non può codificare NULL (ad esempio, una matrice di caratteri o un numero intero).
adFldTruncated 4 I dati a lunghezza variabile o le cifre numeriche sono stati troncati.
adFldSignMismatch 5 Il valore è con segno e il tipo di dati della variabile è senza segno.
adFldDataOverFlow 6 Il valore è maggiore di quanto possa essere archiviato nel tipo di dati della variabile.
adFldCantCreate 7 Tipo di colonna sconosciuto e campo già aperto.
adFldUnavailable 8 Non è stato possibile determinare il valore del campo, ad esempio per un nuovo campo non assegnato senza valore predefinito.
adFldPermissionDenied 9 Durante l'aggiornamento, nessuna autorizzazione per la scrittura dei dati.
adFldIntegrityViolation 10 Durante l'aggiornamento, il valore del campo viola l'integrità della colonna.
adFldSchemaViolation 11 Durante l'aggiornamento, il valore del campo viola lo schema della colonna.
adFldBadStatus 12 Durante l'aggiornamento, parametro di stato non valido.
adFldDefault 13 Durante l'aggiornamento è stato usato un valore predefinito.

Vedi anche

Esempio di estensioni di Visual C++Intestazione delle estensioni di Visual C++