PDA

View Full Version : حرفه ای: تبدیل دستور Select کویری به کد VB



Nazir Ahmad
یک شنبه 10 فروردین 1393, 13:40 عصر
عرض سلام خدمت تمامی دوستان و اساتید گرام
ما یه کویری داریم که با استفاده از دستور اس‌کیو ال select نوشته شده و چون تعداد شروط داخل این دستور زیاد هست مدت زمان زیادی طول میکشه تا کویری باز بشه.
حالا من میخوام این کویری رو به کد تبدیل کنم.
ممنون میشم اگر اساتید کمک کنند.
اینم دستور اس‌کیو الSELECT n1.salN AS salN, n1.shobeN, n1.shftN, n1.clsN, Count(n1.[St-ID1]) AS [CountOfSt-ID1], [کامیاب]+[ناکام] AS [شامل امتحان], (SELECT Count(n3.Natijeh4)
FROM n as n3
WHERE (((n3.Natijeh4)="کامیاب")) and (n3.salN=n1.salN) and (n3.clsN=n1.clsN) and (n1.shftn=n3.shftn) and (n3.shobeN=n1.shobeN)) AS کامیاب, (SELECT Count(n2.Natijeh4)
FROM n as n2
WHERE (((n2.Natijeh4)="ناکام")) and (n2.salN=n1.salN) and (n1.clsN=n2.clsN) and (n1.shftn=n2.shftn) and (n2.shobeN=n1.shobeN)) AS ناکام, (SELECT Count(n4.Majmoo4)
FROM n as n4
WHERE (((n4.[HazerEm])="محروم")) and (n4.salN=n1.salN) and (n4.clsN=n1.clsN) and (n1.shftn=n4.shftn) and (n4.shobeN=n1.shobeN)) AS محروم, (SELECT Count(n6.Natijeh4)
FROM n as n6
WHERE (((n6.Natijeh4)="معذرتی")) and (n6.salN=n1.salN) and (n1.clsN=n6.clsN) and (n1.shftn=n6.shftn) and (n6.shobeN=n1.shobeN)) AS معذرتی, (SELECT Count(n7.Natijeh4)
FROM n as n7
WHERE (((n7.Natijeh4)="نقل مکان")) and (n7.salN=n1.salN) and (n1.clsN=n7.clsN) and (n1.shftn=n7.shftn) and (n7.shobeN=n1.shobeN)) AS [نقل مکان], Count(n1.HazerEm) AS CountOfHazerEm, [کامیاب9]+[ناکام9]+[مشروط9]+[معذرتی9] AS [شامل امتحان9], (SELECT Count(n3.Natijeh9)
FROM n as n3
WHERE (((n3.Natijeh9)="مشروط")) and (n3.salN=n1.salN) and (n3.clsN=n1.clsN) and (n1.shftn=n3.shftn) and (n3.shobeN=n1.shobeN)) AS مشروط9, (SELECT Count(n3.Natijeh9)
FROM n as n3
WHERE (((n3.Natijeh9)="کامیاب")) and (n3.salN=n1.salN) and (n3.clsN=n1.clsN) and (n1.shftn=n3.shftn) and (n3.shobeN=n1.shobeN)) AS کامیاب9, (SELECT Count(n2.Natijeh9)
FROM n as n2
WHERE (((n2.Natijeh9)="ناکام")) and (n2.salN=n1.salN) and (n1.clsN=n2.clsN) and (n1.shftn=n2.shftn) and (n2.shobeN=n1.shobeN)) AS ناکام9, (SELECT Count(n4.Majmoo9)
FROM n as n4
WHERE (((n4.[HazerEm9])="محروم")) and (n4.salN=n1.salN) and (n4.clsN=n1.clsN) and (n1.shftn=n4.shftn) and (n4.shobeN=n1.shobeN)) AS محروم9, (SELECT Count(n6.Natijeh9)
FROM n as n6
WHERE (((n6.Natijeh9)="معذرتی")) and (n6.salN=n1.salN) and (n1.clsN=n6.clsN) and (n1.shftn=n6.shftn) and (n6.shobeN=n1.shobeN)) AS معذرتی9, (SELECT Count(n7.Natijeh9)
FROM n as n7
WHERE (((n7.Natijeh9)="نقل مکان")) and (n7.salN=n1.salN) and (n1.clsN=n7.clsN) and (n1.shftn=n7.shftn) and (n7.shobeN=n1.shobeN)) AS [نقل مکان9], Count(n1.HazerEm9) AS CountOfHazerEm9
FROM n AS n1
GROUP BY n1.salN, n1.shobeN, n1.shftN, n1.clsN;



ممنون
یا حق

Nazir Ahmad
دوشنبه 11 فروردین 1393, 08:36 صبح
---------------

mhamedm2008
دوشنبه 11 فروردین 1393, 11:58 صبح
یک تجربه ای قبلا داشتم .نتیجه اش این شد که از کوئری استفاده کردم که توی سرعت و نحوه اجرای بهتر بود.به نظر من برای دستورات سنگین از کوئری خیلی راحت تر و بهتره از VBA هست.
بازم نظر دوستان مهمه.

Nazir Ahmad
سه شنبه 12 فروردین 1393, 15:15 عصر
ممنون دوست عزیز
اما کدی که در پست 1 است توسط کویری نوشته شده اما سرعتش واقعا پایین هست و درهنگام باز شدن کویری بیشتر از 30 ثانیه طول میکشه تا باز بشه.

اگر اساتید راه دیگه ای مد نظرشون هست لطفا همکاری کنند.

یا حق

Nazir Ahmad
چهارشنبه 13 فروردین 1393, 09:27 صبح
مثل اینکه سال نو همه رفتند تعطیلات ... ؟؟؟؟؟؟؟؟؟؟؟؟؟؟

mhamedm2008
چهارشنبه 13 فروردین 1393, 22:12 عصر
بستگی به سرعت سیستم هم داره.من توی کامپیوترم یک کوئری پیچیده رو در عرض 20 ثانیه اجرا می کنه ولی توی لب تاپم در عرض 6 ثانیه اجرای میکنه

Nazir Ahmad
پنج شنبه 14 فروردین 1393, 08:08 صبح
فرقی نمیکنه
درکل سرعت باز شدن کویری پایینه و در کامپیوترهای مختلف تمام کاربران همین مشکل وجود داره.
حتی گاهی بازشدن کویری اونقدر طول میکشه که برنامه هنگ میکنه و اصلا کویری رو باز نمیکنه. (البته گزارشهایی که به اون کویری ارتباط داره)

ممنون
یاحق

alirezabahrami
پنج شنبه 14 فروردین 1393, 08:26 صبح
سلام
بهتر بود نمونه را باجداول مربوطه اش قرار می دادی !
یا علی

Nazir Ahmad
پنج شنبه 14 فروردین 1393, 10:43 صبح
بفرمایید جناب بهرامی گرامی
این هم نمونه

یا حق

alirezabahrami
پنج شنبه 14 فروردین 1393, 11:25 صبح
بفرمایید جناب بهرامی گرامی
این هم نمونه

یا حق
سلام Nazir Ahmad !
برروی سیستم بنده آفیس 2003 و 2007 نصب است ؛ ظاهراً فایل نمونه شما با ورژن 2010 تهیه شده .
لذا بهتر است نمونه را به اکسس 2003 یا 2007 کانورت و آپلود نمائید.
یا علی

Nazir Ahmad
پنج شنبه 14 فروردین 1393, 12:40 عصر
بفرمایید
اینم با فرمت 2003

یا حق

alirezabahrami
پنج شنبه 14 فروردین 1393, 14:50 عصر
عرض سلام خدمت تمامی دوستان و اساتید گرامما یه کویری داریم که با استفاده از دستور اس‌کیو ال select نوشته شده و چون تعداد شروط داخل این دستور زیاد هست مدت زمان زیادی طول میکشه تا کویری باز بشه.حالا من میخوام این کویری رو به کد تبدیل کنم.

سلام!
طبیعی است با وجود این همه شرط ، زمان زیادی طول میکشد تا کوئری اجرا شود و به نظر بنده بصورت vb نوشتن این کدها که بصورت SQL است نه تنها چاره ساز نیست بلکه زمان اجرا را کندتر هم می نماید . بنده شخصاً در اینجور مواقع سعی میکنم با ترفندهائی (شاید بصورتی غیرحرفه ای) چنین کوئری پیچیده ای را ازحالت پیچیدگی در بیاورم .بطورمثال در این نمونه شما با فرض اینکه به فلسفه و جزئیات برنامه شما آشنا باشم سعی می کنم یک جدول درست کنم و فیلدهائی که در کوئری n با آنها کار دارم در آن ایجاد کنم و در مرحله بعد از طریق Append Query تمام اطلاعات کوئری n را به این جدول انتقال دهم . در اینجاهدف بنده از اینکار این است که درمرحله بعد کوئری Total-N را ازاین جدول که دارای فیلدهائی محدود و مشخص است ( نسبت به دوجدول که با هم مرتبط شده اند )درست کنم .
ناگفته نماند که در هر بار اجرای گزارش ، اطلاعات این جدول باید حذف و مجدداً ازهمان طریق Append Query اطلاعات جدید به آن منتقل شود .
در هر حال در عمل باید راه های مختلف را امتحان کنی تا به نتیجه برسید ولی مطمئنم که با تغییر کد به نتیجه مطلوب نخواهی رسید( در اینجا منظورم تبدیل کدهای اسکیوال به وی بی است ) .
.
یا علی