View Full Version : تفاوت رويداد active با create
mandana2010
پنج شنبه 04 مهر 1387, 12:05 عصر
با سلام
مي خواستم بدونم تفاوت رويداد active يك فرم با رويداد create اون چيه و اينكه open كردن جداولمون رو بايد روي رويداد onactive فرم انجام بديم يا oncreate
hedi
پنج شنبه 04 مهر 1387, 12:17 عصر
با سلام به دوست گرامی
رویداد Active همان طوری که از اسم آن معلوم است تا زمانی که برنامه شما در حافظه است و کارمی کند فعال است یعنی هر کدی در آن بنویسی همیشه آن کد در حال اجرا است البته اجرای آن منوط به دستوراتی است که شما در این رویداد می نویسید اما رویداد Oncreate تنها زمانی که می خواهد برای اولین بار در حافظه قرار بگیرد دستورات داخل آن اجرا می شود مثلا اگز شما یک برنامه داشته باشید که در داخل آن دو فرم دارد و با اجرای برنامه فرم اول در حافظه قرار بگیرد و بعد بخواهید از فرم اول فرم دوم را برای اولین بار صدا بزنید رویداد Oncreate فرم دوم اجرا می شود و چنانچه فرم دوم را ببندید و مجددا فرم دوم را باز کنید آن رویداد اجرا نخواهد شد چون که یک بار Create شده و در حافظه قرار گرفته است.امیدوارم مطالب تاحدودی بدرد شما خورده باشد.
التماس دعا
Hsimple11
پنج شنبه 04 مهر 1387, 21:07 عصر
مثلا اگز شما یک برنامه داشته باشید که در داخل آن دو فرم دارد و با اجرای برنامه فرم اول در حافظه قرار بگیرد و بعد بخواهید از فرم اول فرم دوم را برای اولین بار صدا بزنید رویداد Oncreate فرم دوم اجرا می شود و چنانچه فرم دوم را ببندید و مجددا فرم دوم را باز کنید آن رویداد اجرا نخواهد شد چون که یک بار Create شده و در حافظه قرار گرفته است.
بله. ولی این در صورتی درست است که فرمهای شما Auto-Create باشند. در واقع هر زمانی که یک فرم ساخته (Create) می شود (که بصورت پیش فرض تمام فرم های شما بصورت اتوماتیک ساخته می شوند) رویداد OnCreate فراخوانده می شود. اما رویداد OnActivate زمانی فراخوانده می شود که فرم شما فعال شود. یعنی فرمی که ساخته شده، فرم فعال شما قرار گیرد. مثلا با کلیک کردن بر روی آن یا با متدهایی مثل SetActiveWindow و ...
ghabil
جمعه 05 مهر 1387, 01:39 صبح
با سلام به دوست گرامی
رویداد Active همان طوری که از اسم آن معلوم است تا زمانی که برنامه شما در حافظه است و کارمی کند فعال است یعنی هر کدی در آن بنویسی همیشه آن کد در حال اجرا است البته اجرای آن منوط به دستوراتی است که شما در این رویداد می نویسید
درست نیست ، رویداد OnActive زمانی فعال میشود که فرم شما فرم Active ویندوز بشه و فقط همون لحظه ای که اکتیو میشه اجرا میشه ، مثلا ممکنه شما همینطور یکه برنامتون بالا هست برید یک برنامه دیگه رو اجرا کنید(یا روی فرم دیگری از برنامه خودتون کلیک کنید و اون فرم رو فعال کنید) ، بعد که دوباره بر میگردید سراغ برنامتون و فرمتون دوباره اکتیو میشه دوباره این کد اجرا میشه ! نه اینکه تا زمانی که برنامه در حال اجراست کدش هم اجرا بشه !!
چنانچه فرم دوم را ببندید و مجددا فرم دوم را باز کنید آن رویداد اجرا نخواهد شد چون که یک بار Create شده و در حافظه قرار گرفته است.امیدوارم مطالب تاحدودی بدرد شما خورده باشد.
التماس دعا
این هم همیشه درست نیست در زمانیکه فرم با اکشن HIDE بسته شود درسته.
اما نکته مهم این هست که زمان باز کردن جداول لزوما هیچ یک از این دو زمان نیست، در یک برنامه خوب جداول زمانی که به اطلاعاتشون نیاز هست باز میشوند و زمانی که نیازی نیست بسته میشوند، اینکه مثلا شما جداولتون رو روی OnCreate فرمها باز کنید و همه فرمهاتون هم AUTOCREATE باشند به این معنیه که تمامی اطلاعات برنامه رو دارید در لحظه اول اجرا لود میکنید هم روند بالا اومدن برنامه کند میشه هم حافظه زیادی اشغال میکنه در حالیکه ممکنه به این اطلاعات اصلا هیچ وقت حتی مراجعه نشه!
اگر پروژه ساده یا امتحانی مینویسید زیاد دقت به این مسائل در این سطح مهم نیست ولی متاسفانه پروژه های حرفه ای زیادی دیدم که به این مسائل دقت نکردند و وقتی حجم اطلاعات رفته بالا با مشکلات جدی برخورد کردند....
mandana2010
دوشنبه 08 مهر 1387, 11:39 صبح
اتفاقا هدف من هم براي پروژه هاي كاربردي بود نه امتحاني و دانشگاهي چون در حال حاضر هم برنامه ايي دارم كه وقتي حجم اطلاعاتش خيلي بالا مي ره كند مي شه و مي خوام اين مشكل رو حل كنم
mandana2010
یک شنبه 21 مهر 1387, 13:05 عصر
درست نیست ، رویداد OnActive زمانی فعال میشود که فرم شما فرم Active ویندوز بشه و فقط همون لحظه ای که اکتیو میشه اجرا میشه ، مثلا ممکنه شما همینطور یکه برنامتون بالا هست برید یک برنامه دیگه رو اجرا کنید(یا روی فرم دیگری از برنامه خودتون کلیک کنید و اون فرم رو فعال کنید) ، بعد که دوباره بر میگردید سراغ برنامتون و فرمتون دوباره اکتیو میشه دوباره این کد اجرا میشه ! نه اینکه تا زمانی که برنامه در حال اجراست کدش هم اجرا بشه !!
این هم همیشه درست نیست در زمانیکه فرم با اکشن HIDE بسته شود درسته.
اما نکته مهم این هست که زمان باز کردن جداول لزوما هیچ یک از این دو زمان نیست، در یک برنامه خوب جداول زمانی که به اطلاعاتشون نیاز هست باز میشوند و زمانی که نیازی نیست بسته میشوند، اینکه مثلا شما جداولتون رو روی OnCreate فرمها باز کنید و همه فرمهاتون هم AUTOCREATE باشند به این معنیه که تمامی اطلاعات برنامه رو دارید در لحظه اول اجرا لود میکنید هم روند بالا اومدن برنامه کند میشه هم حافظه زیادی اشغال میکنه در حالیکه ممکنه به این اطلاعات اصلا هیچ وقت حتی مراجعه نشه!
اگر پروژه ساده یا امتحانی مینویسید زیاد دقت به این مسائل در این سطح مهم نیست ولی متاسفانه پروژه های حرفه ای زیادی دیدم که به این مسائل دقت نکردند و وقتی حجم اطلاعات رفته بالا با مشکلات جدی برخورد کردند....
يعني منظورتون اين كه وقتي مي خوادم يك ركورد رو در بانك اطلاعاتيم ذخيره كنم روي دكمه ذخيره جدول رو باز كنم و انتهاي دستورات همون دكمه اون رو ببندم؟
و اگر از Datamodule استفاده كنم و جداولم رو اونجا قرار بدم جداول رو كجا Open و يا Close كنم.
ghabil
یک شنبه 21 مهر 1387, 17:17 عصر
ببین این کاملا بستشگی داره که سناریوت چیه ، یک زمانی هست برای درج اطلاعات نیاز هست که کاربر اطلاعات قبلی رو هم ببینه و مثلا میخوای کاربر بتونه توی دبیگیرید بین وسط اطلاعات یک سطر اضافه کنه خب ، در این شریاط میتونی در زمانی که فرم رو باز میکنی ، جدولت رو هم باز کنی و وقتی کار تموم شد و فرم رو بستی جدول رو هم ببندی.
اما خیلی وقتها هست که اصلا نیازی به دیدن سایر رکوردها نیست و فقط قرار هست یک رکورد ادیت بشه یا یک یا چند رکورد افزوده بشند، در این حالت لود کردن همه اطلاعات در هر زمانی که غیر efficientی هست ، میشه خیلی راحت بدون حتی لود کردن یک سطر اطلاعات اضافی با یک دستور Update یا Insert اطلاعات رو تعییر داد و هیچ دیتایی رو لود نکرد، حتی حداقل به کسانی که به دلیل بعضا موجه تنبلی حال استفاده از کامندهارو ندارند میشه پیشنهاد کرد اگر ادیت هست با تنظیم Where Clause فقط سطر مورد نظر رو لود کنند و اگر Insert هست با گذاشتن یک Where Clause همیشه نادرست ، مثلا Where 1>2 فقط MetaDataی جدول رو بخونند و هیچ اطلاعاتی رو لود نکنند و بعد از خود دستورات Insert دیتاست استفاده کنند.
در مجموع اینکه کی باید جداول رو باز کرد و چقدر از اطلاعات رو باید خوند بستگی به سناریو ما و کارهایی که باید انجام بدیم داره ، اما باید یادمون باشه ، زمانی که جدولی رو باز میکیم به اندازه اون جدول داریم بار روی شبکه (اگر برنامه تحت شبکه باشه) و بعد هم حافظه کامپیوتر میزاریم و این مشکل با زیاد شدن اطلاعات روز به روز بیشتر میشه....
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.