استفاده اشتراکى از کامپوننتهاى DataSet
سلام،
علت بروز مشکل این است که دیتاکنترلهاى فرم اول همچنان از طریق یک DataSource با کامپوننت دیتاست (مثلا ADOTable1) ارتباط دارند اما فیلدهایى که مىخواهند به آنها متصل باشند دیگر در دیتاست وجود ندارد به دلیل تغییرى که در جدول کامپوننت دیتاست ایجاد شده است.
راه حل این است که ارتباط دیتاکنترلها را با دیتاست قطع کنیم، این کار از طریق تغییر خصوصیت Enabled از DataSource واسطه به False امکانپذیر است، همچنین با خالى کردن خصوصیت DataSet از DataSource همان نتیجه گرفته می شود. بدیهى است در هنگام باز شدن مجدد هر فرم باید خصوصیت تغییر یافته از DataSource را تنظیم کنید.
اما روشی که به کار برده اید روش خوبى نیست، به این دلیل اصلى که زمان توسعه را بالا مىبرد چون نیازمند کدنویسى بیشتر است و در زمان طراحی نیز در هنگام کار روى هر فرم نیاز به تنظیم مجدد کامپوننتهاى مشترک دارید؛ و زمان توسعه پارامتر بسیار مهمى است. همچنین در زمان اجرا در هر بار تغییر نام جدول، زمانى صرف خواندن فوق داده هاى جدول و ساختن مجدد فیلدها خواهد شد. از طرفى این روش مانع از نمایش همزمان دو فرم که از کامپوننتهاى مشترک استفاده مىکنند مىشود و حتى نمىتوان دو نمونه از یک کلاس فرم ساخت.
این در حالى است که اگر از کامپوننتهاى مشترک استفاده نکنید، هر ADOTable در شرایطى که بسته باشد تنها در حدود 10 تا 20 کیلوبایت حافظه اشغال خواهد کرد، و مثلا برای 70 نمونه از آن حدود یک مگابایت مىشود، که قابل توجه نیست.
بهتر است براى هر جدول و هر فرم از یک کامپوننت مجزا استفاده کنید و در هنگام نمایش هر فرم DataSetهاى آن را باز کنید و در هنگام پنهان شدن فرم همه آنها را ببندید.
p.s براى انگلیسى نوشتن Scroll Lock را بزنید.