PDA

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



Armin62
پنج شنبه 09 فروردین 1386, 03:19 صبح
ببخشید دوستان که من یهو اومدم وسط یک سوال برام پیش اومده

من در دیتابیسم چندین table دارم و میخوام از 3 تا از این جدولها استفاده کنم و اطلاعات اونها رو در فرم گزارشم نمایش بدم البته در هر کدوم از جداول یک فیلد به نام Tarikh وجود داره و میخوام اطلاعات بر اساس اون مرتب بشه .
اگه دوستام خواستن مثالی بزنن لطف کنن و از نام این جدولها استفاده کنن Table1 و Table2 و و Table3 حا لا باید چیکار کنم
من با Formula اشنایی دارم در حد متوسط و اگر هم از طریق وی بی میشه این کارو کرد ممنون میشم اگه کمک کنید

در چند پست قبل چیزی خوندم (کوئری تون رو توی دیتاست بریزید و بعد این دیتاست رو به گزارش بایند کنید) یعنی چطور؟

reza_rad
پنج شنبه 09 فروردین 1386, 20:59 عصر
من در دیتابیسم چندین table دارم و میخوام از 3 تا از این جدولها استفاده کنم و اطلاعات اونها رو در فرم گزارشم نمایش بدم البته در هر کدوم از جداول یک فیلد به نام Tarikh وجود داره و میخوام اطلاعات بر اساس اون مرتب بشه .


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


در چند پست قبل چیزی خوندم (کوئری تون رو توی دیتاست بریزید و بعد این دیتاست رو به گزارش بایند کنید) یعنی چطور؟

اینکه چطور نتیجه کوئری رو بریزین توی دیتاست که مشخصه(از طریق ویزارد قسمتی داره که کد sql رو ازتون میگیره و .... با کد هم اگه مشکل دارید توی یکی از پست ها همین تاپیک کدش هست.

اما اینکه چطور دیتاست رو به ریپورت بدین:
همون جایی که دیتابیس سورس برای ریپورت تون مشخص می کنید یکی از گزینه هاش دیتا سورس های پروژه هست که می تونید دیتاست بدین.

Armin62
پنج شنبه 09 فروردین 1386, 23:20 عصر
ببینید بهتره اینطور بگم مثلا در اون سه table من یک فیلد دارم به نام SH و در table1.sh این اعداد ثبت شده 9و5و7 و در Table2.sh این اعداد 8و6و2 و در table3.sh این اعداد 1و4 حالا میخوام در هنگام نمایش به این صورت نمایش داده بشه 1و2و4و5و6و7و8و9 چطور میشه این کارو انجام داد در ضمن SH از نوع Number هست

من منظورتون رو از ویزارد متوجه نمیشم میشه بگین از کجا میتونم از اون استفاده کنم.

icmaster
جمعه 10 فروردین 1386, 01:54 صبح
ا
اما اینکه چطور دیتاست رو به ریپورت بدین:
همون جایی که دیتابیس سورس برای ریپورت تون مشخص می کنید یکی از گزینه هاش دیتا سورس های پروژه هست که می تونید دیتاست بدین.


تو قسمتی که می فرمایید فقط دیتاستهایی که با ویزارد درست کردیم هست یا اونهایی که با کد درست کردیم هم میشه؟ برای من که هیچ کدوم از دیتا ستها تو اون قسمت نمیاد که انتحابش کنم.
آیا باید کار خاصی انجام داد که کریستال ریپورت دیتاستهای پروژه را بشناسه؟؟

reza_rad
جمعه 10 فروردین 1386, 10:13 صبح
ببینید بهتره اینطور بگم مثلا در اون سه table من یک فیلد دارم به نام SH و در table1.sh این اعداد ثبت شده 9و5و7 و در Table2.sh این اعداد 8و6و2 و در table3.sh این اعداد 1و4 حالا میخوام در هنگام نمایش به این صورت نمایش داده بشه 1و2و4و5و6و7و8و9 چطور میشه این کارو انجام داد در ضمن SH از نوع Number هست


اگه سه تا جدولتون فیلدهاشون یکیه با هم union شون کنید بعد order by رو روی کل خروجی بزنید... مثلا همچین چیزی:


select *from
(select f1,f2,... from table1
union
select f1,f2,... from table2
union
select f1,f2,... from table3)temp_table
order by f1

حالا برای اینکه دیتاست شما این اطلاعات رو نشون بده برین روی فرم تون یه sqldataadapter (اگه دیتا بیس تون مثلا sqlserver هست) قرار بدین و ویزاردی که میاد رو مراحلش رو تا آخر برید یه جایی می پرسه که دیتا رو از کجا بیارم و چند گزینه داره که یکیش SQL statement هست و اونجا این کوئری رو وارد کنید.


تو قسمتی که می فرمایید فقط دیتاستهایی که با ویزارد درست کردیم هست یا اونهایی که با کد درست کردیم هم میشه؟ برای من که هیچ کدوم از دیتا ستها تو اون قسمت نمیاد که انتحابش کنم.
آیا باید کار خاصی انجام داد که کریستال ریپورت دیتاستهای پروژه را بشناسه؟؟
فقط اونهایی که با ویزارد ساخته شدن. اون هم توی project data و بعد ADO.NET datasets

Armin62
جمعه 10 فروردین 1386, 20:17 عصر
Reza_rad جان ممنون از راهنماییت
ببین من یک مثال میزارم ببین چطور میشه حلش کرد
در این برنامه وقتی روی Union 1 کلیک میکنی دقیقا خواستم برآورده میشه ولی فقط همون یک فیلد نمایش داده میشه و در Union 2 با خطا مواجه میشم چون نام فیلد های جداول با هم یکی نیستن فقط یک فیلد در تمام جدولها مشترکه .

و میخوام حاصل رو به فرم کریستالم ارسال کنم .
ممنون

reza_rad
جمعه 10 فروردین 1386, 22:45 عصر
من جداول شما رو دیدم
خب طبیعیه که union مشکل پیدا کنه چون فیلدها با هم متفاوتند.

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

Armin62
شنبه 11 فروردین 1386, 01:39 صبح
Reza_rad عزیز بهتره منظورم رو کامل بیان کنم
من در حال نوشتن یک برنامه حسابداری هستم و مشکل من در اینجاست که من مثلا برای تهیه گزارش از حساب ریز یک شخص باید اطلاعات رو از چند table بخونم مثلا factor که چه اجناسی رو خریده و chek که آیا چک پرداخت کرده یا نه و Naghdi که چه مبالغ نقدی رو پرداخت کرده و ... و میخوام اطلاعاتو به ترتیب تاریخ نمایش بدم.
به نظرت باید چیکار کنم و اگه نحوه ثبت اطلاعات من مشکلی داره ممنون میشم راهنمایی کنی.

reza_rad
شنبه 11 فروردین 1386, 08:07 صبح
خب می تونی اطلاعات هر کدوم رو جدا مرتب کنی و نشون بدی. مثلا اول چک ها بعد فاکتورها و ... اینجوری فکر می کنم منطقی تره. چون اطلاعات فاکتورها مسلما فیلدهای متفاوتی داره با نقدی و ... که کنارهم چیدنشون مشکل می کنه فهم قضیه رو برای کاربر.
ولی اگه اصرار داری که اونطوری کار کنی می تونی اطلاعات 3 تا جدول رو بریزی توی یه جدول temp (البته این هم در صورتی ممکنه که نوع فیلدها یکی باشه و فقط اسامی فرق کنه) . بعد جدول temp رو بر اساس ستون تاریخ مرتب کنی و نشون بدی. البته روش جالبی نیست ولی برای این حالت گویا تنها راهه!

Armin62
شنبه 11 فروردین 1386, 13:02 عصر
در ضمن من یک جا رو توضیح کامل ندادم که خلاصه ای از این جداول در داخل گزارش قرار می گیرن مثل (تاریخ - بابت - بدهکار - بستانکار)
در حالت اول (در این حالت اطلاعات به ترتیب تاریخ نمایش داده نمیشن) من چندین برنامه حسابداری رو دیدم که اطلاعات به ترتیب تاریخ مرتب شدن(مثل برلیان)
و فقط این مشکل رو دارم که میتونم از یک جدول در کریستال استفاده کنم و برای استفاده از دو یا چند جدول مشکل دارم (میشه در موردش توضیح بدین و یا مثالی در این مورد برام بزارید از VB6 و Crystall 10 استفاده میکنم)
در حالت دومی که گفتید اگه اطلاعات ثبت شده زیاد باشند ایجاد گزارش مقداری طول میکشه

Armin62
شنبه 11 فروردین 1386, 13:08 عصر
یادم رفت بگم مگه نمیشه در کریستال در قسمت Details به این ترتیب 4 فیلد ساخت (تاریخ - بابت - بدهکار - بستانکار) و با استفاده از کد نویسی در کریستال این گزارش رو تهیه کرد(یعنی اطلاعاتو از جداول بخونه و خلاصه کنیم و نمایش بدیم)

reza_rad
شنبه 11 فروردین 1386, 14:09 عصر
یادم رفت بگم مگه نمیشه در کریستال در قسمت Details به این ترتیب 4 فیلد ساخت (تاریخ - بابت - بدهکار - بستانکار) و با استفاده از کد نویسی در کریستال این گزارش رو تهیه کرد(یعنی اطلاعاتو از جداول بخونه و خلاصه کنیم و نمایش بدیم)

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

شما کوئری ای رو که الان برای بیرون کشیدن دیتاهای این جداول استفاده می کنی اینجا بذار تا ببینیم چیکارش میشه کرد.

Armin62
شنبه 11 فروردین 1386, 22:47 عصر
الان مشکل من همینه در ضمن من درکل برنامه فقط با استفاده از کریستال فرم گزارش رو ساختم و با استفاده از ویبی محدوده گزارش رو تعیین میکنم و از کوئری اصلا استفاده نکردم
راستی آخرین پست من در صفحه 2 رو خوندید

Armin62
جمعه 17 فروردین 1386, 03:31 صبح
رضا جان نیستی

reza_rad
جمعه 17 فروردین 1386, 11:40 صبح
در ضمن من یک جا رو توضیح کامل ندادم که خلاصه ای از این جداول در داخل گزارش قرار می گیرن مثل (تاریخ - بابت - بدهکار - بستانکار)
در حالت اول (در این حالت اطلاعات به ترتیب تاریخ نمایش داده نمیشن) من چندین برنامه حسابداری رو دیدم که اطلاعات به ترتیب تاریخ مرتب شدن(مثل برلیان)


سوال من اینه:
آیا این چهار تا فیلدی که گفتی توی همه جدولهات که الان می خوای ازشون دیتا بکشی بیرون موجوده؟



الان مشکل من همینه

یادم رفت بگم مگه نمیشه در کریستال در قسمت Details به این ترتیب 4 فیلد ساخت (تاریخ - بابت - بدهکار - بستانکار) و با استفاده از کد نویسی در کریستال این گزارش رو تهیه کرد(یعنی اطلاعاتو از جداول بخونه و خلاصه کنیم و نمایش بدیم)
آرمین عزیز میشه اینکارو کرد ولی این دیتا ها باید به یه شکلی از دیتابیس خونده بشن اون هم از توی 3 تا جدول که شما می خوای مرتبش هم بکنی تازه. پس باید اول مشخص بشه که چطور از DB خونده بشن. حالا جواب سوال بالا رو بده ببینیم میشه کاریش کرد...

reza_rad
جمعه 17 فروردین 1386, 11:47 صبح
من برای این بحث تاپیک جدید ایجاد کردم و پست ها رو به اونجا منتقل کردم.

Armin62
جمعه 17 فروردین 1386, 15:36 عصر
بله در تمام جداول وجود داره

بابت تاپیک هم ممنون.

reza_rad
شنبه 18 فروردین 1386, 08:11 صبح
بله در تمام جداول وجود داره

اگه اینطوره پس مشکلی نیست که عزیز...
شما از union استفاده کن ولی توی سلکت هاش فقط همین 4 تا فیلد و بنویس. و در نهایت هم براساس تاریخ order by کن .
میشه اینجوری:


elect *from
(select tarikh,babat,bedehkar,bestankar from table1
union
select tarikh,babat,bedehkar,bestankar from table2
union
select tarikh,babat,bedehkar,bestankar from table3)temp_table
order by tarikh


چون نتیجه همه سلکت ها از یک نوعه union مشکلی ایجاد نمی کنه.

Armin62
شنبه 18 فروردین 1386, 15:15 عصر
ببین من منظورت رو درست متوجه نشدم
در تمام جداول وجود داره ولی نام فیلدها با هم تفاوت داره

reza_rad
یک شنبه 19 فروردین 1386, 12:44 عصر
در تمام جداول وجود داره ولی نام فیلدها با هم تفاوت داره
باز هم عملیه. اگه نوع فیلد ها یکی باشه میشه



select f1 as bedehkar,f2 as bestankar , .... from table1
union
select f11 as bedehkar, f22 as bestankar , .. from table2
union
...

همه رو با یک نام مستعار سلکت کن، اگه نوعشون مثل هم باشه کار می کنه.

Armin62
یک شنبه 19 فروردین 1386, 15:55 عصر
دنیا دنیا ممنونم رضا جان