یوسف زالی
سه شنبه 05 مهر 1390, 23:31 عصر
سلام.
خب فکر می کنم تیتر سوال واضح باشه.
یک چیزی مثل LoadFromFile اما از یک text
ممنون از دوستان
لطفا راهنمایی بفرمایید
vcldeveloper
چهارشنبه 06 مهر 1390, 01:57 صبح
متد LoadFromFile در TAdoTable از یک قابلیت خاص ADO استفاده میکنه، و خودش عملا کار بخصوصی انجام نمیده. اون قابلیت خاص هم این هست که در ADO میشه CommandType را به صورت cmdFile تعریف کرد، و به جای یک دستور SQL یا نام جدول، بهش آدرس یک فایل را داد، تا داده های اون فایل در دیتاست لود بشند. LoadFromFile هم فقط CommandType و CommandText رو تنظیم میکنه، و بعدش متد Open رو فراخوانی میکنه، و مابقی کار توسط ADO انجام میشه. پس نمی تونید به همین راحتی یک متن رو به TAdoTable بدید، و ازش بخواید که اون رو به عنوان داده قبول کنه.
برای همچین کاری می تونید مستقیما برید سراغ ADO، و با شی recordset مربوط به ADO کار کنید. recordset در ADO یک متد Open داره، که این متد به عنوان پارامتر ورودی میتونه source های مختلفی رو قبول کنه، که یکی از اونها شی Stream در ADO (نه کلاس TStream دلفی) هست. در اون صورت، می تونید متن مورد نظرتون رو در یک شی Stream لود کنید، و سپس اون شی Stream رو به متد Open از recordset بدید، تا از اون به عنوان source استفاده کنه. اما وقتی مستقیما از recordset استفاده می کنید، کلاس TAdoTable متوجه تغییرات اعمال شده در recordset نمیشه، و عملا نمی تونید از اون کلاس و متدها و خصوصیتش به درستی استفاده کنید. همین به تنهایی میتونه براتون مشکلات متنوعی رو بوجود بیاره. در هر حال اگر خواستید همچین کاری کنید، کدش احتمالا چیزی مثل کد زیر میشه (البته من فقط این رو نوشتم، ولی تستش نکردم که آیا کار میکنه یا نه):
uses
ADODB, ADOInt;
procedure LoadFromString(Dataset: TCustomADODataSet; const Data: string);
var
AStream : _Stream;
begin
Assert(Assigned(Dataset), 'No dataset is specified');
AStream := CoStream.Create;
AStream.WriteText(Data,adWriteChar);
Dataset.Recordset.Open(AStream,
Dataset.Connection.ConnectionObject,
Dataset.Recordset.CursorType,
Dataset.Recordset.LockType,
0);
end;
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.