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.).
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:
"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.