من دیدم که بعضی از دوستانم به جای AdoQuery از ADODataSet استفاده می کنن . آیا استفاده از ADODataSet مزیت خاصی دارد ؟ اصلاADODataSet کجاها باید استفاده شود و فرقش با AdoQuery چیه؟
در ضمن جستجو هم کردم ولی جواب نگرفتم.
من دیدم که بعضی از دوستانم به جای AdoQuery از ADODataSet استفاده می کنن . آیا استفاده از ADODataSet مزیت خاصی دارد ؟ اصلاADODataSet کجاها باید استفاده شود و فرقش با AdoQuery چیه؟
در ضمن جستجو هم کردم ولی جواب نگرفتم.
ADOQuery و ADOTable دوتا کامپوننت هستند که بورلند روی ADO نوشته اما مثل ADODataSet مستقیم با ADO کار نمیکنند و در نهایت هم به مسیر ADODataSet میرسند در نتیجه هم سرعتشون کمتره هم امکان باگ دار بودنشون بیشتره. دلیلی هم که اینارو نوشته اینه که کسایی که میخواهند برنامه هاشون رو از BDE به ADO ببرند مجبور نباشند خیلی تغییر ایجاد کنند و کامپونتهای شبیه TTable و TQuery رو اینجا هم داشته باشند . والا اصلا برای استفاده همینطوری از ADO نیستند و بهتره از ADODataSet استفاده بشه.
یعنی پیشنهاد می کنید به جای استفاده از Adotable و ADoquery از AdodataSet استفاده کنم؟
راستی نکته خاصی نداره؟آخه من تا حالا باهاش کار نکرده ام .
چهار کامپوننت DataSet با نامهای ADOQuery و ADODataSet و ADOStoredProc و ADOTable تقریبا"
به صورت کامل توسط کلاس پدر خود یعنی TCustomDataSet ، پیاده سازی شده اند.
ADOTable و ADOQuery و ADOStoredProc به عنوان کامپوننتهایی جهت سازگاری یا مطابقت با همتای خود
که همون BDE ست پیاده سازی شده و استفاده میشه.
"بهتره" در اینجا یه نظر کاملا" شخصی ست.و الا اصلا برای استفاده همینطوری از ADO نیستند و بهتره از ADODataSet استفاده بشه.
ADO برپایه تکنولوژی OLE DB مایکروسافت پیاده سازی شده که دستیابی به بانکهای اطلاعاتی رابطه ای و
غیر رابطه ای رو فراهم میکنه. کامپوننتهای ADOیی که شما در دلفی میبینید ، بخشی از بسته بورلند
به نام dbGO هستند که به صورت یه گروه در صفحه ADO قرار گرفتند.
تو این گروه سه تا کامپوننت اصلی به نامهای :
ADOConnection ، از اشیاء DataSource و Session مربوط به OLE DB استفاده میکنه.
ADODataSet ، از شیئ Command مربوط به OLE DB استفاده میکنه.
ADOCommand ، از شیئ Rowset مربوط به OLE DB استفاده میکنه.
و سه تا کامپوننت ADOQuery و ADOStoredProc و ADOTable برای کمک به خروج از برنامه هایی که
براساس BDE نوشته شده اند و ورود به ADO ست.
این هم، نظر شخصی ست و فنی نیست.در نتیجه هم سرعتشون کمتره هم امکان باگ دار بودنشون بیشتره.
طبیعتا آره دیگه، نه هیچ نکته خاصی نداره یا الان من یادم نمیاد.
برای اثبات فنی بودن یا نبودنش باید ADODB رو بخونم که فعلا حوصلش نیست اما اگه یکچیزی شبیه اینو تست کنید عملی میبینید (اگر i رو بزرگتر کنید تفاوتها بیشتر احساس میشند):نوشته شده توسط m-khorsandi
procedure TForm1.btQueryClick(Sender: TObject);
var
i: Integer;
ATime: TTime;
begin
Screen.Cursor := crHourGlass;
ATime:= Time;
for i:= 0 to 20 do
with ADOQuery1 do
begin
Close;
SQL.Text := 'Select * from _Goods';
Label1.Caption := IntToStr(i);
Application.ProcessMessages;
Open;
end;
Screen.Cursor := crDefault;
label1.Caption := FloatToStr((Time-ATime)* 100000);
end;
procedure TForm1.btDataSetClick(Sender: TObject);
var
i: Integer;
ATime: TTime;
begin
Screen.Cursor := crHourGlass;
ATime:= Time;
for i:= 0 to 20 do
with ADODataSet1 do
begin
Close;
CommandText := 'Select * from _Goods';
Label2.Caption := IntToStr(i);
Application.ProcessMessages;
Open;
end;
Screen.Cursor := crDefault;
label2.Caption := FloatToStr((Time-ATime) * 100000)
end;
فقط حواستون باشه زمان اجرای اینها از کامپیوتر هیچ کار دیگه نکشین.
البته من منظورم بیشتر نقل قول این قسمت بودو این رو قبول دارم که سرعت بازیابی رکوردها توسط ADOTable کمتر هست.امکان باگ دار بودنشون بیشتره.
روی یه بانک با تعداد رکورد های کم تستشون کردم . برای اولین بار که رو دکمه ها کلیک می کنید .
AdoDateSet=0.127314814812873
AdoQuery=0.361111111113477
اما اگر باز هم روی دکمه ها کلیک کنید با هم برابر میشن.
آقای خراسانی ، آقای کوشا واقعا از لطفتون ممنون .