Cum se păstrează datele de înregistrare într-un câmp BLOB din Delphi

În Delphi, un tip de date înregistrare este un tip special de tipuri de date definite de utilizator. O înregistrare este un container pentru un amestec de variabile asociate de diferite tipuri, denumite câmpuri, colectate într-un singur tip.

În aplicațiile de baze de date, datele sunt stocate în câmpuri de diferite tipuri: număr întreg, șir, bit (boolean), în timp ce majoritatea datelor pot fi reprezentate cu tipuri simple de date, există situații când trebuie să stocați imagini, documente bogate sau date personalizate tipuri într-o bază de date. Când se întâmplă acest lucru, veți utiliza tipul de date BLOB (Binary Large Object) („memo”, „ntext”, „imagine”, etc. - numele tipului de date depinde de baza de date cu care lucrați).

Înregistrați ca Blob

Iată cum se face magazin (și recupera) A record (structură) valoare în a câmp blob într-o bază de date.

TUser = înregistrare ...
Să presupunem că ați definit tipul dvs. de înregistrare personalizată ca:

 TUser = înregistrare la pachet
   Nume: șir [50];
   CanAsk: boolean;
   NumberOfQuestions: număr întreg;
Sfârșit;

"Record.SaveAsBlob"
Pentru a insera un nou rând (înregistrare a bazei de date) într-o tabelă a bazei de date cu un câmp BLOB denumit „date”, utilizați următorul cod:

 var
   Utilizator: TUser;
   blobF: TBlobField;
   bs: TStream;
începe
   User.Name: = edName.Text;
   User.NumberOfQuestions: = StrToInt (edNOQ.Text);
   User.CanAsk: = chkCanAsk.Checked;
   myTable.Insert;
   blobF: = myTable.FieldByName ('date') ca TBlobField;
   bs: = myTable.CreateBlobStream (blobF, bmWrite);
   încerca
     bs.Write (User, SizeOf (User));
   in cele din urma
     bs.Free;
   Sfârșit;
Sfârșit;

În codul de mai sus:

  • „myTable” este numele componentei TDataSet pe care o utilizați (TTable, TQuery, ADOTable, TClientDataSet, etc.).
  • Numele câmpului blob este „date”.
  • Variabila „Utilizator” (înregistrare TUser) este completată folosind 2 casete de editare („edName” și „edNOQ”) și o casetă de selectare („chkCanAsk”)
  • Metoda CreateBlobStream creează un obiect TStream pentru scrierea în câmpul blob.

"Record.ReadFromBlob"
După ce ați salvat datele înregistrării (TUser) într-un câmp tip blob, iată cum se „transformă” datele binare într-o valoare TUser:

 var
   Utilizator: TUser;
   blobF: TBlobField;
   bs: TStream;
începe
   dacă myTable.FieldByName („date”) .IsBlob atunci
   începe
     blobF: = DataSet.FieldByName („date”) ca TBlobField;
     bs: = myTable.CreateBlobStream (blobF, bmRead);
     încerca
       bs.Read (utilizator, sizeof (TUser));
     in cele din urma
       bs.Free;
     Sfârșit;
   Sfârșit;
   edName.Text: = Numele utilizatorului;
   edNOQ.Text: = IntToStr (User.NumberOfQuestions);
   chkCanAsk.Checked: = User.CanAsk;
Sfârșit;

Notă: codul de mai sus ar trebui să intre în gestionarea de evenimente „OnAfterScroll” din setul de date myTable.

Asta e. Asigurați-vă că descărcați eșantionul de cod Record2Blob.