PDA

View Full Version : استخراج اطلاعات از دو تا جدول در گزارش



majid_vb_2008
جمعه 21 اسفند 1388, 18:33 عصر
سلام دوستان
من با كريستال ريپورت مي خوام فاكتور چاپ كنم حالا يك سري اطلاعات از جدول مشخصات مشتري بايد خوانده بشه و يك سري از اطلاعات از جدول فاكتور با يك دونه جدول مشكل ندارم ولي براس دوتا جدول رو بلد نيستم كمك كنيد. :خجالت::خجالت::خجالت::خجالت:: وس::بوس:

amin_iman82
شنبه 22 اسفند 1388, 05:13 صبح
چه فرقی داره مجید جان؟
شما همونطور که یک جدول رو به ریپورتت اضافه میکنی جدول بعدی رو هم اضافه کن ، مشکلی نداره.

saman_itc
شنبه 22 اسفند 1388, 08:17 صبح
من این مشکل بطور شدید داشتم.شما میتونی تو برنامه ات یه جدول کمکی تو بانکت بسازی و اون جدولارو بریز تو جدول کمکی .و انو بیار تو کریستال

majid_vb_2008
شنبه 22 اسفند 1388, 10:55 صبح
چه فرقی داره مجید جان؟
شما همونطور که یک جدول رو به ریپورتت اضافه میکنی جدول بعدی رو هم اضافه کن ، مشکلی نداره.

دوست من اگر امکان داره بیشتر توضیح بده
اخه به کریستال ریپورت باید یک sqlstring داده بشه

kebriya
شنبه 22 اسفند 1388, 11:58 صبح
منظورشون اینه که موقع طراحی ریپورت جداول که می خوای رو بیار

majid_vb_2008
شنبه 22 اسفند 1388, 13:18 عصر
منظورشون اینه که موقع طراحی ریپورت جداول که می خوای رو بیار

متوجه نشدم اگه مي شه بيشتر توضيح بديد.

bad_boy_2007
شنبه 22 اسفند 1388, 20:04 عصر
همانگونه که میدانید کریستال ریپورت از TypedDataset ها پشتیبانی میکند ، یعنی جداول باید در زمان برنامه نویسی در دیتاست وجو داشته باشد و از جداول RunTime و داینامیک پشتیبانی نمیکند .

پس باید یک جدول در دیتاست داشته باشید ، حال سوال این است که آیا باید این جدول یک جدول حقیقی در دیتابیس هم باشد ؟

جواب ، خیر

اگر داده هایتان مجموعه داده های محاسبه شدنی اند مثلا داده های فروش که جمع فروش را حساب میکنند و ... که این داده ها بصورت مستقیم در دیتابیس وجود ندارند :

- یک StoredProcedure ایجاد کنید که مقدار دلخواهتان را برگرداند مثلا :


Create Procedure [dbo].[sp_Products_anbar_relation_SelectRow]
@id_anbar smallint,
@id_products int
As
Begin
Select
[id_anbar],
[id_products],
[amount_first],
[amount],
[status],
[Price],
[Min]
From Products_anbar_relation
Where
id_anbar=@id_anbar
and
id_products=@id_products
End


- این StoredProcedure را از بخش ServerExplorer انتخاب کنید و در دیتاستتان بیندازید

- با یک مجموعه کد مشابه ذیل داده ها را در جدول دیتاست پر کنید


Dim cn As New SqlClient.SqlConnection("رشته اتصال")
Dim cmd As New SqlClient.SqlCommand("[sp_Products_anbar_relation_SelectRow]", cn)
Dim da As New SqlClient.SqlDataAdapter(cmd)
Dim ds As New DSProducts
Dim STR As New STRProductAnbar
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.Add("@id_products", SqlDbType.Int).Value = IDProducts
cmd.Parameters.Add("@id_anbar", SqlDbType.SmallInt).Value = IDAnbar
cn.Open()
da.Fill(ds.Products_anbar_relation)
cn.Close()


-منبع داده گزارش کریستال را دیتاست قرار داده و گزارشتان را بر پایه دیتاست طراحی کنید

- نمونه جدید از گزارش را ایجاد و منبع داده دیتاست پر شده را برایش ارسال کنید :


rpt.SetDataSource(DS)

amin_iman82
شنبه 22 اسفند 1388, 20:31 عصر
دوست من اگر امکان داره بیشتر توضیح بده
اخه به کریستال ریپورت باید یک sqlstring داده بشه

مجید جان من روی Database Fields کلیک راست میکنم ، بعد Data Expert رو میزنم بعد در پنجره ی باز شده از لیست سمت چپ Create New Connection رو باز میکنم و روی OLE DB کلیک کن. حالا در پنجره ی باز شده یک لیست هست ، اگه بانک Access استفاده میکنی مورد اول و اگر SQL یا ... استفاده میکنی مورد مخصوص به خودشون رو انتخاب کن ، بعد مسیر بانک رو بده و ... در آخر لیست جدول ها میاد ، حالا هرکدوم از جدولهارو لازم داری به گزارش اضافه کن ، یا اگه از هرجدول فقط فیلد خاصی رو نیاز داری همون فیلد رو اضافه کن.

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

amin_iman82
شنبه 22 اسفند 1388, 20:49 عصر
اگه بازم مشکل حل نشد بگو یه سمپل درست کنم مجید جان.

majid_vb_2008
دوشنبه 20 اردیبهشت 1389, 09:18 صبح
اگه بازم مشکل حل نشد بگو یه سمپل درست کنم مجید جان.

امين جان اگر زحمتش رو بكشي ممنون مي شم كارم گيره همينه

ممنون :بوس::بوس::بوس::بوس::بوس:

saadi2
دوشنبه 20 اردیبهشت 1389, 10:03 صبح
من نمیدونم چرا اینقدر لقمه رو دور سرتون میپیچونید
دوست عزیز اگر از sql استفاده میکنی یک view بساز که سلکتت از دو جدول توش باشه و اون ویو رو مثل یک جدول در کریستالت اضافه کن این راه حل بسیار ساده
اما راهی که آقای bad_boy_2007 (http://barnamenevis.org/forum/member.php?u=28601) گفتند هم بسیار درسته اما پیچیده تر

b.mahsa
دوشنبه 20 اردیبهشت 1389, 13:13 عصر
البته راه امين آقا كاملا درسته . ولي چون گزارش روي دو جدول هست يعني روي ضرب دو جول هست. پس ممكن كه ما سطر هاي نادرست داشته باشيم استفاده از view منطقي تره .
چون خود sqlserver سطر هاي نادرست رو حذف ميكنه. به نظر منم يه view بساز از دوتا جدولت و اون رو بده به crystal report

majid_vb_2008
دوشنبه 20 اردیبهشت 1389, 20:40 عصر
من نمیدونم چرا اینقدر لقمه رو دور سرتون میپیچونید
دوست عزیز اگر از sql استفاده میکنی یک view بساز که سلکتت از دو جدول توش باشه و اون ویو رو مثل یک جدول در کریستالت اضافه کن این راه حل بسیار ساده



ببخشيد دوست من من تازه كار هستم اگر ممكن است يك بيشتر توضيح بديد يا يك نمونه كد برام بزاريد

ممنون ..............