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++
Creare una classe derivata dalla classe CADORecordBinding.
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.
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++