PDA

View Full Version : سوال: استخراج داده هاي خاصي در Datagrid



tolid123456789
سه شنبه 05 آذر 1392, 10:54 صبح
سلام
ما در نرم افزارهايي مثل Access مي تونستيم query با يك شرط پارامتري تعريف كنيم و بعد يك query ديگه از query اول بسازيم بدون اضافه كردن اون فيلدي كه شرط پارامتري داره . با اين كار مي تونستيم query دوم رو بدون فيلدي كه شرط پارامتري داره گروه بندي كنيم و در زمانهايي كه دنبال تجميع ركوردها بوديم در عين حال كه فيلد شرطي پارامتري داشتيم از حضور اين فيلد در query نهايي جلوگيري كنيم تا گروه بندي رو با مشكل مواجه نكنه.
الان من دقيقا اين مسئله رو با SQL و برنامه اي كه در VB.net مي نويسم دارم .
فرض كنيد جدولي مشابه زير دارم:
كد دانشجو+نام دانشجو+كد ترم+نمره مثبت
1+حسين+1+100
1+حسين+1+200
1+حسين+2+100
حالا مي خوام مجموع نمره هاي مثبت حسين(كد دانشجوي 1) رو با شرط پارامتري روي فيلد كد ترم (مثلا ترم هايي كه كدشون كوچكتر از 3 هست)انجام بدم.
سئوال:
من يك View (بدون پارامتر) ساختم و گروه بندي رو انجام مي دم و روي فيلد نمره مثبت sum رو قرار مي دم.
بعد اين ويو رو در vb.net بهش پارامتر ميدم(ظاهرا پارامتر رو نمي تونيم در view در sql اضافه كنيم)
مشكل اينجا شروع ميشه:
اولا view من خروجي زير رو داره:
كد دانشجو+نام دانشجو+كد ترم+نمره مثبت
1+حسين+1+300
1+حسين+2+100
ولي من در datagrid vb.net مي خوام جدول زير رو نمايش بدم (من مجموع نمرات مثبت رو مي خوام و برام مهم نيست در ديتا گريد كد ترم بياد)
كد دانشجو+نام دانشجو+نمره مثبت
1+حسين+400
اگر مثل روشي كه در access بود ميشد عمل كرد ابتدا يك query از جدولم مي گرفتم و گروه بنديش مي كردم و شرط پارامتري روي فيلد هاي كد دانشجو و كد ترم ميذاشتم و جدول زير به وجود مي اومد:
كد دانشجو+نام دانشجو+كد ترم+نمره مثبت
1+حسين+1+100
1+حسين+1+200
1+حسين+2+100
حالا در query دوم از همين query استفاده مي كردم و ديگه فيلد كد ترم رو اضافه نمي كردم و sum رو روي فيلدنمره مثبت قرار مي دادم و جدول خروجي بدست مي يومد و مشكل منم حل ميشد:
كد دانشجو+نام دانشجو+نمره مثبت
1+حسين+400
----------------------------------------------------------------------------------------------------------------
به عبارتي من در vb.net وقتي دارم datagrid رو پر مي كنم از كد sql ي مي خوام استفاده كنم كه خودش فيلد شرطي پارامتريم(كد ترم) رو نداشته باشه (براي اينكه گروه بنديم رو خراب ميكنه) ولي خودش از view يا هر امكان ديگه اي تغذيه بشه كه شرط پارامتري رو ساپورت كنه.

اميدوارم موضوع رو تونسته باشم خوب توضيح بدم در ضمن اين موضوع مسئله اين بين sql و vb.net بود درقسمت sql سئوال رو توضيح دادم در قسمت vb.net هم گذاشتم جون با اين قسمت بيشتر فعاليت داشتم.
ممنون از توجهتون.

behrooz69
چهارشنبه 06 آذر 1392, 02:49 صبح
دوست من سوالتو خیلی گنگ پرسیدی .

هرچی فکر می کنم خیلی گنگه :D
ولی تا اونجا که فهمیدم توضیح می دم .
اولا که شما تو برنامت از DataGridView استفاده کردی و بالا سمت راستت مثلث هست و یکی مونده به آخری نوشته Add Query اونو بزنی یا دستی یا با Query Builder همون دکمه سمت راست پایین می تونی Query خودتو بنویسی با فیلتر هایی که خودت می خوای .

دوم شما چرا لقمه رو 3 دور می چرخونی بعد می خوریش ؟
شما وقتی اطلاعاتتو وارد کردی و خواسی نمره مثبت حسین رو بدست بیاری بیا چون اطالاعاتش واحده بیا با شماره دانشجوییش Select کن و با Select SUM(NomreMosbat( بیا جمع نمره مثبتتو ببین .

شما وقتی جمع نمره مثبت رو می خوای یعنی تو دانشجوت نمره منفی هم داری و عملا از عقل به دوره که تو ورود اطلاعات نمره مثبت و منفی رو تو 1 فیلد وارد کنی . تو جدولت 2 تا فیلد اضافه کن نمره مثبت و نمره منفی و اطلاعات رو ثبت کن . بعد واسه نمایشش تو گرید کد خواص داره و تو کریستال کد خواص .

از کریستال ریپورت استفاده کرید بهتره . چون اگه بخواد اطالاعاتشو می بینه . اگه بخواد پرینت می گیرخ . اگه هم نخواد 1 کلیکه .

شما اطالعات ورودیتو ثبت کن تو جدولت . بعد تو کریستال جدولتو اضافه کن . بعد از فرمول Sum استفاده کن و نام فیلد جدولتو بده خودش جمع کل و کم کل رو می زنه واست . نیاز به 100 تا کوری جدا نیست دوست من .

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

behrooz69
چهارشنبه 06 آذر 1392, 02:52 صبح
و در ضمن دوست من شما با این کد می تونی جمع فیلدتو همزمان انجام بدی و تو دیتا گرید ویوت نشون بدی .

sql = "select SUM(NomreMosbat) from TableShoma where StID '" & TxtStId.Text & "' & "' "
da = New SqlDataAdapter(sql, con)
ds.Clear()
da.Fill(ds, "TableShoma ")

If DataGridView1.Rows.Count <= 0 Then
MsgBox("هیچ موردی یافت نشد", MsgBoxStyle.OkOnly, "")
DataGridView1.Update()
Else
dt = New DataTable
da.Fill(dt)
DataGridView1.DataSource = dt

'da.Fill(dt)
End If