Il Modello ad Oggetti di ADO - Fields e Field

Home Page Commento dell'autore Articoli Le FAQ I documenti La ricerca Contribuire

A cura di:
Davide Bianchi
ADO è l'interfaccia più usata per accedere ai database sotto Windows, non solo mediante ASP, ma anche mediante Visual Basic, C/C++ ed altri ambienti di sviluppo.

Fields

Proprietà
Count

Metodi
Append, Delete, Item, Refresh

La collection Fields e gli oggetti Field consentono l'accesso ai singoli dati che compongono un record. La collection viene gestita tramite il Recordset, attraverso la collection si accede ai singoli oggetti Field che contengono informazioni relative alla singola colonna (campo) del database.

Si può utilizzare l'oggetto Field per creare un nuovo record o per modificare dati esistenti, quindi utilizzare i metodi del Recordset per aggiornare i dati (solo se il Recordset).

L'esempio seguente utilizza gli oggetti Field per reperire informazioni da un Recordset):


Dim rs As New ADODB.Recordset
Dim fld As ADODB.Field

rs.Open "select * from titles", "DSN=pubs;UID=sa"
Set Flds = rs.Fields
Dim TotalCount As Integer
TotalCount = Flds.Count
i = 0
For Each fld In Flds
  Debug.Print fld.Name
  Debug.Print fld.Type
  Debug.Print fld.Value
Next
rs.Close
Torna alla mappa

Proprietà

Count Indica il numero di oggetti contenuti nell'insieme. è una proprietà di sola lettura. Se il valore restituito è pari a 0, l'insieme è vuoto e non contiene nessun oggetto.

Nota:
La numerazione degli oggetti nell'insieme parte da 0 e non da 1.

Metodi

Append Accoda un nuovo field all'insieme. è possibile creare un nuovo Field prima di aggiungerlo all'insieme.

Sintassi

recordset.Fields.Append nome, tipo, size, att

o

recordset.Fields.Append field
Parametri
recordset è il Recordset su cui si stà operando.
nome è il nome che si vuole assegnare al campo, vedere Name
tipo è il tipo di campo da aggiungere, vedere Type
size è la dimensione del campo, vedere Size
att attributi del campo, vedere Attributes

field è l'oggetto Field precedentemente creato.

Prima di chiamare Append è necessario impostare la proprietà CursorLocation su adUseClient.

Se si richiama Append per un Recordset aperto o su uno per cui sia stata impostata la proprietà ActiveConnection. si verificherà un errore in fase di esecuzione.

Delete Elimina un oggetto dall'insieme.

Sintassi


Recordset.Fields.Delete indice

è possibile utilizzare Delete solamente su Recordset disconnessi, Se si richiama Delete su un Recordset aperto, si genererà un errore in fase di elaborazione.

Item Restituisce un membro specifico dell'insieme in base al nome o al numero ordinale.

Sintassi


field = Recordset.Fields.Item( indice )
oggetto è la variabile Field che riceverà l'oggetto richiesto
Recordset è l'oggetto Recordset su cui si stà operando
indice è il nome o il numero ordinale del campo da reperire.

Osservazioni
Utilizzare Item per reperire un oggetto specifico nell'insieme. Se non è possibile trovare nell'insieme un oggetto corrispondente all'argomento indice, si verificherà un errore.

Item è il metodo predefinito per tutti gli insiemi, quindi è possibile utilizzare anche la forma "ridotta" del metodo.


field = Recordset.Fields(indice)
Refresh Questo metodo è presente solo per compatibilità con le altre collection, richiamandolo non si hanno effetti visibili. Perchè la collection venga aggiornata è necessario utilizzare i metodi Requery o Resync del Recordset.

Field

Proprietà
Attributes, Name, Type, Value, ActualSize, DefinedSize, NumericScale, OriginalValue, Precision, UnderlyingValue, Precision

Metodi
AppendChunk, GetChunk

Torna alla mappa

Proprietà

Attributes Questa proprietà è di sola lettura e il suo valore puņ corrispondere alla somma di uno o più dei valori riportati nella tabella che segue:
  • adFldMayDefer
    Indica che il campo è differito, vale a dire che i valori di campo non vengono recuperati dalla fonte dati con il record intero, ma solo quando vi si accede esplicitamente.
  • adFldUpdatable
    Indica che il campo è scrivibile.
  • adFldUnknownUpdatable
    Indica che il provider non è in grado di determinare se il campo è scrivibile.
  • adFldFixed
    Indica che il campo contiene dati a lunghezza fissa.
  • adFldIsNullable
    Indica che il campo accetta valori Null.
  • adFldMayBeNull
    Indica che è possibile leggere i valori Null del campo.
  • adFldLong
    Indica che il campo è di tipo binario lungo e che è possibile utilizzare i metodi AppendChunk e GetChunk.
  • adFldRowID
    Indica che il campo contiene un identificatore di riga costante che non è scrivibile e presenta un valore descrittivo solo per l'identificazione della riga, quale un numero di record, un identificatore univoco e così via.
  • adFldRowVersion
    Indica che il campo contiene un tipo di indicatore di data e ora per controllare gli aggiornamenti.
  • adFldCacheDeferred
    Indica che il provider memorizza nella cache i valori di campo e che le letture successive vengono effettuate dalla cache.

Name

Indica il nome del campo.

Type Indica il tipo operativo o il tipo di dato del campo, questa proprietà è di sola lettura.

Il valore può essere una delle costanti seguenti: L'indicatore di tipo OLE DB corrispondente è riportato tra parentesi. Per ulteriori informazioni sui tipi di dati OLE DB, consultare il capitolo 10 e l'appendice A della guida di riferimento per i programmatori di OLE DB.

  • adArray
    Unito in un operatore logico OR a un altro tipo per indicare che i dati costituiscono una matrice sicura di quel tipo (DBTYPE_ARRAY).
  • adBigInt
    Intero con segno da 8 byte (DBTYPE_I8).
  • adBinary
    Valore binario (DBTYPE_BYTES).
  • adBoolean
    Valore booleano (DBTYPE_BOOL).
  • adByRef
    Unito in un operatore logico OR a un altro tipo per indicare che i dati costituiscono un puntatore a dati di altro tipo (DBTYPE_BYREF).
  • adBSTR
    Stringa di caratteri a terminazione Null (Unicode) (DBTYPE_BSTR).
  • adChar
    Valore String (DBTYPE_STR).
  • adCurrency
    Valore di valuta (DBTYPE_CY). Si tratta di un numero a virgola fissa con quattro cifre a destra della virgola decimale. Č memorizzato in un intero con segno da 8 byte scalato per 10.000.
  • adDate
    Valore Date (DBTYPE_DATE). Si tratta di una data memorizzata come Double, la cui parte intera rappresenta il numero di giorni a partire dal 30 dicembre 1899, mentre la parte frazionaria rappresenta la frazione di un giorno.
  • adDBDate
    Valore data (ggmmaaaa) (DBTYPE_DBDATE).
  • adDBTime
    Valore tempo (oommss) (DBTYPE_DBTIME).
  • adDBTimeStamp
    Indicatore data/ora (ggmmaaaaoommss più una frazione in miliardesimi) (DBTYPE_DBTIMESTAMP).
  • adDecimal
    Valore numerico esatto con grado di precisione e di scala fisso (DBTYPE_DECIMAL).
  • adDouble
    Valore con virgola mobile in precisione doppia (DBTYPE_R8).
  • adEmpty
    Non è stato specificato alcun valore (DBTYPE_EMPTY).
  • adError
    Codice di errore a 32 bit (DBTYPE_ERROR).
  • adGUID
    Identificatore univoco globale (GUID) (DBTYPE_GUID).
  • adIDispatch
    Puntatore a un'interfaccia Idispatch su un oggetto OLE (DBTYPE_IDISPATCH).
  • adInteger
    Intero con segno da 4 byte (DBTYPE_I4).
  • adIUnknown
    Puntatore a un'interfaccia Iunknown su un oggetto OLE (DBTYPE_IUNKNOWN).
  • adLongVarBinary
    Valore binario lungo (solo oggetto Parameter).
  • adLongVarChar
    Valore String lungo (solo oggetto Parameter).
  • adLongVarWChar
    Valore stringa a terminazione Null lungo (solo oggetto Parameter).
  • adNumeric
    Valore numerico esatto con grado di precisione e di scala fisso (DBTYPE_NUMERIC).
  • adSingle
    Valore con virgola mobile in precisione semplice (DBTYPE_R4).
  • adSmallInt
    Intero con segno da 2 byte (DBTYPE_I2).
  • adTinyInt
    Intero con segno da 1 byte (DBTYPE_I1).
  • adUnsignedBigInt
    Intero senza segno da 8 byte (DBTYPE_UI8).
  • adUnsignedInt
    Intero senza segno da 4 byte (DBTYPE_UI4).
  • adUnsignedSmallInt
    Intero senza segno da 2 byte (DBTYPE_UI2).
  • adUnsignedTinyInt
    Intero senza segno da 1 byte (DBTYPE_UI1).
  • adUserDefined
    Variabile definita dall'utente (DBTYPE_UDT).
  • adVarBinary
    Valore binario (solo oggetto Parameter).
  • adVarChar
    Valore String (solo oggetto Parameter).
  • adVariant
    Variant di automazione (DBTYPE_VARIANT).
  • adVector
    Unito in un operatore logico OR a un altro tipo per indicare che i dati rappresentano una struttura DBVECTOR, così come viene definita da OLE DB, nella quale sono inclusi il conteggio degli elementi e un puntatore a dati di altro tipo (DBTYPE_VECTOR).
  • adVarWChar
    Stringa di caratteri Unicode a terminazione Null (solo oggetto Parameter).
  • adWChar
    Stringa di caratteri Unicode a terminazione Null (DBTYPE_WSTR).

Value Contiene il valore del campo. Questa proprietà e di lettura/scrittura.

ActualSize Indica la lunghezza reale del valore di un campo.

Alcuni provider consentono di impostare questa proprietà in modo da destinare spazio per i dati BLOB. In tal caso il valore predefinito sarà 0.

Utilizzare ActualSize per restituire la lunghezza reale del valore del campo, la proprietà è di sola lettura per tutti i campi. Se ADO non è in grado di determinare la lunghezza del valore, la proprietà restituisce adUnknown.

Le proprietà ActualSize e DefinedSize sono diverse: per un campo con un tipo dichiarato di adVarChar e una lunghezza massima di 50 caratteri, DefinedSize restituisce 50, mentre ActualSize restituisce la lunghezza dei dati effettivamente memorizzati nel campo.

DefinedSize Indica le dimensioni definite del campo.

Restituisce un valore che riflette le dimensioni definite del campo espresse in numero di byte.

Utilizzare DefinedSize per determinare la quantità di dati che è possibile inserire in un campo.

Le proprietà ActualSize e DefinedSize sono diverse: per un campo con un tipo dichiarato di adVarChar e una lunghezza massima di 50 caratteri, DefinedSize restituisce 50, mentre ActualSize restituisce la lunghezza dei dati effettivamente memorizzati nel campo.

NumericScale Indica la scala dei valori numerici.

Imposta o restituisce un valore che indica il numero di cifre decimali in base a cui verranno risolti i valori numerici.

Questo valore è di sola lettura.

OriginalValue

Indica il valore di un oggetto campo presente nel record prima di aver apportato eventuali modifiche.

Osservazioni
Utilizzare questa proprietà per restituire il valore originale di un campo dal record corrente. Nella modalità di aggiornamento immediato, in cui il provider scrive le modifiche sulla fonte dati del livello inferiore quando viene chiamato il metodo Update, questa proprietà restituirà il valore di campo antecedente a eventuali modifiche, vale a dire quello presente l'ultima volta in cui è stato chiamato il metodo Update. Si tratta dello stesso valore utilizzato dal metodo CancelUpdate. per ripristinare le condizioni prima della modifica.

Nella modalità di aggiornamento batch, in cui il provider memorizza nella cache le modifiche e le scrive sulla fonte dati del livello inferiore quando viene chiamato il metodo UpdateBatch, questa proprietà restituirà il valore di campo antecedente a eventuali modifiche, vale a dire quello presente l'ultima volta in cui è stato chiamato il metodo Update. Si tratta dello stesso valore utilizzato dal metodo CancelBatch per ripristinare il valore. Quando si utilizza questa proprietà con la proprietà UnderlyingValue, è possibile risolvere eventuali conflitti risultanti dall'esecuzione degli aggiornamenti in modalità batch.

Precision Indica il grado di precisione dei valori numerici.

Il valore è di sola lettura.

UnderlyingValue Indica un valore corrente dell'oggetto Field nel database.

Osservazioni
Questa proprietà viene utilizzata per restituire il valore corrente dal database. Il valore nella proprietà corrisponde al valore visibile alla transazione e puņ corrispondere al risultato di un recente aggiornamento da parte di un'altra transazione. Tale valore si differenzia da quello della proprietà OriginalValue, che corrisponde al valore restituito in origine al Recordset.

Il suo utilizzo è simile al metodo Resync, ma a differenza di quello restituisce soltanto il valore per un campo specifico del record corrente. Si tratta dello stesso valore che Resync utilizza.

L'utilizzo di questa proprietà con la proprietà OriginalValue consente di risolvere eventuali conflitti originati durante gli aggiornamenti in modalità batch.

Precision Indica il grado di precisione dei valori numerici nel campo. Questa proprietà è di sola lettura.
Metodi

AppendChunk Accoda dati in formato testo o binario.

Sintassi


field.AppendChunk dati

dati Elemento contenente i dati che si desidera accodare all'oggetto.

Osservazioni
Utilizzare questo metodo su un campo per inserirvi dati binari o letterali lunghi. Nel caso in cui la memoria del sistema sia limitata, sarà possibile utilizzare AppendChunk per gestire i valori lunghi in blocchi anzichè integralmente.

Se adFldLong nella proprietà Attributes è impostato su True, sarà possibile utilizzare AppendChunk per il campo.

La prima chiamata ad AppendChunk consente di scrivere dati nel campo sovrascrivendo i dati esistenti. Le successive chiamate consentono invece di aggiungere dati ai dati esistenti. Se si accodano dati in un campo, quindi si imposta o si legge il valore di un altro campo nel record corrente, si presupporrà che si è terminato di accodare dati nel primo campo. Se si chiama nuovamente AppendChunk sul primo campo, la chiamata verrà interpretata come una nuova operazione ed i dati esistenti verranno sovrascritti. L'accesso ai campi di altri Recordset che non siano cloni del primo non interromperà le operazioni AppendChunk.

Se non vi è alcun record corrente al momento della chiamata ad AppendChunk, si verificherà un errore.

GetChunk Restituisce l'intero contenuto o una parte del contenuto di un campo di grandi dimensioni in formato testo o binario.

Sintassi

variabile = campo.GetChunk( size )
variabile è la variabile che riceverà i dati
size indica il numero di byte o caratteri da recuperare.

Osservazioni
Utilizzare GetChunk su un campo di grandi dimensioni per recuperare tutti i dati binari o letterali o una parte di essi. Nel caso in cui la memoria del sistema sia limitata, è possibile utilizzare GetChunk per gestire i valori lunghi in blocchi anzichè integralmente.

I dati restituiti da una chiamata a GetChunk vengono assegnati a una variabile. Se size è maggiore dei dati rimanenti, il metodo GetChunk restituirà solo i dati rimanenti senza inserire spazi vuoti di riempimento nella variabile. Se il campo è vuoto, GetChunk restituirà Null.

Qualsiasi chiamata successiva a GetChunk consentirà di recuperare i dati iniziando da dove si è interrotta la chiamata precedente. Se tuttavia si recuperano dati da un campo, quindi si imposta o si legge il valore di un altro campo nel record corrente, si presupporrà che l'operazione di recupero di informazioni dal primo campo sia terminata. Se si richiama nuovamente GetChunk sul primo campo, la chiamata verrà interpretata come una nuova operazione e la lettura avrà inizio dai primi dati. Accedendo ai campi di altri Recordset che non siano cloni del primo non si interromperanno le operazioni GetChunk.

Se adFldLong nella proprietà Attributes del campo è impostato su True, sarà possibile utilizzare il GetChunk per quel campo.

Se non vi è alcun record corrente quando si utilizza GetChunk, si verificherà un errore.


L'autore Davide Bianchi, pomposamente definito Software Engineer dal biglietto da visita, lavora per la Square bv, società olandese con sede a Roermond, che si occupa di sviluppo di software con orientamento grafico. Attualmente stà lavorando in Java (e si diverte un sacco).

Contribuire
Hai dei documenti interessanti o utili che trattano argomenti legati al mondo dell'informatica da pubblicare ? leggi come.
Come giudichi questo Documento ?
Hai trovato questo documento utile? inutile? interessante? noioso? fammelo sapere
Copyright Il presente sito è frutto del sudore della mia fronte (e delle mie dita), se siete interessati a ripubblicare uno degli articoli, documenti o qualunque altra cosa presente in questo sito per cortesia datemene comunicazione, così il giorno che faccio delle aggiunte potrò avvisarvi e magari mandarvi il testo aggiornato.

Questo sito è composto interamente con Ultraeditor.
Ultimo aggiornamento: 16 Luglio 2000