PDA

View Full Version : سوال درخصوص Active کردن بانک - همه پرسی



Mah6447
شنبه 24 شهریور 1386, 13:38 عصر
سلام به همگی دوستان
سوالی دارم که مطمئن هستم مشکل اکثر دوستان می تواند باشد.
بانک اطلاعاتی دارم که دارای چند Table است و در هر Table تعداد 70000 هزار رکورد است
و فیلدهای آن نیز زیاد است و در زمان اجرای برنامه زیادی صرف ACtive شدن بانک می شود
اگر از ابتدا ، آن Table را اکتیو کنم ، زمان اجرای اولیه برنامه کند می شود و اگر پس از اجرای
اولیه آن را Active کنم - اجرای اولیه با سرعت زیاد اجرا می شود ولی بالاخره که باید Table را
Active کنم مطمئنا پس از اجرای اولیه بهتر است ولی چه راهی وجود دارد تا از حافظه مجازی
جهت Active کردن Table استفاده کرد تا زمان اتصال به table کمتری مصرف شود.

لطفا راهنمایی کنید؟؟؟؟

ghabil
شنبه 24 شهریور 1386, 14:11 عصر
Table ماله برنامه های کوچیک و بیشتر برای یادگیریه نه برای انجام یک برنامه درست حسابی ، هیچ وقت کل اطلاعات رو در حافظه لود نکنید ، همیشه با استفاده از Query فقط اون بخشی از اطلاعات رو که لازم دارید از دیتابیس بگیرید.
متاسفانه این ساختار Table در دلفی خیلی از برنامه نویسان دلفی رو با این مشکل مواجه کرده که فکر میکنند همیشه باید همه اطلاعات رو از دیتابیس گرفته باشند و در حافظه داشته باشند.
و حتی حالتی که دیگه به مسخره اسمش شده Select * بعد Locate واقعا اپیدمی هست ، که مثلا وقتی لازم هست مقادیر یک رکورد خوانده بشه اول همه مقادیر رو میخونند بعد روی اونها Locate میکنند بجای اینکه از اول با استفاده از یک Where فقط رکورد مورد نظر رو بیاورند!

Will_Smith
شنبه 24 شهریور 1386, 14:22 عصر
در ادامه صحبت استاد عزیز آقای کوشا
بجای استفاده از Table یا ADOTable از Query یا ADOQuery استفاده کنید
و قبل از Active کردن در دستورات SQL تنها قیلدهایی رو که در Query لازم دارید در دستور SELECT وارد کنید

مثال
SELECT f_name,l_name,sex:لبخند:,old,location FROM persons
بجای
SELECT * FROM persons

و بعد در زمان اجرا Active رو Ture کنی

Mah6447
شنبه 24 شهریور 1386, 14:41 عصر
جناب آقای قابیل اگر فقط بخشی از اطلاعات را لود کنیم آنگاه در زمان اجرای برنامه و استفاده از Table و یا جستجوی اطلاعات به مشکلی برنمی خوریم؟

Mah6447
شنبه 24 شهریور 1386, 14:55 عصر
فرض کنیم از AdoQuery استفاده کردن و در ابتدا به صورت دستور زیر فقط 20 رکورد را برای Active
اولیه استفاده کنیم
Select Top 10 * From Table1 آنگاه در اجرای برنامه در زمان جستجو می توان آن را کنترل کرد
ولی در زمان نمایش اطلاعات در DBGrid و مشاهده همه اطلاعات به صورت Page Daown و Up
مشکلی بوجود نخواهد آمد؟؟

Will_Smith
شنبه 24 شهریور 1386, 15:00 عصر
جناب آقای قابیل اگر فقط بخشی از اطلاعات را لود کنیم آنگاه در زمان اجرای برنامه و استفاده از Table و یا جستجوی اطلاعات به مشکلی برنمی خوریم؟
دوست من درسته که این سوال رو از من نکردی ولی من طاقت ندارم منتظر آقای کوشا بشینم
ببین شما لازم نیست فیلدهایی رو که در WHERE میان رو در SELECT بنویسی دستور زیر رو در نظر داشته باش


SELECT f_name,l_name FROM persons WHERE sex='مرد' ORDER BY l_anme

توی این دستور فیلد sex جزوری از Query نیست و در نتایج حاصل هم نخواهد آمد ولی در جستجو اعمال میشود

Will_Smith
شنبه 24 شهریور 1386, 15:05 عصر
فرض کنیم از AdoQuery استفاده کردن و در ابتدا به صورت دستور زیر فقط 20 رکورد را برای Active
اولیه استفاده کنیم
Select Top 10 * From Table1 آنگاه در اجرای برنامه در زمان جستجو می توان آن را کنترل کرد
ولی در زمان نمایش اطلاعات در DBGrid و مشاهده همه اطلاعات به صورت Page Daown و Up
مشکلی بوجود نخواهد آمد؟؟
استفاده از SELECT * اشتباه محضه مگر در شزایطی که واقعا همه فیلد ها رو لازم داشته باشی برای افزایش کارایی حتما فیلد ها رو محدود کن
البته اگر فقط 10 تا 10 تا یا 20 تا 20 تا رکورد ها رو نمایش بدی کارایی بهتر میشه ولی برنامه نویسی حتما باید اصولی باشه وگرنه مطمئن باش که بعدا به شمکل بر خواهی خورد

ghabil
یک شنبه 25 شهریور 1386, 00:06 صبح
ببینید نکته اینجاست که سناریویی که نیاز داشته باشه مثلا 5000 تا رکورد رو همزمان به کاربر توی یک گرید نشون بده یا وجود نداره یا احتمالا سناریوی غلطیه ، چون کاربر که واقعا نمیتونه بینه 5000 تا یا بیشتر رکورد بگرده و بعیده که نیاز داشته باشه هر 5000 خط هم باشند. معمولا کاربر به تعداد خاصی از رکوردها نیاز داره که این وظیفه یک برنامه نویسه خوبه که بتونه شرایطی رو در برنامش فراهم کنه که رکوردهایی که واقعا لازم هستند لود بشوند اینطوری هم کاربر رو سردرگم نمیکنه ، هم حجم زیادی اطلاعات رو در حافظه لود نمیکنه (اگر هم برنامه تحت شبکه باشه روی شبکه هم بار نمیزاره) اما بعضا دیده میشه که برنامه نویسها برای راحتی خودشون این سختی رو به کاربر و محیط تحمیل میکنند.
خلاصه که هرچی بتونید شرایطی رو فراهم کنید که کاربر با حجم اطلاعات کمتر اما دقیقتری روبرو بشه و به راحترین راه این امکان رو داشته باشه که شرایط رو عوض کنه و رکوردهای دیگه رو هم در موقع لزوم بدست بیاره بیشتر از یک کدنویس دور میشید و به یک برنامه نویس حرفه ای نزدیک میشید و بنظر من که اینه که ارزش داره .
با اینکه همش شد نصیحت این هم نصحیت آخر اما خیلی مهم برای کسانی که میخوان پیشرفت کنند نه فقط کد بنویسند : وقتی که تصمیم گرفتید چی میخواید بنویسید قبل از اینکه بشنید پشت کی بورد یکبار دیگه مسئله رو برسی کنید و سعی کنید یک راه بهتر از اون چیزی که اول به ذهنتون رسیده پیدا کنید، شک نکنید که این راه وجود داره و اگر این روش رو ادامه بدید بعد از مدت کوتاهی میبینید سطح و کلاس برنامه نویسیتون عوض میشه....

Will_Smith
یک شنبه 25 شهریور 1386, 00:19 صبح
آقای کوشا علکی نیست که بهت ایمان دارم استاد خودمی:قلب:

Mah6447
یک شنبه 25 شهریور 1386, 20:35 عصر
تشکر جناب آقای قابیل
پس بهترین راه این است که به جای Table از Query استفاده کرد و در DBGrid فقط بخشی از اطلاعات که لازم است را فیلتر کنم و در صورت جستجو توسط کاربر موارد مشابه را قابل نمایش
کنم احتمالا در این روش کار بهتر پیش می رود .

s-samadi
یک شنبه 25 شهریور 1386, 20:52 عصر
JADVALE ACCESS CHE JOORI ACTIV MISHE

nilufari
چهارشنبه 28 شهریور 1386, 11:46 صبح
قبل از طرح این نوع سوالات لطفا تاپیکهای قبلی رو جستجو کنید

این مسئله بارها مطرح شده است !