PDA

View Full Version : یه گزارشه عجیب و غریب !!!



amirhosein
چهارشنبه 02 آذر 1384, 22:59 عصر
دوستان سلام . من می خوام یه گزارش بسازم که یه کم عجیب و غریبه . توی این گزارش ما دو تا جدول داریم . توی جدول اول ما مشخصات یه سری اشتراک(پرونده) رو ذخیره کردیم و برای هر اشتراک هم یک رکورد داریم . توی جدول دوم به ازای هر دوره(ماه) یک یا چند تا اشتراک داریم . یعنی مثلاً توی دوره 1 ، سه تا اشتراک و توی دوره 2 ، هفت تا اشتراک و ... وجود داره که برای ثبت مشخصات هر اشتراک در جدول دوم از جدول اول(اطلاعات پایه) استفاده می کنیم . حالا می خوایم گزارشی داشته باشیم که به جای اینکه بگه توی هر دوره چه اشتراکهایی وجود داره ، دقیقاً کار عکسش رو انجام بده و بگه که توی هر دوره ، کدوم اشتراک نیومده !
فکر می کنم که باید از یه شرط خاص استفاده کنیم . از دوستان اگه کسی چیزی به ذهنش می رسه دریغ نکنه . با تشکر و آرزوی موفقیت برای همه . در ضمن من عجله دارم .:گریه:

PalizeSoftware
جمعه 04 آذر 1384, 01:09 صبح
امیرحسین جان کوئری زیر کلیه اشتراک‌هایی رو که در هیچ دوره‌ای فعال نبودند رو لیست می‌کنه.


SELECT *
FROM tbl_Parvandeh
WHERE ParvandehId NOT IN
(SELECT ParvandehId
FROM tbl_Dovreh)

قاعدتا باید جدولی هم برای معرفی دوره‌ها داشته باشی که اگه با کوئری بالا join کنی، می‌تونی هر دوره رو که خواستی فیلتر کنی(توی کریستال بصورت پارامتر دوره رو معرفی می‌کنی).

amirhosein
شنبه 05 آذر 1384, 23:48 عصر
آقای تقدسی بابت جوابتون متشکرم ، اما چند تا نکته دیگه هم مونده که من توش مشکل دارم :
اول اینکه چه جوری میشه یه کوئری رو به C.R. پاس کرد ؟ (برای V9 بلدم ولی برای V8.5 نه)
دوم اینکه برای گزارشم بیام یه جدول temp بگیرم و با کوئری بالا اطلاعاتو توش بریزم و بهد اونو نمایش بدم یا راه بهتری هم هست ؟
سوم اینکه توی C.R. یه چیزی به اسم فکر کنم SQL Designer هستش که نتونستم باهاش کار کنم . اونم به کارم میاد یا نه ؟ اگه بدردم می خوره چه جوری میشه باهاش کار کرد ؟
چهارم اینکه اونجایی که گفتین دوره رو به صورت پارامتر معرفی کنم رو نفهمیدم !:لبخند:
با تشکر و آرزوی موفقیت

amirhosein
دوشنبه 07 آذر 1384, 23:24 عصر
بابا یکی محل بذاره . خدای نکرده عجله دارم.

PalizeSoftware
سه شنبه 08 آذر 1384, 09:38 صبح
اول اینکه چه جوری میشه یه کوئری رو به C.R. پاس کرد ؟ (برای V9 بلدم ولی برای V8.5 نه)
چه دلیلی باید باشه که بخوای کوئری رو عوض کنی. می‌دونی با این کار کلیه فیلدها و جداول تغییر می‌کنه؟


دوم اینکه برای گزارشم بیام یه جدول temp بگیرم و با کوئری بالا اطلاعاتو توش بریزم و بهد اونو نمایش بدم یا راه بهتری هم هست ؟
وقتی چاره‌ای برات باقی نمونده باشی این راه رو هم می‌تونی بری. اما سعی کن با یه کوئری به نتایج موردنظر برسی.


سوم اینکه توی C.R. یه چیزی به اسم فکر کنم SQL Designer هستش که نتونستم باهاش کار کنم . اونم به کارم میاد یا نه ؟ اگه بدردم می خوره چه جوری میشه باهاش کار کرد ؟
به تولز اضافی هست. برای تست و مشاهده نتایج SQLها کاربرد داره. بدون این هم میشه زندگی کرد.

چهارم اینکه اونجایی که گفتین دوره رو به صورت پارامتر معرفی کنم رو نفهمیدم
ببین، اگه تو جدولی داری (که فکر می‌کنم باید داشته باشی) که در اون دوره‌ها رو تعریف کردی، این جدول رو با کوئری بالا که join کردی، بعد اگر خواستی از یه دوره خاصی فقط لیست اشتراک‌هایی که فعالیت نداشته‌اند رو بگیری، یه فیلد پاراماری توی کریستال معرفی کن و در بخش SELECT EXPERT شرط دوره رو بر اساس مقدار همین پارامتر تنظیم کن.
موفق باشی

amirhosein
سه شنبه 08 آذر 1384, 22:50 عصر
چه دلیلی باید باشه که بخوای کوئری رو عوض کنی. می‌دونی با این کار کلیه فیلدها و جداول تغییر می‌کنه؟
یعنی چی ؟

PalizeSoftware
سه شنبه 08 آذر 1384, 23:02 عصر
امیرحسین جان منظور تو از عوض کردن کوئری کدوم هست؟
اگه منظورت تغییر کوئری منبع داده‌هاست که چه نیازی هست که تغییر بدی. تو یکبار کوئری رو معرفی می‌کنی و بعد گزارش رو بر اساس فیلدهای موجود می‌سازی.
اما اگه منظورت Record Selection هست که خب از طریق وی‌بی با کد می‌تونی عوض کنی.

amirhosein
چهارشنبه 09 آذر 1384, 21:10 عصر
من حرفی از تغییر کوئری نزدم فقط می خوام ببینم چه جوری میشه یه کوئری رو از بیرون به cr فرستاد . فکر کنم همون تغییر record selection از توی وی بی رو اگه بگین حله .

PalizeSoftware
چهارشنبه 09 آذر 1384, 21:29 عصر
امیرحسین جان تا اونجا که من اطلاع دارم خود کوئری رو نمیشه تغییر داد چون ساختار گزارش بر اساس کوئری که حکم منبع داده‌ها رو داره شکل می‌گیره. اما اگه دقت کرده باشی در بخش SELECT EXPERT‌ هر شرطی رو که بذاری در واقع داری بخش WHERE‌ از کوئری رو تشکیل می‌دی و این همون Record Selection هست. یه نگاه به شئی report‌ اگه بندازی متوجه میشی که Record Selection یکی از خصوصیات اون هست که قبل از نمایش گزارش می‌تونی تغییر بدی. اما تغییر اون وابسته به نام جداول هست که در {} مشخص می‌شه. بطور دقیق باید بگم که همون قواعد دستوری در بخش SELECT EXPERT رو باید رعایت کنی.
موفق باشی

amirhosein
شنبه 12 آذر 1384, 23:12 عصر
اگه امکانش باشه که یه sample هم بذارین دیگه آقایی رو تموم کردین.

PalizeSoftware
یک شنبه 13 آذر 1384, 16:59 عصر
اگه report‌ شئی موردنظر گزارش باشه اینطوری می‌تونی مقدار بدی:


Report.RecordSelectionFormula="{tblParvandeh.ParvandehID}=10"

یعنی لیست پرونده‌ای که کد 10 رو داره.

amirhosein
یک شنبه 13 آذر 1384, 18:34 عصر
امین خان ،
1- برای اون شرط که شماره پرونده هایی که توی اون دوره نیستن باید چی نوشت ؟
2- شی report یه خاصیت به اسم sqlquerystring داره که من سعی کردم یه رشته کوئری اس کیو ال به اون بدم (با کدنویسی توی وی بی) تا اطلاعات گزارشمو استخراج کنم ولی در زمان اجرا یه پیغام خطا با عنوان this datasource dose not support SQL query صادر شد که نمی دونم برای چی هستش. نظرتون در این مورد چیه؟ فکر کنم اگه بتونم اینو راه بندازم مشکلم در پاس کردن کوئری به گزارش حل بشه.

PalizeSoftware
یک شنبه 13 آذر 1384, 18:48 عصر
امیرحسین جان کوئری زیر کلیه اشتراک‌هایی رو که در هیچ دوره‌ای فعال نبودند رو لیست می‌کنه.


SELECT *
FROM tbl_Parvandeh
WHERE ParvandehId NOT IN
(SELECT ParvandehId
FROM tbl_Dovreh)

قاعدتا باید جدولی هم برای معرفی دوره‌ها داشته باشی که اگه با کوئری بالا join کنی، می‌تونی هر دوره رو که خواستی فیلتر کنی(توی کریستال بصورت پارامتر دوره رو معرفی می‌کنی).

تو جدولی داری که دوره‌ها رو در اون معرفی کردی یا نه؟
مثلا جدولی که نام دوره، کد دوره، توضیح اضافی و ... رو در بر داشته باشه.
اگه داشته باشی می‌تونی با کوئری بالا Join کنی و بعد خیلی راحت شرط رو به RecordSelectionFormula بدی.