PDA

View Full Version : ذخیره رکوردها در دیتابیس به شکل فیلد BLOB



Vahid_moghaddam
یک شنبه 21 بهمن 1386, 16:02 عصر
در اینجا فرض بر این است که خواننده با رکوردها در دلفی آشنایی دارد. هدف از این نوشتار، بیان روشی برای ذخیره و بازیابی رکوردها در دیتابیس به شکل فیلد BLOB می باشد.

فرض کنید رکوردی به شکل زیر تعریف شده است:




TUser = packed record
Name : string[50];
CanAsk : boolean;
NumberOfQuestions : integer;
end;

برای درج رکوردی جدید در جدولی که دارای یک فیلد BLOB با نام "data" است، می توان از کد زیر استفاده کرد:




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;



در کد بالا "myTable" نام کامپوننت دیتاستی است که مورد استفاده است. کامپوننتی مانند TTable, TQuery,TAdoTable و ....
متغیر "User" که تز نوع رکورد TUser است، با استفاده از EditBox های "edName" و "edNOQ" و CheckBox با نام "chkCanAsk" مقدار دهی می شود.
متد CreateBlobStream، آبجکتی از نوع TStream برای نوشتن در فیلد Blob می سازد.حال برای خواندن و بازیابی رکورد یا رکوردهای ذخیره شده از کد زیر می توان استفاده کرد:



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;

Vahid_moghaddam
یک شنبه 21 بهمن 1386, 16:04 عصر
منبع
http://delphi.about.com