PDA

View Full Version : تعیین رتبه یک فرد در بانک اطلاعاتی



VB.NET2005
چهارشنبه 19 دی 1386, 18:48 عصر
تعیین رتبه یک فرد در بانک اطلاعاتی اکسس بر اثاث فیلد معدل .

مثلا ما در یک بانک اطلاعاتی اکسس دو فیلد : نام و معدل رو داریم . من میخوام بعد از این که 10 تا اسم و معدل وارد دیتابیس کردم رتبه هر فرد تو کل دیتابیس مشخص بشه و بعد اونو تو گزارشم ایجوری چاپ کنم : [ گزارشم تو کریستال ریپورته ]

نام دانش آموز : y
رتبه در کلاس : x

:. با تشکر از تمامی اساتید محترم .:

maryam_vb
پنج شنبه 20 دی 1386, 15:53 عصر
با سلام
یه راه ساده داره:
شما کافیه که فیلد مربوط به معدل رو در اکسس از نوع z-aتعریف کنی ، بعد برای رتبه بندی از position رکوردها استفاده کنی .

art2000ir
پنج شنبه 20 دی 1386, 17:52 عصر
اگه یک اگوریتم درست بنویسی میتونی رتبه بندی کنی
هرچی عدد رو می خواهی سورت کنی از بانک بخوان همه رو بریز درون بک آرایه بعد سورت کن با دستور سورت بعدش هم بانک رو update کن

VB.NET2005
شنبه 22 دی 1386, 11:55 صبح
با تشکر از شما دوستان :

فقط یه مشکلی هست میتونید یه نمونه کد بزارید ، راستش درست متوجه نشدم .

maryam_vb
شنبه 22 دی 1386, 16:54 عصر
با تشکر از شما دوستان :

فقط یه مشکلی هست میتونید یه نمونه کد بزارید ، راستش درست متوجه نشدم .


اصلاح: تعریف فیلد به صورت z-a هیچ تاثیری در بانک زمانی که با برنامه کار میکنی نداره.

امتحان کردم این کد جواب میده :

Dim i AsInteger = 1
PrivateSub Form4_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) HandlesMyBase.Load
Dim conn AsNew OleDb.OleDbConnection("provider=microsoft.jet.oledb.4.0 ; data source=" & Application.StartupPath() & "\student.mdb")
Dim adap AsNew OleDb.OleDbDataAdapter("select * from class order by avg desc ", conn)
Dim ds AsNew DataSet
conn.Open()
adap.Fill(ds, "class")
dgv.DataSource = ds
dgv.DataMember = "class"
i = ds.Tables(0).Rows.Count
For i = 0 To i - 1
Label1.Text = Label1.Text & vbCrLf & ds.Tables(0).Rows(i).Item(0)
Label1.Text = Label1.Text & Str(i + 1)
Next i
conn.Close()
EndSub

مثال از خروجی:
mina 1
maryam 2
reza 3
.
.
.

VB.NET2005
دوشنبه 24 دی 1386, 11:38 صبح
Dim i AsInteger = 1
PrivateSub Form4_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) HandlesMyBase.Load
Dim conn AsNew OleDb.OleDbConnection("provider=microsoft.jet.oledb.4.0 ; data source=" & Application.StartupPath() & "\student.mdb")
Dim adap AsNew OleDb.OleDbDataAdapter("select * from class order by avg desc ", conn)
Dim ds AsNew DataSet
conn.Open()
adap.Fill(ds, "class")
dgv.DataSource = ds
dgv.DataMember = "class"
i = ds.Tables(0).Rows.Count
For i = 0 To i - 1
Label1.Text = Label1.Text & vbCrLf & ds.Tables(0).Rows(i).Item(0)
Label1.Text = Label1.Text & Str(i + 1)
Next i
conn.Close()
EndSub

دوست عزیز خروجی این کد واسه من این بود :

1 22
2 222
3 24

( در فیلد Avg سه مقدار 22 و 24 و 222 رو داشتم )

maryam_vb
دوشنبه 24 دی 1386, 14:31 عصر
خوب ترتیب فیلدهات تو جدول با برای من فرق میکنه تو جدول من اول name بعد avg
شما این کد رو این جوری تغییر بده:

Label1.Text = Label1.Text & vbCrLf & ds.Tables(0).Rows(i).Item(1)
همین!
اگه بازم مشکلی بود بگو تا برنامه شو برات بزارم.

VB.NET2005
دوشنبه 24 دی 1386, 21:55 عصر
با تشکر از راهنمایی شما دوست گرامی ، واقعا ممنون فقط یه مشکل کوچیکه دیگه هست :
من یه برنامه دارم که هر بار به بانکم یک نام و معدل اضافه میکنم به نظر شما میشه من تو دیتابیسم یک فیلد با نام رتبه ایجاد کنم
که رتبه هر فرد رو با توجه به معدلش و معدل های دیگه در غالب یک عدد خروجی بده .
مثال : خروجی از دیتابیس (فیلد سوم از سمت راست رتبه است)

علی----------- 19 ----------------- 2
احمد ------------- 19.75 ------------ 1
رضا -------------- 17.5----------- 3

در مرحله بعد اگر ما مقادیر جدیدی وارد کنیم :

علی ------------ 19 -------------3
احمد ------------ 19.75 ----------2
رضا ---------------17.5 ------------4
فرزانه-----------------20 -------------1

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

با تشکر

miladr
دوشنبه 24 دی 1386, 23:44 عصر
برای این کار یک view درست کنی بهتره

VB.NET2005
سه شنبه 25 دی 1386, 11:05 صبح
آقای میلاد با تشکر از شما ، فقط میشه یکم کامل تر توضیح بدید یا اگه مثالی در این رابطه دارید بزارید .

miladr
سه شنبه 25 دی 1386, 11:56 صبح
من دوباره سوال شما رو خوندم دیدم شما نام و معدل میگیری در حالی که من فکر کردم شما نام دانشجو و نمره درس رو وارد می کنی حالا میخوای معدل بگیری و sort کنی.
اگر شما نام و معدل میگیری روش دوستمون maryam_vb کاملا درسته اما اگر میخوای مثلا نام دانشجو رو بدی خروجی بگه که این چندم هست

SELECT name,ave, IDENTITY(INT, 1, 1) AS rotbe from class order by avg desc

اینجا فیلد rotbe رتبه طرف تو table شما میشه

art2000ir
سه شنبه 25 دی 1386, 22:16 عصر
شما دقیقا چه کاری مخوااهید انجام دهید ؟
نوشتن برنامه یک کارنامه که دارای رتبه در کلاس و پایه باشه ؟؟؟
یا هدف دیگری را دنبال می کنید ؟
اگر مورد اول است که شما یک دکممه میزارید تا کار رتبه بندی را انحام بده پس هروقت نمره جدید وارد شد یک بار از اول رتبه بندی می کنیم و یا می توانیم بعد از اضافه کردن نمره به بانک این کد اجرا بشود

VB.NET2005
چهارشنبه 26 دی 1386, 12:30 عصر
آقای Art2000ir :
نوشتن برنامه یک کارنامه که دارای رتبه در کلاس و پایه باشه ؟؟؟

من یک برنامه دارم که برای صدور کارنامه های یک کلاس است و من میخواهم در فیلد رتبه در دیتابیسم رتبه هر فرد در کل کلاس در ان ذخیره شود و با افزودن مقادیر جدید خود به خود یا به صورت زدن یک دکمه تغییر کند .

با تشکر از شما

VB.NET2005
دوشنبه 01 بهمن 1386, 15:46 عصر
آقای Art2000ir :
نوشتن برنامه یک کارنامه که دارای رتبه در کلاس و پایه باشه ؟؟؟

من یک برنامه دارم که برای صدور کارنامه های یک کلاس است و من میخواهم در فیلد رتبه در دیتابیسم رتبه هر فرد در کل کلاس در ان ذخیره شود و با افزودن مقادیر جدید خود به خود یا به صورت زدن یک دکمه تغییر کند .

با تشکر از شما

دوستان خواهشن یکی به این سوال جواب بده . . . . :گریه:

Sub Zero
دوشنبه 01 بهمن 1386, 16:54 عصر
اگه منظورتون رو درست متوجه شده باشم شما میخواید همون زمانی که نمره یه فرد رو وارد کردید به صورت RealTime و همزمان رتبه اون فرد رو با توجه به نمره درج شده نمایش بده و درنهایت پس از تایید کاربر در دیتابیس ذخیره بشه .
برای این کار باید در رویداد TextChanged کنترل دریافت کننده نمره این کارها رو انجام بدید .
یه Function بنویسید که فیلد نمره های موجود در دیتابیس رو بخونه و توی یه حلقه For که برای پیمایش رکوردهاست از شرط زیر استفاده کنید.

If ds.Tables(0).Rows(i)<Grade Then return i-1
Grade همون نمره وارد شدس
حالا این Function رو در رویداد گفته شده فراخوانی کنید .
در ضمن جدول شما باید حتما براساس نمره مرتب شده باشه (با توجه به مرتب بودن جدول به صورت صعودی یا نزولی علامت > باید تغییر کنه )

VB.NET2005
دوشنبه 01 بهمن 1386, 18:14 عصر
با تشکر از توجه شما دوست عزیز Sub Zero :

با عرض معضرت میشه یه نمونه کد کامل بزارید (البته هر وقت که فرصت شد) .

Sub Zero
دوشنبه 01 بهمن 1386, 21:33 عصر
با عرض معضرت میشه یه نمونه کد کامل بزارید (البته هر وقت که فرصت شد) .
من روش کارو بهتون گفتم . کدنویسیش که دیگه کاری نداره شما شروع کنید هرجاش که گیرکردید بپرسید .

VB.NET2005
دوشنبه 01 بهمن 1386, 21:55 عصر
اقای Sub Zero عزیز :
من آماتور هستم ، (یه Function بنویسید که فیلد نمره های موجود در دیتابیس رو بخونه و توی یه حلقه For که برای پیمایش رکوردهاست از شرط زیر استفاده کنید.)

میشه یکم بیشتر توضیح بدید .

VB.NET2005
چهارشنبه 03 بهمن 1386, 14:27 عصر
کـــــــمــــــــک

VB.NET2005
پنج شنبه 04 بهمن 1386, 21:57 عصر
آقای Sub Zero عزیز نمیشه بیخیال بشین . خیلی بهش احتیاج دارم به خدا هرچی سعی کردم نتونستم .

" با تشکر پیشاپیش "

VB.NET2005
جمعه 05 بهمن 1386, 21:58 عصر
اساتید محترم نظر(یعنی سورس) ی ندارن (-:

VB.NET2005
دوشنبه 08 بهمن 1386, 17:41 عصر
دوستان نظری ندارید ؟ ؟ ؟

VB.NET2005
چهارشنبه 10 بهمن 1386, 16:21 عصر
دوستان من 2 ، 3 هفتس که گیره همین قسمت از برنامم اگه کسی راهی بلده کمک میخام . . .

linux
پنج شنبه 11 بهمن 1386, 20:23 عصر
ببین 2 راه حل هست که اینکار را انجام بدهی
1 - در خود دیتابیس
2 - در برنامه

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

و کدام راه را انتخاب می کنید

VB.NET2005
پنج شنبه 11 بهمن 1386, 21:05 عصر
با سلام به شما دوست عزیز :
فکر کنم اگه در خو دیتابیس باشه بهتره چون بعد میخام اونو تو ریپورت نشون بدم .
(VB.NET2003 , Access2003)
__________________________________________________ ______

نوشتن برنامه یک کارنامه که دارای رتبه در کلاس .
من یک برنامه دارم که برای صدور کارنامه های یک کلاس است و من میخام در فیلد رتبه در دیتابیسم رتبه هر فرد در کل کلاس در ان ذخیره شود و با افزودن مقادیر جدید خود به خود یا به صورت زدن یک دکمه تغییر کند .

linux
پنج شنبه 11 بهمن 1386, 22:52 عصر
با سلام به شما دوست عزیز :
فکر کنم اگه در خو دیتابیس باشه بهتره چون بعد میخام اونو تو ریپورت نشون بدم .
(VB.NET2003 , Access2003)
__________________________________________________ ______

نوشتن برنامه یک کارنامه که دارای رتبه در کلاس .
من یک برنامه دارم که برای صدور کارنامه های یک کلاس است و من میخام در فیلد رتبه در دیتابیسم رتبه هر فرد در کل کلاس در ان ذخیره شود و با افزودن مقادیر جدید خود به خود یا به صورت زدن یک دکمه تغییر کند .

اولا همین حالا پروژه ات را تعطیل کن و vs2008 را نصب کن و بجای access2003 از sql server compact edition استفاده کن. و بعد شروع کن ادامه پروژه

و چون قرار هست که با compact کارکنی درنتیجه نمی توانی در خود sql این کار را انجام دهی. هر چند با خود اکسس 2003 هم نمی توانی
بعدش شما لازم نیست یک مقدار محاسباتی را در جدول ذخیره کنی هر وقت لازم شد محاسبه می کنی و نمایش می دهی.


Name Marks
---------- ------
a 10.00
b 20.00
c 19.00
d 17.00
t 15.00
q 11.00
r 20.00
s 19.00



Name Marks rank
---------- ------ -----------
a 10.00 6
b 20.00 1
c 19.00 2
d 17.00 3
t 15.00 4
q 11.00 5
r 20.00 1
s 19.00 2


اگر از sql server 2000 , 2005 استفاده می کردی از این تابع می توانستی استفاده کنی


ALTER FUNCTION dbo.GET_RANK
(@MARK int )
RETURNS INT
AS
BEGIN
/* sql statement ... */
DECLARE @sName varchar(50),@marks numeric(4,2),@message varchar(80),@rank int,@oldMark numeric(4,2)

set @rank=1
set @oldMark=(select max(marks) from test)
DECLARE curTest CURSOR FOR
SELECT sName,marks
FROM test
where marks > =@mark
Group by sName,marks
order by marks desc
OPEN curTest
FETCH NEXT FROM curTest
INTO @sName, @marks
WHILE @@FETCH_STATUS = 0
BEGIN
if (@marks <> @oldmark)
begin
set @rank=@rank+1
end

-- Get the next author.
set @oldmark=@marks
FETCH NEXT FROM curTest
INTO @sName, @marks
END
CLOSE curTest
DEALLOCATE curTest
return @rank
END

از این کد هم برای بدست آورد رتبه می توانی استفاده کنی


select sName,Marks,dbo.Get_rank(marks) as rank
from Test

VB.NET2005
جمعه 12 بهمن 1386, 09:21 صبح
کاملا موافقم ( اولا همین حالا پروژه ات را تعطیل کن و vs2008 را نصب کن و بجای access2003 از sql server compact edition استفاده کن. و بعد شروع کن ادامه پروژه)
-------------------------------------------------------------------------------------------------------
ولـــــــــی نمیشه ، یعنی هیچ راه دیگه ای واسه این کار تو 2003 و Access 2003 نیست . . .
دوست عزیز آقای Sub Zero در پست های قبلیشون یه اشاره ای داشتن اما باور کنید من نتونستم با ای روش کاری بکنم و ایشون هم خیلی سرشون شلوغه میخاستم ببینم شما چیزی دستگیرتون نمیشه .

با تشکر از شما

VB.NET2005
جمعه 12 بهمن 1386, 09:32 صبح
پست اقای Sub Zero :

اگه منظورتون رو درست متوجه شده باشم شما میخواید همون زمانی که نمره یه فرد رو وارد کردید به صورت RealTime و همزمان رتبه اون فرد رو با توجه به نمره درج شده نمایش بده و درنهایت پس از تایید کاربر در دیتابیس ذخیره بشه .
برای این کار باید در رویداد TextChanged کنترل دریافت کننده نمره این کارها رو انجام بدید .
یه Function بنویسید که فیلد نمره های موجود در دیتابیس رو بخونه و توی یه حلقه For که برای پیمایش رکوردهاست از شرط زیر استفاده کنید.


If ds.Tables(0).Rows(i)<Grade Then return i-1

Grade همون نمره وارد شدس
حالا این Function رو در رویداد گفته شده فراخوانی کنید .
در ضمن جدول شما باید حتما براساس نمره مرتب شده باشه (با توجه به مرتب بودن جدول به صورت صعودی یا نزولی علامت > باید تغییر کنه )

linux
جمعه 12 بهمن 1386, 11:14 صبح
کاملا موافقم ( اولا همین حالا پروژه ات را تعطیل کن و vs2008 را نصب کن و بجای access2003 از sql server compact edition استفاده کن. و بعد شروع کن ادامه پروژه)
-------------------------------------------------------------------------------------------------------
ولـــــــــی نمیشه ، یعنی هیچ راه دیگه ای واسه این کار تو 2003 و Access 2003 نیست . . .
دوست عزیز آقای Sub Zero در پست های قبلیشون یه اشاره ای داشتن اما باور کنید من نتونستم با ای روش کاری بکنم و ایشون هم خیلی سرشون شلوغه میخاستم ببینم شما چیزی دستگیرتون نمیشه .

با تشکر از شما
خوب اگر بلد باشی با دیتاست ها کار کنی برای تعیین رتبه باید کل نمرات را بصورت نزولی از دیتا بخوانید و در دیتاست بریزید بعدش شروع کنید از ردیف اول مقایسه کردن ابتدا یک متغیر به نام oldrank در نظر بگیرد برای مقدار اولیه بزرگترین نمره را در آن قرار دهید، بعدش سطر به سطر نمره را با oldrank مقایسه کنید اگر oldran<>rank بود یکی به rank اضافه کنید در غیر اینصورت که هیچی و در آخر مقدار فعلی rank را در oldrank قرار دهید.

Sub Zero
شنبه 13 بهمن 1386, 16:24 عصر
مثل اینکه هنوز درگیر این پروژه هستی .خوب به صورت مرحله به مرحله برات توضیح میدم که چی کارکنی .
ابتدا یه Function بنویس :

Function GetRank(ByVal sender) As Int32
Dim param As String
If sender.text = "" Then
param = 0
Else
param = sender.text
End If
Try
Dim con As New OleDb.OleDbConnection(YourConnectionString)
Dim cmdText As String = "select count(rank) from [Table] where (grade>=" & param & ")"
Dim cmd As New OleDb.OleDbCommand(cmdText, con)
con.Close()
con.Open()
Dim rn = cmd.ExecuteScalar()
If rn Is Nothing Then
Return 1
Else
Return Val(rn.ToString) + 1
End If
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Function
این تابع یه متغییر داره به نام Param که مقدارش نمره وارد شدس
دقت کن رشته CmdText دستویه که رتبه فرد رو از دیتابیس میخونه
حالا توی روداد TextChanged کنترل مربوط به دریافت نمره اونو فراخونی کن مثل این :

Private Sub GradeTextBox_TextChanged(..) Handles GradeTextBox.TextChanged
Me.RankTextBox.Text = GetRank(sender)
End Sub
ارگومان Sender حاوی کنترل دریافت کننده نمره است.
RankTextBox هم که تکست باکس دریافت رتبه است.
اگه این کارا رو درست انجام داده باشی با تایپ نمره همزمان رتبه اون فرد در تکست باکس مربوطه نمایش داده میشه .
---------------------
مرحله بعدی درج مشخصات در دیتابیس هست. برای اینکار یه دکمه روی فرمت قرار بده وکد زیر رو در رویداد Click دکمه بنویس :

Dim con As New OleDb.OleDbConnection(My.Settings.infoConnectionSt ring)
Dim cmd As New OleDb.OleDbCommand("Insert Into [Table] (name,grade,rank)" & vbCrLf & " Values(" _
& "'" & NameTextBox.Text & "'," & GradeTextBox.Text & "," & RankTextBox.Text & ")", con)
con.Close()
con.Open()
cmd.ExecuteNonQuery()
همونطور که میبینی فیلدهای جدول شامل نام -نمره و رتبه هست .
-----------------------------------
هنوز تموم نشده یه مسئله دیگه باقی مونده .
وقتی مشخصات فرد جدیدی در دیتابیس درج میشه بسته به رتبه اون فرد فیلد rank یا رتبه باید بازسازی بشه . مثال:
فرض کنید علی با نمره 18 در رتبه اول - احمد با نمره 15 در رتبه دوم قراردارن . میخوایم رضا با نمره 20 رو در جدول ذخیره کنیم . با فراخوانی تابع GetRank رتبه رضا 1 در نظر گرفته میشه چون بالاترین نمره در جدوله . اگه بخوایم همین جوری رکورد رو ذخیره کنیم . جدول به صورت زیر میشه

name grade rank
ali 18 1
ahmad 15 2
reza 20 1
یعنی دونفر با رتبه 1 در جدول وجود دارند یکی با نمره 18 و یکی با نمره 20 .
پس باید ترتیبی اتخاذ بشه تا این مشکل پیش نیاد . اولین کار اینه که حتما جدول رو بر اساس فیلد نمره به صورت نزول مرتب کنیم. وسپس فیلد رتبه رو در یک رویه به صورت زیر دوباره مقدار دهی کنیم :

Sub fillrank()
Try
Dim i As Int32 = 0
Dim con As New OleDb.OleDbConnection(YourConnectionString)
Dim da2 As New OleDb.OleDbDataAdapter("select * from [Table] order by grade DESC", con)
Dim cb As New OleDb.OleDbCommandBuilder(da2)
con.Close()
con.Open()
Dim dt As New DataTable
da2.Fill(dt)
For i = 0 To dt.Rows.Count - 1
dt.Rows(i).Item("rank") = i + 1
Next
.
.
.
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
---------------------------------
به جای اون نقطه ها دستورات Update وچیزایی که میخوای رو بنویس .

رسیدیم به پایان .

VB.NET2005
شنبه 13 بهمن 1386, 18:53 عصر
با تشکر فراوان از شما دوست عزیز که به سوالم توجه کردید ، ببخشید وقت امتحانات هم هست و من مزاحمتون شدم بازم ببخشید ، انشاالله موفق باشید . . .
ولی من به یه مشکل بر خوردم میشه به سورسه زیر یه نگاه بندازید .

: بــا تــشــکــر :

Sub Zero
شنبه 13 بهمن 1386, 22:50 عصر
اگه منظورت ایرادیه که از دستور Insert می گیره به خاطر اینه که چند تا نکته رو رعایت نکردی:
1- Avg یک کلمه کلیدی برای اکسسه برای استفاده از اون باید به این صورت بنویسید :
[Avg]
2- فیلدهایی که نوعشون به صورت رشته ای باید در دستور فوق بین ' ' قرار بگیرند . با این حساب دستورت رو به این صورت بنویس :

Dim cmd As New OleDb.OleDbCommand("Insert Into stTable (Name,[Avg],rotbe)" & vbCrLf & " Values(" _
& "'" & NameTextBox.Text & "','" & GradeTextBox.Text & "','" & RankTextBox.Text & "')", con)

VB.NET2005
شنبه 13 بهمن 1386, 23:22 عصر
با تشکر از توجهتون :
ولی مشکلم تو تعیین رتبه است خودتون اگه نگاه کنید درست رتبه رو نشون نمیده "میدونم یه جای کارو اشتباه کردم"

VB.NET2005
دوشنبه 15 بهمن 1386, 20:04 عصر
دوست عزیز جناب Sub Zero :
با تشکر از زحماتتون : ببخشید اون قسمتی که گفته بودین (یعنی دونفر با رتبه 1 در جدول وجود دارند یکی با نمره 18 و یکی با نمره 20 .
پس باید ترتیبی اتخاذ بشه تا این مشکل پیش نیاد . اولین کار اینه که حتما جدول رو بر اساس فیلد نمره به صورت نزول مرتب کنیم. وسپس فیلد رتبه رو در یک رویه به صورت زیر دوباره مقدار دهی کنیم )

من باید این قسمت (سپس فیلد رتبه رو در یک رویه به صورت زیر دوباره مقدار دهی کنیم رو کجا فراخوانی کنم .)
در ضمن من برای ذخیره از یه کلاس استفاده میکنم و در اون قسمتی که گفته بودین دستور Update رو بزارم وقتی فرم اجرا میشه میگه سینتکسش اشتباهه .

خیلی خیلی از شما ممنونم واقعا کمک بزرگی به من کردید موفق و سربلند باشید .

saeghe3000
سه شنبه 16 بهمن 1386, 01:03 صبح
سلام به دوست عزیز VB.Net 2005
آقا من یه خورده دیر به این تاپیک رسیدم
عزیز همه روش هایی که دوستان گفتند همه درست و متینه .
ولی اگه من درست مشکلت رو فهمیده باشم ، شما اینو می خوای که مثلا توی یک Table دو تا فیلد نام و معدل داری ، حالا می خوای یه گزارش داشته باشی که بیاد بگه فلانی معدلش چنده و رتبش تو کلاس چندمه
اگه مشکلت اینه که راه حلت پیش منه ، اگه این نیست دیگه ادامه پست رو نخون و از همه معذرت خواهی می کنم :

شما بیا و از Crystal Report استفاده کن . اونجا دیگه لازم نیست که یه فیلد تو ی Table ات اضافه کنی تا به صورت RunTime تشخیص بده که رتبه فلانی چنده و بعد همه رو تو بانک ذخیره کنه
شما همون نام و معدل رو داری . بعد موقع گزارش گیری ، اول یه دیتاست می سازی و اونو با OledbAdapter یا هر چیز دیگه پر می کنی .

توی صفحه Crystal Report یه Group میسازی بر طبق معدل و همون جا نوشته بر چه اساسی sort کنه که اونو بذار Descending .
Group Header رو پاک کن. بعد فیلد های نام و معدل رو بنداز اوجا .
(قسمت اصلیش اینجاس) توی Special Field یه چیزی داریم به اسم Record Number که اینم بنداز کنار همونا
حالا هم افراد بر اساس نمراتشون sort شدن هم کنارش رتبشونو زده .

امیدوارم مشکلت رو درست فهمیده باشم .
من اینو تست کردم ، برای این مشکلی که من فهمیدم جواب میده در حد بوندس لیگا .

VB.NET2005
سه شنبه 16 بهمن 1386, 12:55 عصر
با تشکر از شما :
دوست عزیز گزارش خود برنامم خرابه دیگه چه برسه به اینکه این کارا رو هم بکنم .

Sub Zero
چهارشنبه 17 بهمن 1386, 14:49 عصر
بازم سلام این دفعه مجبور شدم یه روز تمام بشینم رو برنامت کار کار کنم .گفتم حالا که قصد کمک دارم پس تا اخرش باشم .
سورس زیر دقیقا بهت می گه چی کار کنی اما وجدانی ما رو درگیر دستور Update بانک اکسس نکن
چون واقعا کلافم کرد . در ضمن این سورس مربوط به Vs2005 پس به حرف Linux گوش کن و یواش یواش از 2003 حداقل یه پله بیا بالا .

VB.NET2005
پنج شنبه 25 بهمن 1386, 13:51 عصر
با تشکر از شما جناب SubZero عزیز :

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

( بازم از اینکه وقته تونو گرفتم عذر خواهی میکنم )

VB.NET2005
یک شنبه 28 بهمن 1386, 21:29 عصر
اساتید مشکل اپدیت این برنامه چیه آخه ؟ ؟ ؟

VB.NET2005
دوشنبه 29 بهمن 1386, 16:45 عصر
با تشکر فراوان از جناب اقای SUB ZERO عزیز به خاطر کمک بزرگی که به من کردند واقعا از شما ممنونم .
انشاالله در تمام مراحل زندگی موفق باشید مخصوصا امتحانات .
و با تشکر از جناب اقای nasseritemp جهت اصلاح کد اپدیت .
نسخه کامل :