PDA

View Full Version : کار با فرمها و فیلدهای متعدد...



Hsimple11
چهارشنبه 02 مرداد 1387, 01:57 صبح
با سلام؛

از حضور همه دو سوال داشتم :

1- من در برنامه خود یک فرم اصلی دارم و تعداد زیادی فرم دیگر که تنها فرم اصلی Auto-Create است. در فرم اصلی تعدادی دکمه دارم که فرمهای مذکور را می سازند. این فرمها هیچ Border ای ندارند و در میانه فرم اصلی ظاهر می شوند و کاربر نمیتواند آنها را ببندد. حالا به نظر شما بهترین راه برای Free کردن فرمها چیست؟ از اونجا که فرمها گزینه ای برای کاربر به منظور بسته شدن ندارند و قرار هم نیست دکمه ای با این عنوان بر رویشان باشد (چون ممکن است یک فرم قرار باشد در روز تماما استفاده شود و باز بماند)، من در Onclick هر دکمه علاوه بر ساخته شدن فرم مربوط به همان دکمه، Assign میکنم برای همه فرم ها که اگر ساخته شده اند FreeAndNil شوند.

به نظر شما این راه مناسبی است؟
اگر نه راه حل بهتر کدامست؟

2- در این برنامه برای هر فرد(یکی از فیلدها) تعداد زیادی فیلد نیاز است(SQL SERVER--->ADO). مثلا برای هر فرد چیزی حدود 50 فیلد. اما این فیلدها قرار نیست همیشه همه پر شوند و بعلاوه در قسمتهای مختلف و در فرمهای مختلف پر میشوند و بنابراین در جداول متعددی قرار دارند. و فیلد مشترک این جداول مثلا نام هر فرد و یک کد است.
در زمان نیاز به گرفتن گزارش یا در هرجایی که نیاز به فیلدهایی از جداول دیگر داریم و میخواهیم JOIN کنیم این ساختن جدوال Temp برای JOIN سرعت برنامه را پایین نمی آورد؟ یا اصلا از اونجا که Table تمام فیلدها را Load میکند بهتر است یک جدول کل باشد و در فرم بسته به نیاز Query بگیریم؟
و اینکه این جداول هرکدام در یک فرم قرار دارند که تعدادی اصلا Create نشده اند برای پیش نیامدن اختلال در DataSet ها بهترین راه چیست؟ DataSet های همه در یک DataModule باشد؟؟

چقدر سوال شد! ببخشید...
یک دنیا ممنونم...

SYNDROME
چهارشنبه 02 مرداد 1387, 07:51 صبح
برای Free کردن فرمها بهتر است یک آرایه از نوع Boolean تعریف کنید که هر فرمی باز شد متغییر مربوط به فرم مورد نظر را برابر True بگیرید و در پایان با پیمایش آرایه تعداد فرمهای باز به دست می آید.
فیلدها را گروه بندی کنید و سپس هر گروه را در یک جدول قرار دهید.
فیلدهایی که زیاد ممکن است مورد گزارش قرار گیرند را سعی کنید در یک جدول قرار دهید.
در زمان گزارش گیری فکر نکنم اگر یک Join داشته باشید بخواهد زیاد برنامه را کند کند.
در ضمن اگر کمی هم کند شود بهتر است از اینکه تعداد زیادی فیلد Null در بانک ذخیره کنید.
ولی همه این نکات بستگی به نظر شما دارد.
موفق باشید

Hsimple11
چهارشنبه 02 مرداد 1387, 11:53 صبح
ممنونم یعنی استفاده از یک آرایه با کاری من کردم فرق میکند؟ منظورم این است که سرعت تغییر می کند؟

در مورد سوال دومم فکر کنم کامل جواب داده نشد.

باز هم ممنون...

vcldeveloper
چهارشنبه 02 مرداد 1387, 12:25 عصر
من متوجه نشدم که فرم های شما چیکار می کنند. اگر کاربر نمی تونه اونها رو ببنده، پس چیکار می کنه؟ چندتا فرم را به کاربر نشون میدن و همینطوری روی صفحه باقی می مانند؟! اگر نحوه کارشون اینطوری هست، چرا از Frame استفاده نکردید؟
اگر بسته میشند، ولی بدون کنترل کاربر و مشکلتون اینکه که می خواید مطمئن بشید که فرم ها همگی به درستی Free میشند، می تونید از TObjectList در یونیت Contnrs استفاده کنید، چون علاوه بر اینکه لیست فرم ها را نگهداری میکنه، آزاد شدن فرم ها را هم میتونه کنترل کنه. مثلا میتونه خودش بطور خودکار همه اشیاء لیست را Free کند.

سوال دوم رو هم من متوجه نمیشم، چون اصلا نمی دونم جداول شما چطوری طراحی شدند.

Hsimple11
چهارشنبه 02 مرداد 1387, 12:53 عصر
من متوجه نشدم که فرم های شما چیکار می کنند. اگر کاربر نمی تونه اونها رو ببنده، پس چیکار می کنه؟ چندتا فرم را به کاربر نشون میدن و همینطوری روی صفحه باقی می مانند؟! اگر نحوه کارشون اینطوری هست، چرا از Frame استفاده نکردید؟

نه ، در واقع تمام برنامه را همین فرم ها می سازند و فرم اصلی فقط یک حاشیه است با تعدادی دکمه که این دکمه ها فرمهای دیگر را باز میکنند. مثل خیلی از برنامه های مدیریتی که دیده اید مثل هلو و ... که فرم اصلی یک نوار در سمت راست صفحه است و فرمهای دیگر در سمت چپ Top و Left شون صفر میشه و Create میشن. فقط فرق برنامه من اینه که فرم اصلی تمام صفحه رو میگیره و فرمهای دیگه وسط اون اجرا میشن. و در مورد بسته شدنم چون جزئی از فرم اصلی دیده میشوند Border ای ندارند و در واقع با دیگر فرمها OverLap میشوند اگر مثلا یک دکمه دیگه کلیک شد فرم قبلی را میپوشاند و قبلی Hide میشود. من هم در مورد همین Free کردن مشکل داشتم مثلا در موقع Hide فرم را Free کنی.
بنظر شما اساسا روشم رو عوض کنم؟
بنظر شما بهتره از Frame استفاده کنم؟



سوال دوم رو هم من متوجه نمیشم، چون اصلا نمی دونم جداول شما چطوری طراحی شدند.
من فقط سوالم این بود که چون چندین جدول دارم و میخواهم گاهی از بین آنها JOIN کنم این ساخت جداول Temp برای JOIN سرعت را پایین نمی آورد؟
و اینکه بهترین راه استفاده از DataSet های متععد قرار دادن همه آنها بصورت یکجا در یک DataModule است؟

با تشکر...

vcldeveloper
چهارشنبه 02 مرداد 1387, 18:41 عصر
بنظر شما بهتره از Frame استفاده کنم؟
به نظر من، بله

Hsimple11
چهارشنبه 02 مرداد 1387, 19:06 عصر
ممنونم
یعنی تمام برنامه را با Frame ها کارکنم؟ من تا حالا زیاد با Frame ها کار نکردم با کار طولانی مشکلی ندارند؟ آنها را هم Free کنم دیگه نه؟

vcldeveloper
پنج شنبه 03 مرداد 1387, 02:17 صبح
آنها را هم Free کنم دیگه نه؟
بله. گفتم که می تونید برای نگهداری همچین اشیائی از TObjectList استفاده کنید. کار با Frame شبیه کار با فرم هست.