PDA

View Full Version : سوال: بروز كردن مقدار يك فيلد تو ديتابيس؟



rezabnm
چهارشنبه 25 آذر 1388, 22:27 عصر
سلام يه سوال چه جوري ميشه يه فيلد از نوع اينتيجر يا هر نوع ديگه اي رو آبديت كرد؟ مثلا من دارم براي پروژه درسيمون يه نرم افزار انتخاباتي دارم طراحي ميكنم كه تو اون فردي كه ميخواد راي بده مياد و تو صفحه خودش با ريس جمهور خودش راي ميده خوب حالا هركسي كه مياد با انتخاب نماينده و تايد كردن انتخاب اين عمل باعث ميشه تا يك امتياز (يا عدد)به فيلدي كه براي هر نماينده تعين شده تا نشان دهنده تعداد افرادي باشه كه بهش راي دادن اضافه بشه حالا من تو اين قسمت موندم كه چرا دستور updating كه من نوشتم هيچ عملي رو روي ديتابيس انجام نميده اگه ميشه كمكم كنيد با تشكر.

Imports System.Data
Imports System.Data.SqlClient
Public Class Form2
'متقيري است كه به كمكش مي فهمم كه چه تعداد قبلا اين نماينده راي داشته و به اون يكي ضافه ميكنم و ميخوام اين مقدار رو دوباره تو يه فيلد قرار بدم اين همون اصلي است
Public rai As Integer
'به كمك اين متغير ميخوام بفهمم كه به كدوم فيلد تو كدوم ركورد بايد اضافه بشه
Public sdd As String

Dim objConnection As New SqlConnection("Data Source=.\SQLEXPRESS;AttachDbFilename=" & My.Application.Info.DirectoryPath.ToString() & "\databaseentekabat.mdf;Integrated Security=True;User Instance=True")
Dim objDataAdapter As New SqlDataAdapter()
Dim objDataSet As New DataSet()
Dim objDataView As DataView
'يه تابع كه با فراخواني اون ميخوام عمل آپديت كردن فيلد انجام بشه
Sub update1()
'اين همون تعداد راي كه با انتخاب راي دهنده يكي زياد ميشه
rai += 1
Dim con As SqlConnection = New SqlConnection("Data Source=.\SQLEXPRESS;AttachDbFilename=" & My.Application.Info.DirectoryPath.ToString() & "\databaseentekabat.mdf;Integrated Security=True;User Instance=True")
Dim dadp As SqlCommand = New SqlCommand("UPDATE info_namayande SET [تعداد اراي بدست آورده]=@number WHERE [كدنماينده]=@sdd", con)
con.Open()
'با اين دستور سعي كردم عمل آپديت رو انجام بدم
dadp.Parameters.AddWithValue("@number", rai)
'از اين تريق خواستم دستاورات رو رو ديتابيس اجرا كنم البته اين روش رو تو يه پيديف زبان اصلي ديدم ولي خوب متوجه نشدم چيكار كرده
dadp.ExecuteNonQuery()
con.Close()

End Sub


Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'خوب تو برنامه ام يه ديتا گريد گزاشتم كه اون رو به اين روش پر كردم البته اين روش هم از اون كتابه نگاه كردم
objDataAdapter.SelectCommand = New SqlCommand()
objDataAdapter.SelectCommand.Connection = objConnection
objDataAdapter.SelectCommand.CommandText = "SELECT [كد نماينده],[نام],[نام خانوادگي],[سن],[محل تولد],[رزومه كاري],[آخرين مدرك تحصيلي],[محل اخذ آخرين مدرك تحصيلي],[برنامه هاي آينده نماينده] FROM info_namayande "
objDataAdapter.SelectCommand.CommandType = CommandType.Text
objConnection.Open()
objDataAdapter.Fill(objDataSet, "info_namayande")
objConnection.Close()
DataGridView1.AutoGenerateColumns = True
DataGridView1.DataSource = objDataSet
DataGridView1.DataMember = "info_namayande"
'اگه شد اين دوتاروهم توضيح بديد چون نفهميدم فقط اضافه كردم
objDataAdapter = Nothing
objConnection = Nothing

End Sub


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'خوب اول چك ميكنم كه كهربر از اون تعدادي كه من در نظر گرفتم وارد نكنه وگرنه بهش پيغام خطا نشون ميدم
If TextBox1.TextLength < 4 Then
Label3.ForeColor = Color.Red
Label3.Text = "لطفا در وارد كردن كد نماينده مورد نظر دقت فرماييد "
Else
'اين يه متغير كمكي كه به وسيله اون دو مقدار رو با هم چك ميكنم
Dim dsd As String = TextBox1.Text.ToString()
Dim conn As SqlConnection = New SqlConnection("Data Source=.\SQLEXPRESS;AttachDbFilename=" & My.Application.Info.DirectoryPath.ToString() & "\databaseentekabat.mdf;Integrated Security=True;User Instance=True")
Dim cmd As SqlCommand = New SqlCommand("SELECT [كد نماينده],[تعداد اراي بدست آورده] from info_namayande", conn)
'اينم براي اينكه نتيجه يه مسيج باكس رو نتيجشو بفهمم
Dim response As MsgBoxResult
Dim read As SqlDataReader
conn.Open()
read = cmd.ExecuteReader
'حالا ميگم كه تمم ركورد هام رو بخونه
While read.Read
'چك ميكنه كه دو مقدار باهم برابر باشن
If dsd = read("كد نماينده").ToString() Then
'از كاربر ميخوام كه عملشو تايد كنه
response = MsgBox("آيا شما ميخواهيد راي خود را صبت كنيد؟", MsgBoxStyle.YesNo, "تايد ")
'اگه جوابش مثبت بود كه
If response = MsgBoxResult.Yes Then
'فيلد مربوت به تعداد آراي بدست آمده رو ميخونه و تو يه متغير ميريزه
rai = Val(read("تعداد اراي بدست آورده").ToString())
'همچنين كد نماينده رو البت درستش اينكه به اين متغير نيازي نباشه
sdd = read("كد نماينده").ToString()
'اينم براي اين گذاشته بودم كه مطمن شم كه مقدار درشت خونده شده
Label4.Text = rai
'نميدونم كارم درست بوده يا نه ولي اينجا كانكشن رو بستم دليلشم اينكه ديگه گيج شودم موندم
conn.Close()
'تابعي كه اول صفحه گذاشتمش رو فراخوني ميكنم
update1()
'خواستم كه به اين ترتيب ديگه بقيه كدها خونده نشه
Exit Sub
Else
'اگر كاربر تو پيغامي كه بهش نشون داده بودم نه رو انتخاب ميكرد به اينجا ميرسيد و از حلقه خارج ميشه
Exit While
End If

Else
'اگه كد نمايندهرو اشتباه وارد كنه اين پيغام ظاهر ميشه
MsgBox("نماينده اي با كد مورد نظر شما يافت نشد لطفا در وارد كردن كد دقت فرمايد", MsgBoxStyle.OkOnly, "هشدار ")
End If
End While
'اينجا هم ارتباط قطع ميشه اگه دستور داخل شرط ايف اجرا نشه
conn.Close()
End If
End Sub

End Class


يه متلب ديگه اگه ممكنه منرو راهنماي كنيد چه جوري كام رو تو قالبي بزارم كه حالتش مثل برنامه اصلي باشه من بلد نيستم چندتا از دگمه هاي بالاي صفحه (ويرايش) رو امتحان كردم ولي نشد د آخر هم تصوير صفحه برنامه با يه ارور رو گذاشتم باتشكر.


http://up.iranblog.com/5/1261036168.jpghttp://up.iranblog.com/5/1261012013.jpg

davood-ahmadi
چهارشنبه 25 آذر 1388, 23:37 عصر
ببخشید ولی یکی از ایراداتی که به کار شما وارده اینه که از فیلدهای با نام فارسی استفاده کردید.
فکر کنم این خط رو در در Sub update1 یادتون رفته بود

dadp.Parameters.AddWithValue("@sdd", [كدنماينده])

rezabnm
پنج شنبه 26 آذر 1388, 09:08 صبح
نه یادم نرفته ولی مگه من باید اون فیلد رو هم بروز کنم؟ چون نیازی نداره اما باید بگم که یه بار هم که برای امتحان گذاشتمش درست اررور نداد ولی رو دیتابیسم هم هیچ تاسیری نذاشت بازم ازینکه لطف کردید خواستید کمکم کنید ممنون انشا الله به جبران کرد.:لبخندساده:

rezabnm
پنج شنبه 26 آذر 1388, 13:46 عصر
http://up.iranblog.com/5/1261093189.jpghttp://up.iranblog.com/5/1261110234.jpg

rezabnm
پنج شنبه 26 آذر 1388, 17:36 عصر
يعني ديگه دوستان دوست ندارن جواب من رو بدن؟:ناراحت::گریه: