PDA

View Full Version : استفاده از دو دیتاست در گزارشگیری



mostafa_leman
یک شنبه 08 بهمن 1385, 09:17 صبح
سلام . من یک برنامه حسابداری نوشتم که 2 تا دیتاست داره یکی اطلاعات ثابت رو نگه داری میکنه (مثل مشتریان و . . . ) و اون یکی جداول متغیر که به ازای هر سال مالی به یک دیتابیس متصل میشه . تا اینجاش مشکلی ندارم و همه چیزشو کامل کردم . اما مشکلم اینه که تو بعضی از گزارشاتم باید از هر دو دیتاست برای گزارشگیری استفاده کنم که متاسفانه هیچ کدوم رو نشون نمیده . نمیدونم datasource فایل کریستال ریپورت رو به کدوم یکی مرتبط کنم ( چه جوری میشه به هر دو متصل کرد ؟ ) دوستان اگه کسی تا حالا همچین کاری کرده ممنون میشم کمکم کنید

vahidiran
یک شنبه 08 بهمن 1385, 11:50 صبح
از روش جوین کردن استفده نمی تونی بکنی

و یا اگر ربطی به هم ندارند از یک Oledbadapter دیگه استفاده کن با یک dataset متفاوت

mostafa_leman
یک شنبه 08 بهمن 1385, 18:23 عصر
نه . نمیشه از join استفاده کرد چون نام دیتابیس رو نمیشه به عنوان پارامتر ارسال کرد
مجبورم از دیتاست استفاده کنم و وقتی از دیتاست استفاده میکنی باید یک دیتاست رو به عنوان datasource معرفی کنی

اَرژنگ
یک شنبه 08 بهمن 1385, 18:30 عصر
نه . نمیشه از join استفاده کرد چون نام دیتابیس رو نمیشه به عنوان پارامتر ارسال کرد
مجبورم از دیتاست استفاده کنم و وقتی از دیتاست استفاده میکنی باید یک دیتاست رو به عنوان datasource معرفی کنی
join چه ربطی با داتابیس داره؟ در اس‌کیو‌الی که استفاده میکنه استفاده کنید.

mostafa_leman
یک شنبه 08 بهمن 1385, 23:45 عصر
خوب مشکل همین جاست . چون من به ازای هر سال مالی یک دیتابیس دارم نام دیتابیس تغییر میکنه . چه جوری میشه نام جدول برای join کردن به اس کیو ال بدم در حالی که هر بار این جدول به یک دیتابیس متصل میشه . به هر حال من باید ابتدا نام دیتابیس رو بدم سپس نام جدول رو . بنابراین نمیشه از stored procedure های اس کیو ال استفاده کنم و مجبوررم از دیتاست استفاده کنم . نمیدونم تونستم منظورمو واضح بگم با نه؟

aidinwashere
دوشنبه 09 بهمن 1385, 00:07 صبح
به به!
این مشکل شما جون میده برای DataRelation که چیزی نیست جز Joinای که بر روی DataTable های موجود در یک DataSet ایجاد میکنید.
فکر کنم بقیش رو خودتون بوسیله MSDN ...

اَرژنگ
دوشنبه 09 بهمن 1385, 00:50 صبح
خوب مشکل همین جاست . چون من به ازای هر سال مالی یک دیتابیس دارم نام دیتابیس تغییر میکنه . چه جوری میشه نام جدول برای join کردن به اس کیو ال بدم در حالی که هر بار این جدول به یک دیتابیس متصل میشه . به هر حال من باید ابتدا نام دیتابیس رو بدم سپس نام جدول رو . بنابراین نمیشه از stored procedure های اس کیو ال استفاده کنم و مجبوررم از دیتاست استفاده کنم . نمیدونم تونستم منظورمو واضح بگم با نه؟

اگر با اس‌کیو‌ال سرور کار میکنید ، ممکن است که در یک داتابیس به یک داتبیس دیگر اشاره کنید، در انجمن اس‌کیو‌ال سرور بپرسید به احتمال زیاد یکی از حرفه‌ای‌ها میتونند راهنمایی کنند.
اینکه اسمه داتابیس هر سال تغییر میکنه ، به یک حالت بخصوص تغییر میکنه؟ مثلا نام داتابیس + سال؟ اگر به یک قاعده به این سادگی بستگی داره میتونید از برنامه نویسی اس‌کیوال استفاده کنید.

hadi2345
دوشنبه 09 بهمن 1385, 10:19 صبح
با سلام..

در یک DataSet میتونی چند تا Table داشته باشی و بین اونها Relation ایجاد کنی ... و بعد با استفاده از DataView گزارش مورد نظرت رو بسازی ...

موفق باشید .

ali_kolahdoozan
دوشنبه 09 بهمن 1385, 10:27 صبح
آخه هر سال مالی رو یا توی یک جدول فیلتر میکردی یا از table جدید استفاده میکردی نه database جدا . این خیلی اذیتت می کنه .

linux
دوشنبه 09 بهمن 1385, 10:43 صبح
خوب مشکل همین جاست . چون من به ازای هر سال مالی یک دیتابیس دارم نام دیتابیس تغییر میکنه . چه جوری میشه نام جدول برای join کردن به اس کیو ال بدم در حالی که هر بار این جدول به یک دیتابیس متصل میشه . به هر حال من باید ابتدا نام دیتابیس رو بدم سپس نام جدول رو . بنابراین نمیشه از stored procedure های اس کیو ال استفاده کنم و مجبوررم از دیتاست استفاده کنم . نمیدونم تونستم منظورمو واضح بگم با نه؟
بعضی از دوستان گویا اشتباه متوجه شده اند و دیتابیس را با دیتاست عوضی گرفته اند.
دوست عزیز اولا در طراحی دیتابیس خودتان کاملا تجدید نظر کنید.این روش شما چه مزیتی برای شما بجز پیچیده شدن بیشتر برنامه نویسی دارد؟

mostafa_leman
دوشنبه 09 بهمن 1385, 16:50 عصر
آره . ظاهرا دوستان دیتاست رو با دیتابیس اشتباه گرفته اند
ببیند برنامه من ممکنه بعد 2..3 سال یک چیزی حدود 100 تا 200 هزار فیلد فقط توی یک جدولش باشه و این که بخواد بر اساس یکی از فیلدها ( سال مالی ) هر بار فیلتر بشه یکم سرعت برنامه رو پایین میاره . حالا شما فکر کنید بعد 5 سال چه افتضاحی میشه
اینجوری مطمئنم بعد 10 سال سرعت برنامه هیچ تغییری نمیکنه . همه چیز برنامم درست شده جز همین یک قلم . روشیم که آقای کلاهدوزان گفته اند امتحان نکردم . اگه به نتیجه ای نرسم باید همین کارو بکنم . هرچند باز اونطوریم به یک سری مشکلات بر میخورم
آقای آرژنگ نام سالهای مالی عبارت است از DBO+نام سال مالی مثلا ---> DBO1385
اما هیچ جوره نمیشه نام دیتابیس رو به عنوان پارامتر ارسال کرد

ali_kolahdoozan
دوشنبه 09 بهمن 1385, 17:05 عصر
حتی نیازی به استفاده از چند جدول هم نیست . شما هر سال از همون جدولها استفاده کن . هر سال باید بک آپ جداگانه داشته باشه که با درخواست کاربر باید دوباره باز بشه . یکسری جدول هم هست که اصلا دست بهش نباید زد مثل نام مشتریها . وقتی سال هم عوش بشه بازم فرقی نداره

اَرژنگ
دوشنبه 09 بهمن 1385, 17:38 عصر
آره . ظاهرا دوستان دیتاست رو با دیتابیس اشتباه گرفته اند
ببیند برنامه من ممکنه بعد 2..3 سال یک چیزی حدود 100 تا 200 هزار فیلد فقط توی یک جدولش باشه و این که بخواد بر اساس یکی از فیلدها ( سال مالی ) هر بار فیلتر بشه یکم سرعت برنامه رو پایین میاره . حالا شما فکر کنید بعد 5 سال چه افتضاحی میشه
اینجوری مطمئنم بعد 10 سال سرعت برنامه هیچ تغییری نمیکنه . همه چیز برنامم درست شده جز همین یک قلم . روشیم که آقای کلاهدوزان گفته اند امتحان نکردم . اگه به نتیجه ای نرسم باید همین کارو بکنم . هرچند باز اونطوریم به یک سری مشکلات بر میخورم
آقای آرژنگ نام سالهای مالی عبارت است از DBO+نام سال مالی مثلا ---> DBO1385
اما هیچ جوره نمیشه نام دیتابیس رو به عنوان پارامتر ارسال کرد
من حدس زدم دلیلتان همینه ولی راهه بهتری به نظرم نیامدکه بگم.
میتونید از ویو در اس‌کیو‌ال سرور استفاده کنید، مستقیماً ویو را استفاده کنید، ویو میتونه از ۱ یا ۱۰ تا داتبیس داتا بگیره. اصلاً ویو برایه رپورت سازی کلی کیف میده، لازم هم نیست که اسمه داتابیس را به پارامتر تبدیل کنید، اینکه از کدام ویو داتا بگیرید باید کافی باشه،
حالا یکمی اس‌کیو‌ال باید یاد بگیرید ، یا اینکه بپرسید.

mostafa_leman
دوشنبه 09 بهمن 1385, 20:23 عصر
آقای آرژنگ میشه بهتر توضیح بدین یا یک مثال اینجا بذارین؟

اَرژنگ
دوشنبه 09 بهمن 1385, 20:30 عصر
از ویو (View) به جایه Table استفاده کنید، ویو مانند یک virtual table عمل میکند، میتونید تمام دیتاهایه را که برایه رپورت لازم دارید در یک ویو جا بدید.

از طرف داتابیس باید کمک بگیرید، من برنامه نویسی داتابیسم خوب نیس، حرفه‌ای ها در انجمن اس‌کیو‌ال سرور مپیپلکند، اگر بپرسید از من خیلی بهتر جواب میدند.

mostafa_leman
دوشنبه 09 بهمن 1385, 21:50 عصر
اما من چه جوری میتونم از دیتابیس هایی که هنوز ساخته نشده view بسازم ؟
فکر نمیکنم بشه . اگه منظورتون اینه توی برنامه بسازم بگین چه جوری و چه جوری ربطش بدم به ریپورتم؟

اَرژنگ
دوشنبه 09 بهمن 1385, 22:29 عصر
مظورتان از
[quote=mostafa_leman;303188]اما من چه جوری میتونم از دیتابیس هایی که هنوز ساخته نشده view بسازم ؟
[quote=mostafa_leman;303188] چیه؟ مگر الان از داتبیسهایی که ندارید داتا دریافت میکنید؟
برایه این که داتاستها را پر کنید از چه اس‌کیو الی استفاده میکنید؟

mostafa_leman
سه شنبه 10 بهمن 1385, 08:54 صبح
از sql server 2000 اما مثلا من هنوز dbo1390 رو طراحی نکردم که بخوام ازش view بسازم
هر سال مال که ایجاد میشه دیتابیس اون سال ساخته میشه . چه جوری میتونم از دیتابیس هایی که قراره ساخته بشه view بسازم؟

اَرژنگ
سه شنبه 10 بهمن 1385, 09:21 صبح
شما در اس‌کیو ‌ال سرور میتوانید با GetDate
اینکه چه سالی هستید را پیدا کنید (به صورت داینامیک)، همانطوری که اگر ممکن بود، که داتاببیس را در سی‌شارپ به عنوان پارامتر پس کنید، در داتابیس هم میشه برنامه ریزی کرد که از تاریخ کنونی سرور به عقب حرکت کنه.
مثلاً اگر ۲ ساله بعد شد ، بر حسبه همان قاعده‌ای که گفتید اسمها داتابیس درست میکنند را در اس کیو ال به صورت داینامیک به ویو اضآفه کنه.

منتها این روش جواب را در داتابیس پیدا میکنه و احتیاج به دانستن برنامه‌نویسی Transact -Sql داره.

linux
سه شنبه 10 بهمن 1385, 22:39 عصر
آره . ظاهرا دوستان دیتاست رو با دیتابیس اشتباه گرفته اند
ببیند برنامه من ممکنه بعد 2..3 سال یک چیزی حدود 100 تا 200 هزار فیلد فقط توی یک جدولش باشه و این که بخواد بر اساس یکی از فیلدها ( سال مالی ) هر بار فیلتر بشه یکم سرعت برنامه رو پایین میاره . حالا شما فکر کنید بعد 5 سال چه افتضاحی میشه
اینجوری مطمئنم بعد 10 سال سرعت برنامه هیچ تغییری نمیکنه . همه چیز برنامم درست شده جز همین یک قلم . روشیم که آقای کلاهدوزان گفته اند امتحان نکردم . اگه به نتیجه ای نرسم باید همین کارو بکنم . هرچند باز اونطوریم به یک سری مشکلات بر میخورم
آقای آرژنگ نام سالهای مالی عبارت است از DBO+نام سال مالی مثلا ---> DBO1385
اما هیچ جوره نمیشه نام دیتابیس رو به عنوان پارامتر ارسال کرد
:) دوست عزیز چرا sql server را دست کم می گیرید؟ 100 هزار تا که عددی نیست!
با طراحی صحیح دیتابیس و ایندکس گذاری مناسب اصلا شما مشکلی در سرعت نخواهید داشت.
احتمالا یک یا دوتا از جدول های شما که مربوط به اسناد حسابداری هست حجم زیادی پیدا خواهند کرد که با طراحی درست این جداول و ایندکس گذاری مناسب مشکل شما حل خواهد شد.

ali_kolahdoozan
سه شنبه 10 بهمن 1385, 22:50 عصر
نه خوشم اومد . به این میگن حرف حساب . تا یک میلیون رکوردش رو بخدا من توی برنامه وب بیس تست کردم . روی lan با یک سرور منطقی آخ نمیگه . بعدش هم شما چند تا جدول درگیر داری بقیه نه

mostafa_leman
چهارشنبه 11 بهمن 1385, 14:00 عصر
شاید . پس راهی واسه استفاده از دو دیتاست تو گزارش نیست
از همگی ممنونم

ali_kolahdoozan
چهارشنبه 11 بهمن 1385, 14:16 عصر
یک دیتا ست . اما با join توی اون هر چند تا جدول رو خواستی بفرست