PDA

View Full Version : سوال: دیتاست جدید با قابلیت باز شدن در ترد جداگانه



ret_ie
سه شنبه 16 تیر 1394, 07:46 صبح
درود و ادب خدمت تمامی دوستان و به خصوص اساتید ارجمند
من یک کامپوننت جدید توسعه دادم که از خانواده ADO مشتق شده و میتونه دیتاست رو هم به طریق معمول خودش (متد Open) و هم از طریق یک Thread جداگانه باز بکنه (متد OpenInThread) تا Thread اصلی برنامه قفل نشه.
مشکلی که دارم، این کامپوننت بعضی جاها درست کار میکنه ولی بعضی موارد نه. حتی تو همون برنامه که دفعه اول خطا داد، دفعه دوم و سوم درست کار میکنه. هنوز خودم هم نفهمیدم چی باعث میشه عملکردش به هم بریزه.
با توجه به اینکه کامپوننت بسیار مفیدی خواهد بود، ممنون میشم بنده رو همراهی کنید.

اگرچه حکیم فردوسی میگه: به دشت آهوی ناگرفته مبخش! با این حال قول میدم به محض رفع باگهای این کامپوننت اون رو در اختیار دوستان قرار بدم.

یوسف زالی
سه شنبه 16 تیر 1394, 09:37 صبح
سلام.
بسیار کار خوبی می کنید، کامپوننت شما رو ندیدم اما کامپوننت مشابهی برای جایی نوشته بودم، که همین کار رو می کرد و ترد هم نیاز نداشت.
توضیح مختصری در مورد روش کارتون بدید.

ret_ie
سه شنبه 16 تیر 1394, 09:55 صبح
ممنون از توجه مدیر محترم بخش.
کامپوننت رو پیوست کردم.
من یک کلاس از TThread مشتق کردم (اسمشو بزاریم TretADOThread) و در داخل کلاس TretADODataset وقتی متد OpenInThread صدا زده میشه میام و یک Instance از TretADOThread میسازم و توسط یک SubComponent از نوع ADOCOnnection میام و کانکش دیتاست رو مستقل میکنم تا تداخلی با سایر کامپوننت ها نداشته باشه. سپس تو Instance ساخته شده از ترد، متد Open رو صدا می زنم و البته قبلش CoInitialize و بعدش هم CoUnInitialize...
اما همونطوری که گفتم، حتی در یک برنامه، در باز و بسته کردن های متوالی عکس العمل های مختلف می بینم...
شما چطور بدون ترد جداگانه این کار رو کردید؟
در مورد روش من ایده ای دارید؟

یوسف زالی
سه شنبه 16 تیر 1394, 11:30 صبح
سر فرصت بررسی می کنم..

ret_ie
پنج شنبه 18 تیر 1394, 00:25 صبح
ممنون از اینکه وقت میزارید. اما مشتاقم بدونم روش شما چی بوده، ممکنه مختصر توضیحی بفرمایید؟

یوسف زالی
شنبه 20 تیر 1394, 10:55 صبح
با استفاده از خواص execute options اشیای دیتاست در ADO این کار شدنی هست.
تست کنید دستتون میاد.

ret_ie
دوشنبه 22 تیر 1394, 13:45 عصر
سلام و ممنون از همراهیتون. من اینو چند سال قبل تست کرده بودم. ولی فرقی در نتیجه ندیدم. یعنی همچنان جداول یکی یکی و پشت هم باز میشدند.
شما از اون چهار تا آپشن eoExecNonBlocking و ... کدومهاشون رو فعال کرده بودید؟ هر چهارتا؟ یا فقط یکی؟