PDA

View Full Version : مشکل با Data Control ها



شیما.م
جمعه 22 فروردین 1382, 19:35 عصر
سلام عزیزان
البته این سوال رو قبلا مطرح کردم ولی جواب نگرفتم
من وقتی می خوام فرم دیگه ای رو فعال کنم و فرم اول رو می بندم هنگام باز شدن فرم دوم پارامترهای اسم جدول رو تغییر می دم موقع نشون دادن فرم دوم پیام خطا میده که دیتا کنترلهای فرم اول فیلدهای خودشون رو پیدا نمیکنند
فقط موقعی که بعد از بستن فرم اول اون رو تخریب می کنم پیام خطا رو نمیده اما چون فرمها خیلی سنگین هستند این کار برنامه رو خیلی کند می کنه
در ضمن از کنترلهای ADO استفاده می کنم

دوستان عزیز یه نیم نگاهی هم به مشکل بنده کنن
مرسی

مهدی کرامتی
جمعه 22 فروردین 1382, 20:22 عصر
میتونی سورس کدی که باهاش اینکارو میکنی اینجا paste کنی؟

amirrf
یک شنبه 24 فروردین 1382, 12:30 عصر
سلام،

از یک کامپوننت دیتاست بطور مشترک براى چند جدول و چند فرم استفاده مىکنید؟!!

شیما.م
دوشنبه 25 فروردین 1382, 01:31 صبح
با سلام
ببخشید که یه خورده دیر جواب میدم چون برای سیستم مشکل پیش اومد.
در ابتدا باتشکر از جناب دلفی اسیستن عزیز سورس کد اون خیلی زیاده و اگر بعدا لازم شد حتما این کار رو خواهم کرد
اما در جواب امیر آقا که من از یک ای دی او تیبل در چند فرم و برای چند تیبل استفاده می کنم
به نظر من کدی که برای این کار نوشتم ایرادی نداره اما باید من از چیزی بی اطلاع باشم که اون رو رعایت نمی کنم .
خیلی ممنون

Vahid_Nasiri
دوشنبه 25 فروردین 1382, 01:37 صبح
سلام،

از یک کامپوننت دیتاست بطور مشترک براى چند جدول و چند فرم استفاده مبکنید؟!!

حدس امیر خان درسته :wink: :lol: 8)
کمی دست و دلبازی در استفاده از کنترل ها و همچنین آزاد کردن ریسورس ها مشکل را حل می کند. :twisted:

شیما.م
دوشنبه 25 فروردین 1382, 03:47 صبح
باز هم سلام
جناب نصیری فکر می کنم که همچین یه خورده اشتباه کردید
اولا که من در هر فرم یک دیتا سورس رو به یک ای دی او تیبل نسبت می دم و قابل ذکر هست که توی هر فرم من لا اقل چهار پنج تا تیبل رو مجبورم باز کنم و برخی فرمها هم به ده تا میرسه پس باید برنامه رو جمع و جور پیش ببرم
در ضمن فکر نمی کنم مشکل از اینجا ناشی شده باشه

amirrf
سه شنبه 26 فروردین 1382, 00:39 صبح
سلام،

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

اما روشی که به کار برده اید روش خوبى نیست، به این دلیل اصلى که زمان توسعه را بالا مىبرد چون نیازمند کدنویسى بیشتر است و در زمان طراحی نیز در هنگام کار روى هر فرم نیاز به تنظیم مجدد کامپوننت‌هاى مشترک دارید؛ و زمان توسعه پارامتر بسیار مهمى است. همچنین در زمان اجرا در هر بار تغییر نام جدول، زمانى صرف خواندن فوق داده هاى جدول و ساختن مجدد فیلدها خواهد شد. از طرفى این روش مانع از نمایش همزمان دو فرم که از کامپوننت‌هاى مشترک استفاده مى‌کنند مىشود و حتى نمىتوان دو نمونه از یک کلاس فرم ساخت.
این در حالى است که اگر از کامپوننت‌هاى مشترک استفاده نکنید، هر ADOTable در شرایطى که بسته باشد تنها در حدود 10 تا 20 کیلوبایت حافظه اشغال خواهد کرد، و مثلا برای 70 نمونه از آن حدود یک مگابایت مىشود، که قابل توجه نیست.
بهتر است براى هر جدول و هر فرم از یک کامپوننت مجزا استفاده کنید و در هنگام نمایش هر فرم DataSetهاى آن را باز کنید و در هنگام پنهان شدن فرم همه آنها را ببندید.


p.s براى انگلیسى نوشتن Scroll Lock را بزنید.