PDA

نسخه کامل مشاهده نسخه کامل : خواندن اطلاعات به صورت مناسب و با سرعت بالا



Masood_Heidarnia
25-03-2008, 21:15
با سلام
باید دو تا برنامه بنویسم که یکی بعنوان نرم افزار سرور با امکان اضافه، ویرایش، حذف و ... با دیتابیس SQL است و بصورت اتوماتیک اطلاعات دیتابیس خودش

رو به DBISAM تبدیل میکنه و نرم افزار دوم یا کلاینت فقط برای نمایش اطلاعات بکار میرود و دیتابیس آن DBISAM است. حداقل 6 جدول و تعداد رکوردها هم

زیاد است. و بر روی همه فیلدها هم جستجو انجام میشه، هم فیلد تاریخ بصورت String فارسی، هم عددی و هم String.
برای خواندن اطلاعات و جستجو از Query استفاده میکنم و در زمان جستجو یا نمایش اطلاعات و با نوشتن یه Select جدید اطلاعات را از بانک اطلاعاتی

نمایش میدهم. هم با SQL و هم با DBISAM
یه مشکلی که هست اینه که برای بالا بردن سرعت خواندن اطلاعات از چه روشی استفاده کنم؟ البته سرعت در نرم افزار نسخه نمایشی (کلاینت یا نرم افزار دوم) خیلی

اهمیت بیشتری دارد.
این روش واکشی اطلاعات در هر دفعه بهتر یا اینکه مثلا همه اطلاعات را در ابتدای اجرای برنامه لوود کرده و سپس از این اطلاعات استفاده کرد؟
اگر بخواهیم همه اطلاعات را در ابتدای برنامه در یه چیزی لوود کنیم اون چیز چی میتونه باشه؟
آیا میشه با نوشتن یه Select یک سری اطلاعات را از آن چیز به یک AdoQuery یا کوری منتقل کرد؟
لطفا راهنمایی بفرمایید.
با شتکر

F A R H A D
26-03-2008, 07:57
این روش واکشی اطلاعات در هر دفعه بهتر یا اینکه مثلا همه اطلاعات را در ابتدای اجرای برنامه لوود کرده و سپس از این اطلاعات استفاده کرد؟
اگر بخواهیم همه اطلاعات را در ابتدای برنامه در یه چیزی لوود کنیم اون چیز چی میتونه باشه؟
سلام. خوش آمديد
مطمئنا اگر اطلاعات در بازه زماني كم، تغيير نمي كنه بهتره كه تمام اطلاعات رو يك بار در كلاينت ها بارگذاري كنيد. براي اين كار هم بايد از جزء ساخت ClientDataSet در برگه data access استفاده كنيد.

Masood_Heidarnia
26-03-2008, 12:09
با سلام
نسخه کلاینت فقط یک نسخه است و فقط روی یک کامپیوتر مشخص اجرا میشود و فقط قابل نمایش است و اطلاعات آن تغییری نمیکند.
آیا با Dbisam میتونم ازش استفاده کنم؟
با تشکر

F A R H A D
26-03-2008, 13:16
شما ميتونيد با هر ابزار دلخواهي اين كار رو انجام بديد اما اگر سرعت مهمه، به نظر من از ClientDatsSet استفاده كنيد

Masood_Heidarnia
27-03-2008, 07:22
با سلام
برای کار کردن با یک دیتابیس خیلی بزرگ و استفاده از ClientDataSet
یه پروژه جدید ایجاد کردم و کارهای زیر را انجام دادم:
ADOConnection1 را به دیتابیس وصل کردم
یه DataSet Provider بذار رو فرمت
خاصیت Dataset از DataSetProvider رو بذار Query1
خاصیت ProviderName از ClientDataSet رو بذار DataSetProvider1
خاصیت DataSet از DataSource رو بذار ClientDataSet1
یه دیتا سورس هم به ClientDataSet وصل کردم و پس از حدود چند دقیقه تمام اطلاعات را بدرستی در ClientDataSet لوود و در dbgrid1 نمایش میدهد.

حالا میخوام یه AdoQuery با یه select جدید یک سری اطلاعات را از این ClientDataSet بر اساس کوری جدید خوانده و در یک dbgrid2 جدید نمایش داده

شود.
حالا این AdoQuery که حاوی کوری جدید است را به کجا وصل کنم؟
نمیخوام اطلاعات را مجدد از دیتابیس بخونه.
با تشکر

F A R H A D
29-03-2008, 08:42
بهتر هست كه به جاي انتقال تمام اطلاعات به كلاينتها فقط اطلاعات مورد نياز رو از ديتابيس بخونيد تا درخواست هاي شما با سرعت بهتري صورت بگيره.

نمیخوام اطلاعات را مجدد از دیتابیس بخونه.
بايد از filter استفاده كنيد