PDA

View Full Version : Fetch کردن تدریجی رکوردها



حمیدرضاصادقیان
شنبه 12 آبان 1386, 14:43 عصر
سلام.من رکوردها را به صورت تدریجی یعنی صفحه به صفحه میخونم و به کاربر نمایش میدم به دلیل حجم زیاد.حالا مشکل اینه که وقتی من به طور مثال 50 رکورد اول رو select میکنم و نمایش میدم هنگامی که کاربر سورتی رو انجام میده فقط روی این 50 رکورده.و هنگامی که صفحه بعد نمایش داده میشه سورت معنی درستی نداره.زیرا اصلا سورت نیست.چون ما فقط روی 50 رکورد اول سورت میکنیم .در صورتی که سورت باید روی کل جدول باشه.البته این نکته رو هم بگم من از sort خود adoquery استفاده کردم نه به وسیله order by. راهی که به ذهن خودم رسید این بود که وقتی کاربر سورت رو تغییر میده من دوباره همان 50 رکورد رو بخونم ولی براساس سورتی که کاربر درخواست کرده.میخواستم ببینم آیا این روش درسته یا باید کار دیگری انجام داد.
با تشکر

Saeid59_m
یک شنبه 13 آبان 1386, 07:41 صبح
سلام دوست عزیز
شدیداً پیشنهاد می کنم از دستورات SQL‌ استفاده کنید . مطمئن باشید به وضوح نتیجه بهتر رو می بینید .

حمیدرضاصادقیان
یک شنبه 13 آبان 1386, 12:59 عصر
ممنون.اخه وقتی سورت تغییر میکند مشکل اینه که فیلدی به نام ردیف ندارم که بتونم روی اون رکوردها رو صفحه به صفحه بیارم.به طور مثال فرض کنید فیلد ردیف هم دارم.باز با تغییر سورت رکوردها دیگه در صفحه صفحه لود شدن اطلاعات به مشکل برخواهم خورد.

Saeid59_m
یک شنبه 13 آبان 1386, 13:54 عصر
فرض کنید فیلد ردیف از نوع AutoNumber است .
می تونید با یک دستور Select ردیفهای 1.. 10 رو برای صفحه 1 ، 11 تا 20 رو برای صفحه 2 و ...
لود کنید .
البته هر صفحه جداگانه سورت می شه . حال برای حل این مشکل می توانید این Select رو از توی یه دستور Select دیگه فراخونی کنید . مثلاً


ُSelect *
FROM (SELECT * FROM YourDatabase ORDER BY Name)
WHERE (ORDER>=1) and (ORDER<=10)

حمیدرضاصادقیان
یک شنبه 13 آبان 1386, 15:46 عصر
ممنون.ببینید الان مشکل اینه که اصلا فیلدی به نام ردیف ندارم و براساس کدکالا دارم صفحه به صفحه کالاها را لود میکنم.حالا اگر سورت تغییر کند دیگه نمیتونم صفحه به صفحه لود کنم.مشکل اینجاست.در ضمن من نمیخوام هر صفحه فقط خودش سورت بشه.وقتی کاربر سورتی رو انتخاب میکنه میخواد تمامی رکوردهاش سورت بشه و باز صفحه به صفحه لود بشه.

Saeid59_m
دوشنبه 14 آبان 1386, 09:34 صبح
این کار توی همین سایت انجام شده . برای خودم هم سواله که چطور همیشه اطلاعات صفحه به صفحه نشون میده . حتی توی جستجو .
از مدیران سایت خواهش می کنم کد حل این مشکل رو به ما هم یاد بدن

Mshafiy
دوشنبه 14 آبان 1386, 11:57 صبح
من برای این کار از dbexpressاستفاده میکنم چون میتونید Pocket Size رو تنظیم کنید .
(مثلا برای 20 ردیف )سرعتش هم عالیه.

Saeid59_m
دوشنبه 14 آبان 1386, 14:41 عصر
توی dbexpress که از db grid نمی شه استفاده کرد پس چکار باید کرد .

vcldeveloper
سه شنبه 15 آبان 1386, 02:58 صبح
توی dbexpress که از db grid نمی شه استفاده کرد پس چکار باید کرد .
از ترکیب ClientDataSet و DataSetProvider استفاده میشه که بشه از Grid هم استفاده کرد.

حمیدرضاصادقیان
سه شنبه 15 آبان 1386, 17:13 عصر
ممنون از دوستان.حالا این مشکل رو با ado چطور میشه حل کرد.آیا برای اینکار راهی داره؟
مشکل اصلی هم زمانی ایجاد میشه که کاربر بخواد دیتا را سورت کنه.تا وقتی سورت نکنه میشه اطلاعات رو بهش نمایش داد ولی وقتی سورت میکنه دیگه همه چیز بهم میریزه.

Mshafiy
چهارشنبه 16 آبان 1386, 12:25 عصر
فرقی نمیکنه مهم اینه که از ClientDataSet و DataSetProvider استفاده کنی و Pocket Size ClientDataSet رو تعداد رکورهات بدی که میخوای در هر بار Fetch بهت نشون دارد بشه

حمیدرضاصادقیان
چهارشنبه 16 آبان 1386, 13:45 عصر
یعنی مشکلی بوجود نمیاد از چند نوع ابزار برای ارتباط با sql استفاده میکنم؟

a_b_toops
چهارشنبه 16 آبان 1386, 21:22 عصر
اگر از ADOQuery1 استفاده می کنی خود این کامپانت ExecuteOptions در این قسمت گزینه eoAsyncFetchNonBlocking را True کن این کار باعث می شود اطلاعات به صورت تدریجی در ADOQuery لود شود مانند محیط خود Sql Server یا اکسس و این کار باعث می شود شما فرمانهای بعدی را بتوانید بعد از آپدیت کردن بانک با سرعت اجرا کنید و هیچ وقفه ای در اجرای آپدیت کردن به وجود نیاید

حمیدرضاصادقیان
جمعه 18 آبان 1386, 08:56 صبح
سلام.باتشکر .روشی که گفتین خوب بود ولی فکر کنم هنگامی که ما cache size رو معرفی میکنیم این تمام دیتا رو باز لود میکنه ولی در اندازه همون cache size یعنی در نهایت تمامی دیتای کاربر لود خواد شد.سرعت خیلی بالا میره ولی بازهم تمامی داده ها لود میشوند.

Mshafiy
شنبه 19 آبان 1386, 10:18 صبح
سلام من توی Fetch کردن مشکلی با سرعت ندارم .مشکل وقتی بیشتر میشه که رکورد هایی که خوندی قرار بشه تغییر داده بشن و Update بشن سرعت خیلی کند میشه .من تو برنامه خودم این جور کاری میخوام انجام بدم خیلی مشکل دارم .هم سرعت کند میشه .هم بعضی وقتها برنامه هنگ میکنه.