PDA

View Full Version : سوال: صدا زدن query با VBA



goleleila
سه شنبه 08 اردیبهشت 1388, 11:45 صبح
با سلام خدمت همه دوستان
من يک query دارم که بايد در هر بار فراخواني يک مقدار را از از يک table بخواند و بر اساس آن مقدار از table ديگري اطلاعاتي را برگرداند (جدول دوم را براساس مقدار داده شده فيلتر کند) و توسط يک Report نمايش دهد.
چطور مي تونم با استفاده از حلقه for در VBA اين کار رو انجام بدم.يا اگه را بهتري هست ...
ممنون ميشم عزيزان راهنمايي کنند.

مهدی قربانی
سه شنبه 08 اردیبهشت 1388, 11:54 صبح
سلام
سئوالتون يمقدار كليه ، شما دقيقاً چه عملياتي رو ميخواين انجام بديد و چرا بايد اول يك كوئري اجرا بشه بعد يك كوئري ديگه ، .... ضمناً بهتره سئوالتون در قالب يك نمونه فايل مطرح بشه تا منظور شما بهتر قابل درك باشه و راهنمايي بهتر هم ارائه بشه .

goleleila
سه شنبه 08 اردیبهشت 1388, 12:07 عصر
سلام
سئوالتون يمقدار كليه ، شما دقيقاً چه عملياتي رو ميخواين انجام بديد و چرا بايد اول يك كوئري اجرا بشه بعد يك كوئري ديگه ، .... ضمناً بهتره سئوالتون در قالب يك نمونه فايل مطرح بشه تا منظور شما بهتر قابل درك باشه و راهنمايي بهتر هم ارائه بشه .

جناب قرباني عزيز
با تشکر از لطف شما و توجه سريع شما به سوال بنده
من دقيقاً جدولي از اطلاعات کارمندان دارم که هر کدام داراي کد محل خدمت هستند
مي خواهم کد VBA بتواند افرادي را که در هريک از اين کد محل خدمتها حضور دارند به تفکيک ليت کرده و پرينت بگيرد .
چون حدود 1000 کد محل خدمت دارم و مي خواهم خود کد به ترتيب از کوچکترين کد محل خدمت شروع کرده ،تفکيک و سپس پرينت بگيرد و بعد از آن به سراغ کد محل خدمت بعدي برود
ممنون

goleleila
چهارشنبه 09 اردیبهشت 1388, 10:24 صبح
datebase پيوست شده رو ببينيد مي خوام با اجراي يک ماکرو اسامي افراد به تفکيک محل خدمتشون در پرينتهاي مجزا چاپ بشه.

پيوست :
sample.rar (http://goleleila.ir/archive/sample.rar)

dadsara
چهارشنبه 09 اردیبهشت 1388, 11:09 صبح
سلام
فرم یک را اجرا کنید و کلید موجود برروی سطح فرم را فشار دهید
باتوجه به اینکه اعلام فرمودید 1000 کد محل خدمت دارید پیشنهاد می کنم منبع داده ریپورت را به یک کوئری متصل نمائید تا درازاء هر بار کلیک فقط کد محل خدمت مورد نظر چاپ شود

goleleila
چهارشنبه 09 اردیبهشت 1388, 11:47 صبح
سلام
فرم یک را اجرا کنید و کلید موجود برروی سطح فرم را فشار دهید
باتوجه به اینکه اعلام فرمودید 1000 کد محل خدمت دارید پیشنهاد می کنم منبع داده ریپورت را به یک کوئری متصل نمائید تا درازاء هر بار کلیک فقط کد محل خدمت مورد نظر چاپ شود
ممنونم
اما مشکل همين جاست که مي خوام اين کار اتوماتيک انجام بشه يعني مجبور نباشيم هر سري 1000 بار کليک کنيم
مشکل دوم اينکه چطور هربار query مورد نظر به سراغ کد محل خدمت بعدي بره.
اگه لطف کنيد نمونه کد کاملتري محبت بفرماييد ممنون ميشم.چون تو اين بحث خيلي تازه واردم.

مهدی قربانی
چهارشنبه 09 اردیبهشت 1388, 14:22 عصر
سلام
اين نمونه رو چك كنيد :

goleleila
چهارشنبه 09 اردیبهشت 1388, 15:42 عصر
سلام
اين نمونه رو چك كنيد :

خيلي ممنونم .
دقيقآ چيزي بود که مي خواستم
دو تا سوال کوچيک هم داشتم
1 )چي کار کنم که موقع پرينت preview هاش رو هم نشون بده.چون وقتي حالت نمايش رو acViewPreview مي ذارم ديگه سراغ پرينت بعدي نمي ره.
2 ) اگه بخوام تعداد رکوردهاي هر پرينت در بالاي اون نوشته بشه چي کار بايد بکنم.من تو ريپورت يه تکست باکس تعريف کردم که توش عبارت =Count([org_code])
نوشته شده اما کار نمي کنه.

ضمناً خوشحال ميشم از سايتي که تماماً کارخودمه بازديد بفرماييد.صفحه «صلوات تا ظهور مهدي(عج)» اش رو با asp.net کار کردم.

www.goleleila.ir (http://www.goleleila.ir)

dadsara
چهارشنبه 09 اردیبهشت 1388, 16:01 عصر
سلام

) اگه بخوام تعداد رکوردهاي هر پرينت در بالاي اون نوشته بشه چي کار بايد بکنم.من تو ريپورت يه تکست باکس تعريف کردم که توش عبارت =Count([org_code])

این همن نمونه اصلاح شده جناب آقای قربانی

مهدی قربانی
چهارشنبه 09 اردیبهشت 1388, 16:57 عصر
خيلي ممنونم .
دقيقآ چيزي بود که مي خواستم
دو تا سوال کوچيک هم داشتم
1 )چي کار کنم که موقع پرينت preview هاش رو هم نشون بده.چون وقتي حالت نمايش رو acViewPreview مي ذارم ديگه سراغ پرينت بعدي نمي ره.
2 ) اگه بخوام تعداد رکوردهاي هر پرينت در بالاي اون نوشته بشه چي کار بايد بکنم.من تو ريپورت يه تکست باکس تعريف کردم که توش عبارت =Count([org_code])
نوشته شده اما کار نمي کنه.


سلام
دوست گرامي اگر بخواين Print Preview هر گزارش رو داشته باشين طبعاً بخاطر سرعت بالاي حلقه اين امر بسادگي محقق نميشه بنابراين شما بايد يك تاخيري در فواصل نمايش و چاپ گزارش ايجاد كنيد من ابتدا يك فانكشن ساده تايمر در ماجول فرم اضافه كردم و يك خط هم مربوط به تعيين مدت زمان وقفه در تابع حلقه نوشتم تا نكته مورد نظر شما رو اجرا كنه به كدنويسيها مراجعه كنيد توضيحات داده شده .
در مورد تعداد ركوردها هم كه دوستمون جناب dadsara زحمتش رو كشيدن .
موفق باشيد

goleleila
یک شنبه 13 اردیبهشت 1388, 13:42 عصر
با تشکر فراوان از جناب قرباني و dadsara
يه سوال داشتم اگه بخوام تو ريپورتم يک AutoNumber داشته باشم که به عنوان رديف ازش استفاده کنم چطور مي تونم اين کار رو انجام بدم؟

مهدی قربانی
یک شنبه 13 اردیبهشت 1388, 13:53 عصر
سلام
بهتره بگيم شماره رديف ، قبلاً دراين مورد بحث شده ، به هر حال شما مي تونيد يك تكست باكس در گزارشتون بذاريد و در ControlSource اون 1= رو قرار بديد و خصوصيت Running Sum رو به Over All تنظيم كنيد تا رديف اتوماتيك رو در گزارشتون داشته باشيد .

مهدی قربانی
دوشنبه 14 اردیبهشت 1388, 17:26 عصر
سلام
شما به نماي Design گزارش بريد و در محيط خالي بواسطه منوي راست كليك گزينه Sorting And Grouping رو اجرا كنيد و در داخل پنجره باز شده فيلدي كه مي خواين سورت بر اساس اون انجام بشه تعيين كنيد و در ستون بعدي نزولي يا سعودي بودنش رو تعيين كنيد با ساير گزينه ها هم كار نداشته باشيد .

goleleila
دوشنبه 14 اردیبهشت 1388, 22:34 عصر
سلام
بهتره بگيم شماره رديف ، قبلاً دراين مورد بحث شده ، به هر حال شما مي تونيد يك تكست باكس در گزارشتون بذاريد و در ControlSource اون 1= رو قرار بديد و خصوصيت Running Sum رو به Over All تنظيم كنيد تا رديف اتوماتيك رو در گزارشتون داشته باشيد .

با سلام مجدد
به يه مشکل عجيب برخوردم
زماني که ريپورت هاي من پشت سرهم پرينت ميشن در برخي برگه ها رديفهايي که توسط Select از جدول اصلي به دست ميان نامرتب نمايش پيدا مي کنن .يعني مثلاً رديف 102 بالاي 100 قرار مي گيره و ...
البته در هنگام ساخت ريپورت فيلد sort رو مشخص نکردم.حالا چطور مي تونم مشخصش کنم.
با تشکر

مهدی قربانی
دوشنبه 14 اردیبهشت 1388, 22:53 عصر
سلام
شما به جه صورت اقدام كرديد ، مراحل كار رو ذكر كنيد .

goleleila
دوشنبه 14 اردیبهشت 1388, 23:04 عصر
من کار خاصي نکردم .
خود فايلي رو که شما زحمت کشيديد که ( پرينت افراد رو به تفکيک کد محل خدمت مي گرفت) با داده واقعي اجرا کردم .داده من حدود 1000 رکورد بوده که اين رکوردها بر اساس کد محل خدمت مرتب شده اند و از رديف 1 تا 1000 پشت سر هم قرار دارن.
حالا مثلاً کد محل خدمت بيستم را که مي خواهد نمايش دهد بايد رديفهاي 100 تا 115 جدول را فيلتر کرده و از طريق ريپورت نمايش داده و پرينت بگيرد.رکوردهاي جدول داراي فيلد id هستند .اما در اين مثال ذکر شده به جاي اينکه 100 تا 115 را به ترتيب نمايش دهد ،به هم ريخته است.
فکر کنم اگر بتونم ريپورت رو بر اساس id سورت کنم مشکل حل شه.اما نمي دونم حالا که ريپورت ساخته شده و فيلدي براي سورتش معرفي نکردم بايد چطور اين کار رو انجام بدم.

dadsara
سه شنبه 15 اردیبهشت 1388, 08:44 صبح
سلام

اگر بتونم ريپورت رو بر اساس id سورت کنم مشکل حل شه
دوست عزیز شماره ردیف در گزارش هیچ ربطی به سورت شما نداره همانگونه در نمونه ضمیمه در کلیدهای نمونه 1 و نمونه 2 ملاحظه می فرمائید یک بار براساس هیچ فیلدی مرتب نشده ( پیش فرض فیلد کلید می باشد) و در نمونه 2 براساس نام خانوادگی مرتب شده است

hamed2009k
یک شنبه 28 تیر 1388, 14:34 عصر
با سلام
براي اجراي و باز كردن هريك از آبجكت هاي اكسس (جدول،فرم كوري و ...) از طريق كد مي تونيد از متد Docmd استفاده كنيد براي نحوه استفاده به راهنماي اكسس مراجعه كنيد