In Delphi, un tipo di dati record è un tipo speciale di tipo di dati definito dall'utente. Un record è un contenitore per una miscela di variabili correlate di diversi tipi, denominati campi, raccolti in un tipo.
Nelle applicazioni di database, i dati sono archiviati in campi di vari tipi: intero, stringa, bit (booleano), ecc. Mentre la maggior parte dei dati può essere rappresentata con tipi di dati semplici, ci sono situazioni in cui è necessario archiviare immagini, documenti complessi o dati personalizzati digita in un database. In questo caso utilizzerai il tipo di dati BLOB (Binary Large Object) ("memo", "ntext", "image", ecc. - il nome del tipo di dati dipende dal database con cui lavori).
Ecco come memorizzare (e recuperare) a disco (struttura) valore in a campo blob in un database.
TUser = record ...
Supponiamo di aver definito il tipo di record personalizzato come:
TUser = record impaccato
Nome: stringa [50];
CanAsk: booleano;
NumberOfQuestions: intero;
fine;
"Record.SaveAsBlob"
Per inserire una nuova riga (record del database) in una tabella del database con un campo BLOB denominato "dati", utilizzare il codice seguente:
var
Utente: TUser;
blobF: TBlobField;
bs: TStream;
inizio
User.Name: = edName.Text;
User.NumberOfQuestions: = StrToInt (edNOQ.Text);
User.CanAsk: = chkCanAsk.Checked;
myTable.Insert;
blobF: = myTable.FieldByName ('data') come TBlobField;
bs: = myTable.CreateBlobStream (blobF, bmWrite);
provare
bs.Write (Utente, SizeOf (Utente));
infine
bs.Free;
fine;
fine;
Nel codice sopra:
"Record.ReadFromBlob"
Dopo aver salvato i dati del record (TUser) in un campo di tipo BLOB, ecco come "trasformare" i dati binari in un valore TUser:
var
Utente: TUser;
blobF: TBlobField;
bs: TStream;
inizio
se myTable.FieldByName ('data'). IsBlob quindi
inizio
blobF: = DataSet.FieldByName ('data') come TBlobField;
bs: = myTable.CreateBlobStream (blobF, bmRead);
provare
bs.Lead (utente, sizeof (TUser));
infine
bs.Free;
fine;
fine;
edName.Text: = User.Name;
edNOQ.Text: = IntToStr (User.NumberOfQuestions);
chkCanAsk.Checked: = User.CanAsk;
fine;
Nota: il codice sopra riportato dovrebbe rientrare nel gestore eventi "OnAfterScroll" del set di dati myTable.
Questo è tutto. Assicurati di scaricare il codice di esempio Record2Blob.