PDA

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



Mehr@ban
جمعه 28 مهر 1396, 17:49 عصر
سلام

برنامه ای هست که قراره یک گزارش رو با توجه به محتویات یک تکست باکس، فیلتر کنه

البته یک نکته قابل توجه هست:
این تکست باکس نتیجه یک محاسبه که در داخل خود گزارش انجام میشه رو نمایش میده!
به عبارتی منبع این تکست باکس، کوئری متصل به گزارش نیست. بلکه یه جمع و تفریق هست که در داخل خود گزارش انجام شده.

حالا چرا این محاسبه رو داخل کوئری انجام ندادم دلیلش اختلاف و درصد خطایی هست که در نتیجه محاسبات در کوئری و نتیجه محاسبات در خود گزارش هست.

نمونه رو هم ضمیمه میکنم دوستان یه نگاهی بندازن و راهنمایی کنن


فقط یه توضیحی در گزارش هم بدم:
در گزارش یک ناحیه قرمز رنگ هست که در سمت چپش یه جدول هست
در سلول وسط باید فیلتر بشه که مساوی با 0 باشه، بزرگتر یا کوچکتر از 0 باشه

mazoolagh
چهارشنبه 24 آبان 1396, 11:19 صبح
این خیلی آشناست!
قبلا جواب نداده بودم؟

Mehr@ban
جمعه 26 آبان 1396, 13:36 عصر
این خیلی آشناست!
قبلا جواب نداده بودم؟

سلام
قبلا یه توضیحی در مورد نمونه دیگه ای داده بودین که به دلیلی که در زیر میگم نشد ازش استفاده کنم

من یک محاسبه ساده رو در این گزارش لازم داشتم که مشخص کنه این فرد در فلان دوره چه وضعیت مالی رو داره! بستانکار هست یا بدهکار و یا تسویه کرده؟
خب دو راه برای انجامش بود

باید محاسبات رو در خود کوئری انجام میدادم و نتیجه رو در یک فیلد قرار میدادم و میفرستادم به گزاش
اینکه با استفاده از محاسبات داخل خود گزارش که محتویات یک فیلد رو ضرب و تقسیم و ... کنم و نتیجه رو در یک تکس باکس دیگه نشون بدم


خب علی القاعده باید از روش اول که اساسی تر هست استفاده میکردم ولی چرا نشد؟
اینکه من دو راه حل رو پیاده کردن و اما نتیجه ای که گرفتم در محاسبات متفاوت بود!
یعنی در اکثر موارد نتیجه محاسبات یکی بود، ولی در برخی از موارد نتیجه متفاوت بود. یعنی محاسباتی که در کوئری انجام میشد نتیجه اشتباه رو نشون میداد ولی محاسبه ای که داخل خود گزارش و روی فیلدها انجام شده بود دقیقتر بود!

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

لذا رفتیم سراغ همون راه دوم که محاسبات رو داخل خود گزارش و بر روی فیلدها انجام بدم!

ولی خب یه چالش دیگه افتادم
اینکه نمیشه محتویات فیلدی رو که داده خودش رو از منبع کوئری یا جدول نمیگیره رو فیلتر کرد! که دقیقا میشه همین مورد بنده که میخوام گزارش رو بر اساس فیلدی که صرفا نتیجه محاسباتی که در داخل خود گزارش انجام میشه رو فیلتر کرد!



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

mazoolagh
شنبه 04 آذر 1396, 12:27 عصر
خب چیزی که مد نظر شماست قطعا نشدنی و درواقع ایده اش هم نادرست است.

پرسش قبلی شما در تاپیک زیر بود:
http://barnamenevis.org/showthread.php?540498

که همونجا یک نمونه هم هست برای اینکه چگونه مانده حساب ها رو در یک کوئری محاسبه کنیم.

مشکل بعدی شما به این برمیگرده که چجوری نتایج جستجو رو نشون بدین (همون فیلتر کردن) که میتونین در تاپیک پایین روشهای مختلف رو ببینین:
http://barnamenevis.org/showthread.php?544014-مشکل-در-اجرای-کوئری-با-چندین-شرط

شما باید همین ها رو در برنامه خودتون پیاده کنین. من طراحی جدول ها رو دیدم. اشکالات اساسی داره که قبلا هم گفته بودم.
مهمترینش شاید این باشه که جنس فیلدهای مبلغ رو single گذاشتین که خب باید long integer یا decimal باشه.
موارد دیگه هم هست ؛ چیزهایی مثل جنسیت یا مدرس و آموزشگاه و ... باید حتما بصورت ID ذخیره بشن که شما همه رو string گذاشتین.
همینطور تاریخ که بارها گفتم باید long integer ذخیره بشه.

اینکه نتیجه جستجو اونچه انتظار دارین نیست باحتمال برآیند اینجور چیزهاست که قطعا قبل از هر چیز این موارد باید برطرف بشه.

با این وجود یک نمونه دیگه همینجا میگذارم.

mazoolagh
شنبه 04 آذر 1396, 12:34 عصر
147135

147136
147137

mazoolagh
شنبه 04 آذر 1396, 12:38 عصر
Option Compare Database
Option Explicit
Dim WHR
Private Sub Form_Open(Cancel As Integer)
WHR = Array("", "WHERE Balance=0", "WHERE Balance<0", "WHERE Balance>0")
End Sub
Private Sub Status_AfterUpdate()
Me.Child.Report.RecordSource = "Select * from Totals " & WHR(Status - 1)
End Sub