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;
فرض کنید رکوردی به شکل زیر تعریف شده است:
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;