PDA

View Full Version : ADODataSet



MNosouhi
پنج شنبه 02 آذر 1385, 10:39 صبح
من دیدم که بعضی از دوستانم به جای AdoQuery از ADODataSet استفاده می کنن . آیا استفاده از ADODataSet مزیت خاصی دارد ؟ اصلاADODataSet کجاها باید استفاده شود و فرقش با AdoQuery چیه؟
در ضمن جستجو هم کردم ولی جواب نگرفتم.

ghabil
پنج شنبه 02 آذر 1385, 12:02 عصر
ADOQuery و ADOTable دوتا کامپوننت هستند که بورلند روی ADO نوشته اما مثل ADODataSet مستقیم با ADO کار نمیکنند و در نهایت هم به مسیر ADODataSet میرسند در نتیجه هم سرعتشون کمتره هم امکان باگ دار بودنشون بیشتره. دلیلی هم که اینارو نوشته اینه که کسایی که میخواهند برنامه هاشون رو از BDE به ADO ببرند مجبور نباشند خیلی تغییر ایجاد کنند و کامپونتهای شبیه TTable و TQuery رو اینجا هم داشته باشند . والا اصلا برای استفاده همینطوری از ADO نیستند و بهتره از ADODataSet استفاده بشه.

MNosouhi
پنج شنبه 02 آذر 1385, 14:23 عصر
یعنی پیشنهاد می کنید به جای استفاده از Adotable و ADoquery از AdodataSet استفاده کنم؟
راستی نکته خاصی نداره؟آخه من تا حالا باهاش کار نکرده ام .

m-khorsandi
پنج شنبه 02 آذر 1385, 16:28 عصر
چهار کامپوننت 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 ست.



در نتیجه هم سرعتشون کمتره هم امکان باگ دار بودنشون بیشتره.
این هم، نظر شخصی ست و فنی نیست.

ghabil
پنج شنبه 02 آذر 1385, 16:30 عصر
طبیعتا آره دیگه، نه هیچ نکته خاصی نداره یا الان من یادم نمیاد.

ghabil
پنج شنبه 02 آذر 1385, 17:32 عصر
این هم، نظر شخصی ست و فنی نیست.

برای اثبات فنی بودن یا نبودنش باید ADODB رو بخونم که فعلا حوصلش نیست اما اگه یکچیزی شبیه اینو تست کنید عملی میبینید (اگر i رو بزرگتر کنید تفاوتها بیشتر احساس میشند):



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;


فقط حواستون باشه زمان اجرای اینها از کامپیوتر هیچ کار دیگه نکشین.

m-khorsandi
پنج شنبه 02 آذر 1385, 18:14 عصر
البته من منظورم بیشتر نقل قول این قسمت بود
امکان باگ دار بودنشون بیشتره.
و این رو قبول دارم که سرعت بازیابی رکوردها توسط ADOTable کمتر هست.

MNosouhi
پنج شنبه 02 آذر 1385, 19:12 عصر
روی یه بانک با تعداد رکورد های کم تستشون کردم . برای اولین بار که رو دکمه ها کلیک می کنید .
AdoDateSet=0.127314814812873
AdoQuery=0.361111111113477
اما اگر باز هم روی دکمه ها کلیک کنید با هم برابر میشن.

آقای خراسانی ، آقای کوشا واقعا از لطفتون ممنون .