09-04-17, 02:58 AM
الان مع جملة تحديث الجدول وفق حقل المفتاح الرئيسي
نفس الكلام السابق سوى انها تقوم بتحديث الجدول بالمعطيات الجديدة
و في نفس الاطار يمكننا التحديث وفق مجموعة شروط , اذ يصادفك احياناً انك تريد التحديث وفق اكثر من شرط كأن تحدث طالب ما في صف محدد و شعبة محددة و كوننا لا نعرف كم عدد الشروط التي يمكن ان نحدث عن طريقها لذا رايت ان تكون لدينا مصفوفة اخرى خاصة بالشروط تحمل اسماء الاعمدة في الصف الاول و قيم الاعمدة في الصف الثاني كما يلي
حذف سجل من جدول وفق شرط واحد (قيمة المفتاح الرئيسي)
و كذلك الحذف وفق مجموع شروط كما هو حال التحديث
الان ناتي الى عمليات تعبئة الجدول بالبيانات , وله عدة انواع مثل الملئ العادي او الملئ وفق ترتيب محدد و بشرط او بدونه او وفق مجموع شروط
اولاً الملئ بترتيب او بدونه بدون شروط
الدالة تعيد كائن جدول معبئ بالبيانات
ثانياً الملئ وفق شرط
ثالثاً الملئ وفق مجموعة شروط
كل دوال الملئ تعود بجدول بيانات DataTable
ساكتفي بهذا العدد من الدوال حتى الان و اذا اردت التوسع يمكنك ذلك
الخطوة التالية هي العمل على قاعدة البيانات في جانب السيرفر
يتبع...
PHP كود :
''' <summary>
''' تحديث سجل في جدول وفق قيمة حقل المفتاح الرئيسي
''' </summary>
''' <param name="TableName">اسم الجدول المراد تحديثه</param>
''' <param name="Table">الجدول الذي يحوي الحقول و قيمها وهو مصفوفة</param>
''' <param name="FiledKey">اسم حقل المفتاح الرئيسي</param>
''' <param name="ID">قيمة حقل المفتاح الرئيسي</param>
''' <param name="Msg">رسالة حفظ اختيارية</param>
Protected Sub Update_Table(ByVal TableName As String, ByVal Table As Dictionary(Of String, Object), ByVal FiledKey As String, ID As Integer, Optional ByVal Msg As Boolean = False)
If FiledKey = String.Empty Then
MessageBox.Show("حدد حقل المفتاح الرئيسي من فضلك", "تنبيه", MessageBoxButtons.OK, MessageBoxIcon.Stop, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign)
Exit Sub
End If
If Table.ContainsKey(FiledKey) Then
Table.Remove(FiledKey)
End If
Dim Resuilt As Integer = 0
Dim UpdatetStr As String = "Update " & TableName & " Set "
Dim Column As String = String.Empty
For X As Integer = 0 To Table.Count - 1
Column = Table.Keys.ElementAt(X)
UpdatetStr += Column + "=" + "@" + Column + ","
Next
'
If UpdatetStr.EndsWith(",") Then UpdatetStr = UpdatetStr.Remove(UpdatetStr.Count - 1, 1)
UpdatetStr += " Where (" & FiledKey & " = " & "@" & FiledKey & ")"
'
'
Using Cmd As New SqlClient.SqlCommand(UpdatetStr, Con)
For i As Integer = 0 To Table.Count - 1
Cmd.Parameters.AddWithValue("@" + Table.Keys.ElementAt(i), Table.Values.ElementAt(i))
Next
Cmd.Parameters.AddWithValue("@" & FiledKey, ID)
For Each parm As SqlClient.SqlParameter In Cmd.Parameters
If IsNothing(parm.Value) Or IsDBNull(parm.Value) Then
parm.Value = DBNull.Value
End If
Next
'
OpenConnect()
Resuilt = Cmd.ExecuteNonQuery()
CloseConnect()
If Msg = True Then
If Resuilt > 0 Then
MessageBox.Show("تم التعديل بنجاح", "حفظ التعديلات", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign)
Else
MessageBox.Show("فشلت عملية التعديل", "حفظ التعديلات", MessageBoxButtons.OK, MessageBoxIcon.Stop, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign)
End If
End If
End Using
End Sub
و في نفس الاطار يمكننا التحديث وفق مجموعة شروط , اذ يصادفك احياناً انك تريد التحديث وفق اكثر من شرط كأن تحدث طالب ما في صف محدد و شعبة محددة و كوننا لا نعرف كم عدد الشروط التي يمكن ان نحدث عن طريقها لذا رايت ان تكون لدينا مصفوفة اخرى خاصة بالشروط تحمل اسماء الاعمدة في الصف الاول و قيم الاعمدة في الصف الثاني كما يلي
PHP كود :
''' <summary>
''' تحديث جدول وفق مجموعة شروط - جدول مصفوفة
''' </summary>
''' <param name="TblNmae">اسم الجدول</param>
''' <param name="Table"> جدول يحتوي على الحقول المراد تحديثها مع قيمها - مصفوفة</param>
''' <param name="CondFileds">جدول يحتوي على الشروط المراد التحديث وفقها مع قيمها - مصفوفة</param>
''' <param name="Msg"></param>
Protected Sub Update_TableByMultiCounditions(ByVal TblNmae As String, ByVal Table As Dictionary(Of String, Object), ByVal CondFileds As Dictionary(Of String, Object), Optional ByVal Msg As Boolean = False)
If Table.Count = 0 Then
MessageBox.Show("املئ جدول الحقول")
Exit Sub
End If
If CondFileds.Count = 0 Then
MessageBox.Show("املئ جدول الحقول الشرطية")
Exit Sub
End If
' ملئ الحقول و بارمتراتها
Dim UpdatetStr As String = "Update " & TblNmae & " Set "
Dim Column As String = String.Empty
For X As Integer = 0 To Table.Count - 1
Column = Table.Keys.ElementAt(X)
UpdatetStr += Column + "=" + "@" + Column + ","
Next
If UpdatetStr.EndsWith(",") Then UpdatetStr = UpdatetStr.Remove(UpdatetStr.Count - 1, 1)
'ملئ الشروط و بارمتراتها
UpdatetStr += " Where ("
For p As Integer = 0 To CondFileds.Count - 1
UpdatetStr += "(" + CondFileds.Keys.ElementAt(p) & " = @" & CondFileds.Keys.ElementAt(p) + ")" + "And"
Next
If UpdatetStr.EndsWith("And") Then UpdatetStr = UpdatetStr.Remove(UpdatetStr.Count - 3, 3)
'
Dim Resuilt As Integer = 0
Using Cmd As New SqlClient.SqlCommand(UpdatetStr, Con)
For i As Integer = 0 To Table.Count - 1
Cmd.Parameters.AddWithValue("@" + Table.Keys.ElementAt(i), Table.Values.ElementAt(i))
Next
'
For p As Integer = 0 To CondFileds.Count - 1
Cmd.Parameters.AddWithValue("@" + CondFileds.Keys.ElementAt(p), CondFileds.Values.ElementAt(p))
Next
For Each parm As SqlClient.SqlParameter In Cmd.Parameters
If IsNothing(parm.Value) Or IsDBNull(parm.Value) Then
parm.Value = DBNull.Value
End If
Next
'
OpenConnect()
Resuilt = Cmd.ExecuteNonQuery()
CloseConnect()
If Msg = True Then
If Resuilt > 0 Then
MessageBox.Show("تم التعديل بنجاح", "حفظ التعديلات", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign)
Else
MessageBox.Show("فشلت عملية التعديل", "حفظ التعديلات", MessageBoxButtons.OK, MessageBoxIcon.Stop, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign)
End If
End If
End Using
End Sub
حذف سجل من جدول وفق شرط واحد (قيمة المفتاح الرئيسي)
PHP كود :
''' <summary>
''' حذف سجل من جدول وفق قيمة المفتاح الرئيسي
''' </summary>
''' <param name="TableName">اسم الجدول المراد الحذف منه</param>
''' <param name="FiledKey">اسم حقل المفتاح الرئيسي</param>
''' <param name="ID">قيمة حقل المفتاح الرئيسي</param>
''' <param name="Msg">رسالة تأكيد الحذف اختيارية</param>
Protected Sub Delete_Table(ByVal TableName As String, ByVal FiledKey As String, ByVal ID As Integer, Optional ByVal Msg As Boolean = False)
If FiledKey = String.Empty Then
MessageBox.Show("حدد حقل المفتاح الرئيسي من فضلك", "تنبيه", MessageBoxButtons.OK, MessageBoxIcon.Stop, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign)
Exit Sub
End If
Dim DeletetStr As String = "Delete From " & TableName & " Where " & FiledKey & " = " & "@" & FiledKey
Dim Result As Integer = 0
OpenConnect()
Using Cmd As New SqlClient.SqlCommand(DeletetStr, Con)
Cmd.Parameters.AddWithValue("@" & FiledKey, ID)
Result = Cmd.ExecuteNonQuery()
End Using
CloseConnect()
If Msg = True Then
If Result > 0 Then
MessageBox.Show("تم الحذف بنجاح", "حذف", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign)
Else
MessageBox.Show("فشلت عملية الحذف", "حذف", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign)
End If
End If
End Sub
PHP كود :
''' <summary>
''' حذف مجموعة سجلات من جدول وفق مجموعة شروط
''' </summary>
''' <param name="TableName">اسم الجدول المراد الحذف منه</param>
''' <param name="CondFileds">مصفوفة الشروط مع قيمها</param>
''' <param name="Msg">رسالة تأكيد الحذف اختيارية</param>
Protected Sub Delete_TableByMultiCounditions(ByVal TableName As String, ByVal CondFileds As Dictionary(Of String, Object), Optional ByVal Msg As Boolean = False)
If CondFileds.Count = 0 Then
MessageBox.Show("قائمة الشروط فارغة حاول ملئها اولاً", "تنبيه", MessageBoxButtons.OK, MessageBoxIcon.Stop, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign)
Exit Sub
End If
'
If TableName = String.Empty Then
MessageBox.Show("حدد اسم الجدول من فضلك", "تنبيه", MessageBoxButtons.OK, MessageBoxIcon.Stop, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign)
Exit Sub
End If
' ملئ الحقول و بارمتراتها
Dim DeletetStr As String = "Delete From " & TableName & " Where "
Dim Column As String = String.Empty
For X As Integer = 0 To CondFileds.Count - 1
Column = CondFileds.Keys.ElementAt(X)
DeletetStr += "(" + Column + "=" + "@" + Column + ")" + " And "
Next
If DeletetStr.EndsWith("And ") Then DeletetStr = DeletetStr.Remove(DeletetStr.Count - 5, 5)
'مصفوفة بارمترات لكوماند الحذف
Dim parms As New List(Of SqlClient.SqlParameter)
For i As Integer = 0 To CondFileds.Count - 1
Dim parm As New SqlClient.SqlParameter("@" & CondFileds.Keys.ElementAt(i), CondFileds.Values.ElementAt(i))
parms.Add(parm)
Next
'
Dim Result As Integer = 0
'
Using Cmd As New SqlClient.SqlCommand(DeletetStr, Con)
'تزويد الكوماند بالبارمترات
For Each Parm As SqlClient.SqlParameter In parms
Cmd.Parameters.Add(Parm)
Next
'
OpenConnect()
Result = Cmd.ExecuteNonQuery()
CloseConnect()
If Msg = True Then
If Result > 0 Then
MessageBox.Show("تم الحذف بنجاح", "حذف", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign)
Else
MessageBox.Show("فشلت عملية الحذف", "حذف", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign)
End If
End If
End Using
End Sub
اولاً الملئ بترتيب او بدونه بدون شروط
PHP كود :
''' <summary>
''' تعبئة جدول بكامل الصفوف مع ترتيب
''' </summary>
''' <param name="TblNmae">اسم الجدول</param>
''' <param name="Table">الجدول الذي يحوي الحقول و قيمها وهو مصفوفة</param>
''' <param name="OrderBy">اسم الحقل الذي على اساسه يتم الترتيب</param>
''' <returns>يعود بجدول معبئ بالبيانات</returns>
Protected Overloads Shared Function Fill_Table(ByVal TblNmae As String, ByVal Table As Dictionary(Of String, Object), Optional OrderFiled As String = Nothing, Optional OrderBy As Boolean = False) As DataTable
If Table.Count = 0 Then
MessageBox.Show("املئ جدول الحقول")
Return Nothing
End If
If Table.Count = 0 Then
MessageBox.Show("املئ جدول الحقول ")
Return Nothing
End If
Dim SelectStatement As String = "Select "
Dim Column As String = String.Empty
For X As Integer = 0 To Table.Count - 1
Column = Table.Keys.ElementAt(X)
SelectStatement += Column + ","
Next
If SelectStatement.EndsWith(",") Then SelectStatement = SelectStatement.Remove(SelectStatement.Count - 1, 1)
SelectStatement += " From " & TblNmae
If OrderBy = True Then
If Not IsNothing(OrderFiled) Then
SelectStatement += " Order By " & OrderFiled
Else
' MsgBox("حقل الترتيب معدوم القيمة")
End If
End If
Dim Dt As New DataTable
Dt.Clear()
Using Cmd As New SqlClient.SqlCommand(SelectStatement, Con)
Using Da As New SqlClient.SqlDataAdapter(Cmd)
Da.Fill(Dt)
End Using
End Using
Return Dt
End Function
ثانياً الملئ وفق شرط
PHP كود :
''' <summary>
''' تعبئة جدول بحقول محددة وفق شرط
''' </summary>
''' <param name="TblNmae">اسم الجدول</param>
''' <param name="Fileds">مصفوفة الحقول</param>
''' <param name="CondFiled">شرط المطابقة / حقل</param>
''' <param name="id">قيمة الحقل الشرطي</param>
''' <returns>القيمة المعادة جدول بيانات</returns>
Protected Overloads Function Fill_TableWithCoundition(ByVal TblNmae As String, ByVal Fileds As Dictionary(Of String, Object), ByVal CondFiled As String, ByVal ID As Object) As DataTable
If Fileds.Count = 0 Then
MessageBox.Show("تاكد من ملئ مصفوفة الحقول")
Return Nothing
ElseIf TblNmae = "" Or CondFiled = "" Then
MessageBox.Show("تاكد من ملئ اسم الجدول او اسم الحقل الشرطي")
Return Nothing
ElseIf IsNothing(ID) Then
MessageBox.Show("قيمة الحقل الشرطي معدومة")
Return Nothing
End If
Dim SelectStatement As String = "Select "
Dim Column As String = String.Empty
For X As Integer = 0 To Fileds.Count - 1
Column = Fileds.Keys.ElementAt(X)
SelectStatement += Column + ","
Next
If SelectStatement.EndsWith(",") Then SelectStatement = SelectStatement.Remove(SelectStatement.Count - 1, 1)
SelectStatement += " From " & TblNmae & " Where " & CondFiled & " = @" & CondFiled
Dim Dt As New DataTable
Dt.Clear()
Using Cmd As New SqlClient.SqlCommand(SelectStatement, Con)
Cmd.Parameters.AddWithValue("@" & CondFiled, ID)
Using Da As New SqlClient.SqlDataAdapter(Cmd)
Da.Fill(Dt)
End Using
End Using
Return Dt
End Function
ثالثاً الملئ وفق مجموعة شروط
PHP كود :
''' <summary>
''' تعبئة جدول بالبيانات وفق مجموعة شروط
''' </summary>
''' <param name="TableName">اسم الجدول</param>
''' <param name="CondFileds">قائمة الشروط</param>
''' <returns>يعيد جدول بيانات مملوء وفق الشروط المحددة</returns>
Protected Overloads Function Fill_TableWithMultiCounditions(ByVal TableName As String, ByVal CondFileds As Dictionary(Of String, Object)) As DataTable
If TableName = "" Then
MessageBox.Show("تاكد من ملئ اسم الجدول")
Return Nothing
End If
If CondFileds.Count = 0 Then
MessageBox.Show("املئ مصفوفة الحقول")
Return Nothing
End If
Dim Serch As String = "Select "
Dim Column As String = String.Empty
For X As Integer = 0 To CondFileds.Count - 1
Column = CondFileds.Keys.ElementAt(X)
Serch += Column + ","
Next
If Serch.EndsWith(",") Then Serch = Serch.Remove(Serch.Count - 1, 1)
Serch += " From " & TableName & " Where "
For X As Integer = 0 To CondFileds.Count - 1
Column = CondFileds.Keys.ElementAt(X)
Serch += "(" + Column + "=" + "@" + Column + ")" + " And "
Next
If Serch.EndsWith("And ") Then Serch = Serch.Remove(Serch.Count - 5, 5)
'
Dim Dt As New DataTable
Dt.Clear()
'
Dim parms As New List(Of SqlClient.SqlParameter)
For i As Integer = 0 To CondFileds.Count - 1
Dim parm As New SqlClient.SqlParameter("@" & CondFileds.Keys.ElementAt(i), CondFileds.Values.ElementAt(i))
parms.Add(parm)
Next
Using Cmd As New SqlClient.SqlCommand(Serch, Con)
For Each Parm As SqlClient.SqlParameter In parms
Cmd.Parameters.Add(Parm)
Next
Using Da As New SqlClient.SqlDataAdapter(Cmd)
Da.Fill(Dt)
End Using
End Using
Return Dt
End Function
ساكتفي بهذا العدد من الدوال حتى الان و اذا اردت التوسع يمكنك ذلك
الخطوة التالية هي العمل على قاعدة البيانات في جانب السيرفر
يتبع...
اللهم لك الحمد كما ينبغي لجلال وجهك و عظيم سلطانك
في حل و ترحال


