PDA

View Full Version : سوال: open کردن AdoTable بدون از دست دادن زمان



hyl_piano
چهارشنبه 04 دی 1387, 14:58 عصر
من 1 جدول توی sql دارم که حدود 200000 رکود داره.
وقتی که میخوام با adotable جدول را باز کنم ، حدود 2 یا 3 ثانیه طول میکشه که اطلاعات نمایش داده بشه. شما روشی سراغ دارید که جدول باز بشه و زمانی هم طلف نشه.
وقتی که مثلا یک فایل 200000 رکوردی از نوع text را با table باز میکنم ، بمحض اینکه فرمان open اجرا میشه ، اطلاعات نمایش داده میشه . اگه میشه راهنمایی کنید.:لبخند:

vcldeveloper
چهارشنبه 04 دی 1387, 15:10 عصر
معلومه که همچین چیزی وجود نداره! انتقال داده های دویست هزار رکورد از دیسک سخت به RAM، و انتقال آنها در شبکه، مسلما به زمان نیاز داره.
چرا باید 200،000 رکورد را یکجا به کلاینت منتقل کنید؟!

hyl_piano
چهارشنبه 04 دی 1387, 15:33 عصر
من نمیخوام که 200000 رکورد رو یکجا به کلاینت انتقال بدم. اصلا اگه شما بخواهید که یک همچین جدولی رو توی sql باز کنید، 1 ثانیه هم طول نمیکشه، منم میخوام 1 همچین کاری رو انجام بدم حالا با هر روشی که بشه رکوردها رو پیمایش کرد یا نشون داد . من فقط میخوام که این جدول باز بشه و زمانی گرفته نشه.
ممون که زود جوابمو دادید.

vcldeveloper
چهارشنبه 04 دی 1387, 16:14 عصر
من نمیخوام که 200000 رکورد رو یکجا به کلاینت انتقال بدم.
وقتی از AdoTable استفاده می کنید، یعنی کل رکوردهای جدول را یکجا به کلاینت منتقل می کنید.


اگه شما بخواهید که یک همچین جدولی رو توی sql باز کنید، 1 ثانیه هم طول نمیکشه
باز کردن جدول در SQL Server با باز کردن جدول از راه دور توسط کلاینت فرق میکنه.

merced
چهارشنبه 04 دی 1387, 18:49 عصر
اينجوري بازش كن :




ADODataSet1.ExecuteOptions := [eoAsyncFetch] ;

.....
procedure TForm1.ADODataSet1FetchProgress(DataSet: TCustomADODataSet; Progress, MaxProgress: Integer; var EventStatus: TEventStatus);
begin
Caption := 'Percent complete: ' +
IntToStr(Trunc(Progress / MaxProgress * 100)) + '%';
Application.ProcessMessages;
end;

hyl_piano
چهارشنبه 04 دی 1387, 20:22 عصر
أقاي كشاورز و أقاي merced (http://barnamenevis.org/forum/member.php?u=5388) متشكرم.
اما هنوز مشكل حل نشده. أقاي كشاورز شما فرض كنيد كه من برنامم تك كاربره هست و اصلا شبكه اي وجود نداره. حالا با هر شيئ كه ميشه اين مشكل رو حل كنيد. أقاي merced (http://barnamenevis.org/forum/member.php?u=5388) روش شما جواب نداد و همون 5 ثانيه طول ميكشه. HELP ME

vcldeveloper
پنج شنبه 05 دی 1387, 03:45 صبح
شما فرض كنيد كه من برنامم تك كاربره هست و اصلا شبكه اي وجود نداره.
حتی در اون صورت هم تاخیر را خواهید داشت، چون برای انتقال اطلاعات از SQL Server به برنامه شما، حتی اگر هر دو روی یک کامپیوتر هم باشند، از TCP/IP و پورت استفاده میشه.
من نمیدونم کاربر شما 200،000 رکورد رو با هم میخواد چیکار کنه؟!

hyl_piano
پنج شنبه 05 دی 1387, 07:00 صبح
من ميخوام كه جدول باز بشه و كاربر اطلاعات رو توي dbgrid ببينه .

vcldeveloper
پنج شنبه 05 دی 1387, 12:07 عصر
من ميخوام كه جدول باز بشه و كاربر اطلاعات رو توي dbgrid ببينه
کدوم کاربری میتونه 200 هزار رکورد رو با هم ببینه؟! برای همچین حجمی از داده، داده ها را بصورت صفحه به صفحه به کاربر نمایش میدن، نه یک دفعه 200 هزار رکورد رو بهش بدن.

hyl_piano
پنج شنبه 05 دی 1387, 23:01 عصر
مرسي كه جوابمو داديد.
اگه ميشه برام 1 مثال بزنيد كه صفحه به صفحه اطلاعات نمايش داده بشه.
من ميخوام كه 1 دونه edit بزارم كه اطلاعات جستجو بشه و نمايش هم داده بشه توي dbgrid

hyl_piano
جمعه 06 دی 1387, 12:04 عصر
كسي نيست كه كمك كنه؟

vcldeveloper
جمعه 06 دی 1387, 17:32 عصر
كسي نيست كه كمك كنه؟
قبلا درباره اینکه چطور میشه داده ها را صفحه به صفحه از بانک منتقل کرد، تاپیک های زیادی زده شده.

hyl_piano
جمعه 06 دی 1387, 18:52 عصر
میشه آدرس یکی از تاپیک ها رو بدین؟

vcldeveloper
شنبه 07 دی 1387, 01:38 صبح
http://www.barnamenevis.org/forum/showthread.php?t=79139
غیر از این، تاپیک های دیگه ایی هم در بخش SQL Server یا در همین بخش دلفی هست.