Il Modello ad Oggetti di ADO - Fields e Field


Home Page | Commenti | Articoli | Faq | Documenti | Ricerca | Archivio | Storie dalla Sala Macchine | Contribuire | Login/Register

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 puo' utilizzare l'oggetto Field per creare un nuovo record o per modificare dati esistenti, quindi utilizzare i metodi del Recordset per aggiornare i dati.

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

Count

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

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

Append

Accoda un nuovo field all'insieme. e' 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 e' il Recordset su cui si sta' operando.
nome e' il nome che si vuole assegnare al campo, vedere Name
tipo e' il tipo di campo da aggiungere, vedere Type
size e' la dimensione del campo, vedere Size
att attributi del campo, vedere Attributes

field e' l'oggetto Field precedentemente creato.

Prima di chiamare Append e' necessario impostare la proprieta' CursorLocation su adUseClient.

Se si richiama Append per un Recordset aperto o su uno per cui sia stata impostata la proprieta' ActiveConnection. si verifichera' un errore in fase di esecuzione.

Delete

Elimina un oggetto dall'insieme.

Sintassi


Recordset.Fields.Delete indice

e' possibile utilizzare Delete solamente su Recordset disconnessi, Se si richiama Delete su un Recordset aperto, si generera' 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 e' la variabile Field che ricevera' l'oggetto richiesto
Recordset e' l'oggetto Recordset su cui si sta' operando
indice e' il nome o il numero ordinale del campo da reperire.

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

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


field = Recordset.Fields(indice)

Refresh

Questo metodo e' presente solo per compatibilita' con le altre collection, richiamandolo non si hanno effetti visibili. Perche' la collection venga aggiornata e' necessario utilizzare i metodi Requery o Resync del Recordset.

Attributes

Questa proprieta' e' di sola lettura e il suo valore puo' corrispondere alla somma di uno o piu' dei valori riportati nella tabella che segue:

  • adFldMayDefer
    Indica che il campo e' 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 e' scrivibile.
  • adFldUnknownUpdatable
    Indica che il provider non e' in grado di determinare se il campo e' scrivibile.
  • adFldFixed
    Indica che il campo contiene dati a lunghezza fissa.
  • adFldIsNullable
    Indica che il campo accetta valori Null.
  • adFldMayBeNull
    Indica che e' possibile leggere i valori Null del campo.
  • adFldLong
    Indica che il campo e' di tipo binario lungo e che e' possibile utilizzare i metodi AppendChunk e GetChunk.
  • adFldRowID
    Indica che il campo contiene un identificatore di riga costante che non e' scrivibile e presenta un valore descrittivo solo per l'identificazione della riga, quale un numero di record, un identificatore univoco e cosi' 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 proprieta' e' di sola lettura.

Il valore puo' essere una delle costanti seguenti: L'indicatore di tipo OLE DB corrispondente e' 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. E' 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 piu' 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 e' 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, cosi' 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 proprieta' e di lettura/scrittura.

ActualSize

Indica la lunghezza reale del valore di un campo.

Alcuni provider consentono di impostare questa proprieta' in modo da destinare spazio per i dati BLOB. In tal caso il valore predefinito sara' 0.

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

Le proprieta' 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 quantita' di dati che e' possibile inserire in un campo.

Le proprieta' 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 e' di sola lettura.

OriginalValue

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

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

Nella modalita' 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 proprieta' restituira' il valore di campo antecedente a eventuali modifiche, vale a dire quello presente l'ultima volta in cui e' stato chiamato il metodo Update. Si tratta dello stesso valore utilizzato dal metodo CancelBatch per ripristinare il valore. Quando si utilizza questa proprieta' con la proprieta' UnderlyingValue, e' possibile risolvere eventuali conflitti risultanti dall'esecuzione degli aggiornamenti in modalita' batch.

Precision

Indica il grado di precisione dei valori numerici.

Il valore e' di sola lettura.

UnderlyingValue

Indica un valore corrente dell'oggetto Field nel database.

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

Il suo utilizzo e' 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 proprieta' con la proprieta' OriginalValue consente di risolvere eventuali conflitti originati durante gli aggiornamenti in modalita' batch.

Precision

Indica il grado di precisione dei valori numerici nel campo. Questa proprieta' e' di sola lettura.

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, sara' possibile utilizzare AppendChunk per gestire i valori lunghi in blocchi anziche' integralmente.

Se adFldLong nella proprieta' Attributes e' impostato su True, sara' 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 presupporra' che si e' terminato di accodare dati nel primo campo. Se si chiama nuovamente AppendChunk sul primo campo, la chiamata verra' 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 interrompera' le operazioni AppendChunk.

Se non vi e' alcun record corrente al momento della chiamata ad AppendChunk, si verifichera' 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 e' la variabile che ricevera' 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, e' possibile utilizzare GetChunk per gestire i valori lunghi in blocchi anziche' integralmente.

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

Qualsiasi chiamata successiva a GetChunk consentira' di recuperare i dati iniziando da dove si e' 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 presupporra' che l'operazione di recupero di informazioni dal primo campo sia terminata. Se si richiama nuovamente GetChunk sul primo campo, la chiamata verra' interpretata come una nuova operazione e la lettura avra' 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 proprieta' Attributes del campo e' impostato su True, sara' possibile utilizzare il GetChunk per quel campo.

Se non vi e' alcun record corrente quando si utilizza GetChunk, si verifichera' un errore.


I commenti sono aggiunti quando e soprattutto se ho il tempo di guardarli e dopo aver eliminato le cagate, spam, tentativi di phishing et similia. Quindi non trattenete il respiro.

Nessun messaggio this document does not accept new posts

Precedente Successivo


Davide Bianchi, lavora come Unix/Linux System Administrator presso una societa' di "sicurezza informatica" (aka: $networkgestapo) di Haarlem. Contatti: mail: davide AT onlyforfun.net , Jabber: davideyeahsure AT gmail.com,

Volete contribuire? Leggete come!.
 
 

Il presente sito e' 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 (o all'autore dell'articolo se non sono io), cosi' il giorno che faccio delle aggiunte potro' avvisarvi e magari mandarvi il testo aggiornato.


Questo sito era composto con VIM, ora e' composto con VIM ed il famosissimo CMS FdT.

Questo sito non e' ottimizzato per la visione con nessun browser particolare, ne' richiede l'uso di font particolari o risoluzioni speciali. Siete liberi di vederlo come vi pare e piace, o come disse qualcuno: "Finalmente uno dei POCHI siti che ancora funzionano con IE5 dentro Windows 3.1".

Web Interoperability Pleadge Support This Project
Powered By Gort