PDA

View Full Version : hang روی دستور excecute



akhavan_a
یک شنبه 05 مرداد 1393, 22:08 عصر
سلام دوستان

ما یه برنامه گزارش گیری داریم که با VB6 نوشته شده و کوئری رو از اوراکل می خونه و در کریستال ریپورت نمایش می ده . کوئری را توسط toad در اوراکل به صورت جداکانه اجرا کردم ظرف 9 ثانیه اجرا می شه (11500 رکورد بر میگرداند) ولی در برنامه ی VB6 روی دستور cmnd.execute هنگ می کند. خواهش می کنم راهنمایی بفرمایید مشکل از کجاست و این مشکل اول ماه ما رو درگیرکرده که نمی تونیم حسابها مون رو ببندیم چون واحد مالی کلی از این گزارشات برای کنترل موجودی انبار ها استفاده می کنند. خواهش می کنم با توجه به اینکه تا فردا بیشتر فرصت نداریم مارو کمک کنید.

karasystem
دوشنبه 06 مرداد 1393, 07:59 صبح
سلام

از دستور DoEvents بعد از دستور اجرا استفاده کنید و یا
دستور فراخوانی رکوردها از بانک را با ADODB تغییر دهید به طور مثال
Dim Rs as new recordset
rs.open "Select *from table",connection,adOpenStatic, adLockOptimistic
موفق باشید

akhavan_a
دوشنبه 06 مرداد 1393, 09:01 صبح
از روش اول استفاده کردم :

set rs = cmnd.Execute(, , adAsyncExecute)

While cmnd.State = adStateExecuting
DoEvents
Wend
برنامه هنگ نمی کند ولی 3 ساعت طول می کشه ‎ما اخیرا دیتابیس را آپگرید کردیم و متوجه شدیم rebuild indexing ‏انجام نشده . به احتمال خیلی زیاد مشکل از اینجاست.
ممنون

vbhamed
دوشنبه 06 مرداد 1393, 13:33 عصر
سلام
به نظر مياد اگر مشكل از rebuild indexing باشه بايد تو خود اوراكل هم دير انجام بشه
ضمنا يادتون باشه دستورات كوئري رو مستقيما در كريستال ريپورت ننوشته باشيد كه خيلي معطلتون مي‌كنه و كريستال رو به يك كوئري موجود در بانك متصل كنيد

akhavan_a
یک شنبه 12 مرداد 1393, 12:16 عصر
در کریستال که نوشته نشده‏ ولی در خود اوراکل هم خیلی کند اجرا می شه . کوئری دو تا یونیون داشت یونیون اول از یک جدول temp می خوند ولی یونیون دوم از برنامه ای که داریم . مشکل indexing برای اوراکل application است . موردی که مارو گول زد این بود که یونیون اول خیلی سریع اجرا می شده و page اول خیلی سریع نمایش داده می شد. ولی یونیون دوم به تنهایی سه ساعت طول می کشید . ما هنوز مشکل داریم اما دیگه به این تاپیک مربوط نمی شه . ممنون