Speichern von Datensatzdaten in einem BLOB-Feld in Delphi

In Delphi ist ein Datensatzdatentyp eine spezielle Art von benutzerdefiniertem Datentyp. Ein Datensatz ist ein Container für eine Mischung zusammengehöriger Variablen verschiedener Typen, die als Felder bezeichnet werden und in einem Typ zusammengefasst sind.

In Datenbankanwendungen werden Daten in Feldern verschiedener Typen gespeichert: Ganzzahl, Zeichenfolge, Bit (Boolesch) usw. Während die meisten Daten mit einfachen Datentypen dargestellt werden können, gibt es Situationen, in denen Sie Bilder, umfangreiche Dokumente oder benutzerdefinierte Daten speichern müssen tippt eine Datenbank ein. In diesem Fall verwenden Sie den Datentyp BLOB (Binary Large Object) ("memo", "ntext", "image" usw. - der Name des Datentyps hängt von der Datenbank ab, mit der Sie arbeiten.).

Als Blob aufnehmen

Hier erfahren Sie, wie es geht Geschäft (und abrufen) ein Aufzeichnung (Struktur-) Wert in a Blob-Feld in einer Datenbank.

TUser = Rekord ...
Angenommen, Sie haben Ihren benutzerdefinierten Datensatztyp wie folgt definiert:

 TUser = gepackter Datensatz
   Name: Zeichenfolge [50];
   CanAsk: Boolean;
   NumberOfQuestions: integer;
Ende;

"Record.SaveAsBlob"
Verwenden Sie den folgenden Code, um eine neue Zeile (Datenbankeintrag) in eine Datenbanktabelle mit dem BLOB-Feld "data" einzufügen:

 var
   Benutzer: TUser;
   blobF: TBlobField;
   bs: TStream;
Start
   User.Name: = edName.Text;
   User.NumberOfQuestions: = StrToInt (edNOQ.Text);
   User.CanAsk: = chkCanAsk.Checked;
   myTable.Insert;
   blobF: = myTable.FieldByName ('data') als TBlobField;
   bs: = myTable.CreateBlobStream (blobF, bmWrite);
   Versuchen
     bs.Write (User, SizeOf (User));
   schließlich
     bs.Free;
   Ende;
Ende;

Im obigen Code:

  • "myTable" ist der Name der von Ihnen verwendeten TDataSet-Komponente (TTable, TQuery, ADOTable, TClientDataSet usw.).
  • Der Name des Blob-Feldes ist "data".
  • Die Variable "User" (TUser-Datensatz) wird mit 2 Bearbeitungsfeldern ("edName" und "edNOQ") und einem Kontrollkästchen ("chkCanAsk") gefüllt.
  • Die CreateBlobStream-Methode erstellt ein TStream-Objekt zum Schreiben in das Blob-Feld.

"Record.ReadFromBlob"
Nachdem Sie die Datensatzdaten (TUser) in einem Feld vom Typ "Blob" gespeichert haben, können Sie die Binärdaten folgendermaßen in einen TUser-Wert "umwandeln":

 var
   Benutzer: TUser;
   blobF: TBlobField;
   bs: TStream;
Start
   if myTable.FieldByName ('data'). IsBlob then
   Start
     blobF: = DataSet.FieldByName ('data') als TBlobField;
     bs: = myTable.CreateBlobStream (blobF, bmRead);
     Versuchen
       bs.Read (user, sizeof (TUser));
     schließlich
       bs.Free;
     Ende;
   Ende;
   edName.Text: = User.Name;
   edNOQ.Text: = IntToStr (User.NumberOfQuestions);
   chkCanAsk.Checked: = User.CanAsk;
Ende;

Hinweis: Der obige Code sollte sich in der Ereignisbehandlungsroutine "OnAfterScroll" des myTable-Datasets befinden.

Das ist es. Stellen Sie sicher, dass Sie den Record2Blob-Beispielcode herunterladen.