ورود

View Full Version : اجرای دستورات زمانبر



pi_plusplus
سه شنبه 20 فروردین 1387, 15:30 عصر
با سلام.
من می خوام توی برنامه VB.6 مثلا" اطلاعات یکی از جدولهای نسبتا" بزرگ بانک SQL رو Delete کنم اما با وجود اینکه دستور ساده Delete در محیط Query Analyzer به راحتی اجرا می شود، این دستور در برنامه پس از گذشت مدت زمانی از اجرای آن با پیغام خطای Time Out مواجه می شود.
می خواستم بدونم چطور میشه دستورات طولانی و یک مرحله ای SQL مثل این رو در محیط VB اجرا کرد؟ حتی دستور را در SP نوشتم و در برنامه فراخوانی کردم باز هم فایده ای نداشت. فکر می کنم مشکل از این باشد که هنگام اجرای این دستور برنامه هیچ کار دیگری نمی کند، اگر اینطور است چطور می شود برنامه را در حال اجرای یک دستور یک مرحله ای مشغول نگه داشت؟
من در مورد Restore کردن بانک هم مشکل مشابهی دارم. با اینکه کد های من توی Query Analyzer و از طریق بانک Master به راحتی اجرا می شوند، این دستورات وقتی در برنامه اجرا می شوند پیغام خطا می دهد.
کدی که من برای Restore استفاده کردم اینه:


Use Master
Go
alter database [Anbar] set SINGLE_USER;
SELECT filename FROM sysdatabases WHERE name = 'Anbar';
RESTORE DATABASE [Anbar] FROM DISK =@Path WITH REPLACE , NOUNLOAD , STATS = 10, RECOVERY;
alter database [Anbar] set MULTI_USER;

خواهش می کنم بگید اشکال کار کجاست؟

H4i0 ACP
پنج شنبه 29 فروردین 1387, 06:52 صبح
سلام
من برای برنامه ای که از چندین حلقه با مقادیر بالا و چند عمل پایگاه داده ای استفاده می کرد از DoEvents در بین حلقه ها استفاده کردم و مشکلی که با Time Outوcrash داشتم حل شد .احتمال اینکه در برنامت جواب بده کمه ، ولی امتحان کن .سعی می کنم راه حلی برات پیدا کنم. اگر فقط سورس یه نمونه برنامه مثل همین برنامه رو پست کنی راحت تر میشه کمک کرد .
در ضمن در barnamenevis جست و جو کن .
-----------------------------------------------------
for i=1 to 20000
a=a*a
DoEvents
next

Kourosh_Wise
پنج شنبه 29 فروردین 1387, 17:02 عصر
بهتره یک Thread جدید درست کنی و محاسبات زمانبر رو به اون thread واگذار کنی تا thread اصلی برنامه آزاد باشه
تو vb با استفاده از تابع CreateThread api نمیتونی thread درست کنی چون ساختار vb single thread اجازه این کار رو نمیده اما یه راه نسبتاً سخت ولی جالب داره
برای اینکار توی msdn این موارد رو جستجو کن
"Vb MultiThreaded"
"Vb Safe threaded "