In Delphi is een recordgegevenstype een speciaal soort door de gebruiker gedefinieerd gegevenstype. Een record is een container voor een combinatie van gerelateerde variabelen van verschillende typen, velden genoemd, verzameld in één type.
In databasetoepassingen worden gegevens opgeslagen in velden van verschillende typen: integer, string, bit (boolean), enz. Hoewel de meeste gegevens kunnen worden weergegeven met eenvoudige gegevenstypen, zijn er situaties waarin u afbeeldingen, rijke documenten of aangepaste gegevens moet opslaan typen in een database. Als dit het geval is, gebruikt u het gegevenstype BLOB (Binary Large Object) ("memo", "ntext", "image", enz. - de naam van het gegevenstype is afhankelijk van de database waarmee u werkt).
Hier is hoe op te slaan (en terugvinden) een Vermelding (structuur) waarde in een blob veld in een database.
TUser = record…
Stel dat u uw aangepaste recordtype hebt gedefinieerd als:
TUser = verpakt record
Naam: string [50];
CanAsk: boolean;
NumberOfQuestions: integer;
einde;
"Record.SaveAsBlob"
Gebruik de volgende code om een nieuwe rij (database-record) in een databasetabel in te voegen met een BLOB-veld met de naam "data":
var
Gebruiker: TUser;
blobF: TBlobField;
bs: TStream;
beginnen
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);
proberen
bs.Write (Gebruiker, SizeOf (Gebruiker));
Tenslotte
bs.Free;
einde;
einde;
In de bovenstaande code:
"Record.ReadFromBlob"
Nadat u de recordgegevens (TUser) hebt opgeslagen in een blob-type veld, gaat u als volgt te werk om binaire gegevens te "transformeren" naar een TUser-waarde:
var
Gebruiker: TUser;
blobF: TBlobField;
bs: TStream;
beginnen
if myTable.FieldByName ('data'). IsBlob dan
beginnen
blobF: = DataSet.FieldByName ('data') als TBlobField;
bs: = myTable.CreateBlobStream (blobF, bmRead);
proberen
bs.Read (gebruiker, sizeof (TUser));
Tenslotte
bs.Free;
einde;
einde;
edName.Text: = User.Name;
edNOQ.Text: = IntToStr (User.NumberOfQuestions);
chkCanAsk.Checked: = User.CanAsk;
einde;
Opmerking: de bovenstaande code moet in de gebeurtenishandler "OnAfterScroll" van de myTable-gegevensset gaan.
Dat is het. Zorg ervoor dat u de voorbeeld Record2Blob-code downloadt.