Saturday, January 4, 2020
Storing Record Data in a BLOB Field in Delphi
In Delphi, a record data type is a special kind of user-defined data type. A record is a container for a mixture of related variables of diverse types, referred to as fields, collected into one type. In database applications, data is stored in fields of various types: integer, string, bit (boolean), etc. While most data can be represented with simple data types, there are situations when you need to store images, rich documents or custom data types in a database. When this is the case you will use the BLOB (Binary Large Object) data type (memo, ntext, image, etc. - the name of the data type depends on the database you work with). Record as Blob Heres how to store (and retrieve) a record (structure) value into a blob field in a database. TUser record ...Suppose you have defined your custom record type as: TUser packed record à à Name : string[50]; à à CanAsk : boolean; à à NumberOfQuestions : integer; end; Record.SaveAsBlobTo insert a new row (database record) in a database table with a BLOB field named data, use the following code: var à à User : TUser; à à blobF : TBlobField; à à bs : TStream; begin à à User.Name : edName.Text; à à User.NumberOfQuestions : StrToInt(edNOQ.Text) ; à à User.CanAsk : chkCanAsk.Checked; à à myTable.Insert; à à blobF : myTable.FieldByName(data) as TBlobField; à à bs : myTable.CreateBlobStream(blobF, bmWrite) ; à à try à à à à bs.Write(User,SizeOf(User)) ; à à finally à à à à bs.Free; à à end; end; In the code above: myTable is the name of the TDataSet component you are using (TTable, TQuery, ADOTable, TClientDataSet, etc).The name of the blob field is data.The User variable (TUser record) is filled using 2 edit boxes (edName and edNOQ)and a check box (chkCanAsk)The CreateBlobStream method creates a TStream object for writing to the blob field. Record.ReadFromBlobOnce you have saved the record (TUser) data to a blob type field, heres how to transform binary data to a TUser value: var à à User : TUser; à à blobF : TBlobField; à à bs : TStream; begin à à if myTable.FieldByName(data).IsBlob then à à begin à à à à blobF : DataSet.FieldByName(data) as TBlobField; à à à à bs : myTable.CreateBlobStream(blobF, bmRead) ; à à à à try à à à à à à bs.Read(user,sizeof(TUser)) ; à à à à finally à à à à à à bs.Free; à à à à end; à à end; à à edName.Text : User.Name; à à edNOQ.Text : IntToStr(User.NumberOfQuestions) ; à à chkCanAsk.Checked : User.CanAsk; end; Note: the code above should go inside the OnAfterScroll event handler of the myTable dataset. Thats it. Make sure you download the sample Record2Blob code.
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment
Note: Only a member of this blog may post a comment.