22-10-13, 09:59 PM
(آخر تعديل لهذه المشاركة : 22-10-13, 10:04 PM {2} بواسطة أبوبكر سويدان.)
السلام عليكم ورحمة الله وبركاته
أقدم لكم برنامجاً بسيطاً لعمل العمليات الأربع الأساسية على قواعد البيانات وهي:
البحث
الإضافة
التعديل
الحذف
المثال المرفق موجه أساساً للمبتدئين أمثالي، وحاولت أن يكون الكود فهوماً قدر المستطاع.
أتمنى لكم الفائدة.
برمجة نافذة الإضافة:
برمجة نافذة التعديل:
برمجة النافذة الرئيسية وعمليات البحث والحذف
أقدم لكم برنامجاً بسيطاً لعمل العمليات الأربع الأساسية على قواعد البيانات وهي:
البحث
الإضافة
التعديل
الحذف
المثال المرفق موجه أساساً للمبتدئين أمثالي، وحاولت أن يكون الكود فهوماً قدر المستطاع.
أتمنى لكم الفائدة.
برمجة نافذة الإضافة:
كود :
Imports System.Data.OleDb
Public Class frmNew
Private Sub btnClose_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClose.Click
Me.Close()
End Sub
Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSave.Click
If txtName.Text = Nothing Then
MsgBox("يجب إدخال الاسم", MsgBoxStyle.Critical, "عذراً")
txtName.Focus()
Else
SaveData()
MsgBox("تم تخزين البيانات بنجاح", MsgBoxStyle.Information, "ألف مبروك")
txtName.Text = Nothing
txtName.Focus()
End If
End Sub
Private Sub SaveData()
Dim SaveDataSQl As String = "INSERT INTO TheTable (TheName,TheBirthDate) VALUES(@TheName,@TheBirthDate)"
Dim SaveDataCMD As New OleDbCommand
If Con.State = ConnectionState.Closed Then
' إذا كان الاتصال مقفل
Con.Open()
With SaveDataCMD
.Connection = Con
.CommandType = CommandType.Text
.CommandText = SaveDataSQl
.Parameters.AddWithValue("TheName", txtName.Text)
.Parameters.AddWithValue("TheBirthDate", dtDate.Value.Date)
.ExecuteNonQuery()
.Dispose()
End With
Con.Close()
Else
' الاتصال مفتوح مسبقاً
With SaveDataCMD
.Connection = Con
.CommandType = CommandType.Text
.CommandText = SaveDataSQl
.Parameters.AddWithValue("TheName", txtName.Text)
.Parameters.AddWithValue("TheBirthDate", dtDate.Value.Date)
.ExecuteNonQuery()
.Dispose()
End With
Con.Close()
End If
frmMain.LoadData()
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' تجهيز العنصر الخاص بعرض التاريخ
dtDate.Format = DateTimePickerFormat.Custom
dtDate.CustomFormat = "yyyy-MM-dd"
End Sub
End Class
برمجة نافذة التعديل:
PHP كود :
Imports System.Data.OleDb
Public Class frmEdit
' تعريف متغير يحمل رقم السجل المطلوب تعديله
Public RecID As Integer
Public TheName As String
Public TheBirthDate As Date
Private Sub frmEdit_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' تجهيز العنصر الخاص بعرض التاريخ
dtDate.Format = DateTimePickerFormat.Custom
dtDate.CustomFormat = "yyyy-MM-dd"
txtName.Text = TheName
dtDate.Value = TheBirthDate
End Sub
Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSave.Click
If txtName.Text = Nothing Then
MsgBox("يجب إدخال الاسم", MsgBoxStyle.Critical, "عذراً")
txtName.Focus()
Else
SaveData()
MsgBox("تم تعديل البيانات بنجاح", MsgBoxStyle.Information, "ألف مبروك")
' تحديث الداتاقريد على النافذة الرئيسية
frmMain.LoadData()
Me.Close()
End If
End Sub
Private Sub SaveData()
Dim SaveDataSQl As String = "UPDATE TheTable SET TheName=@TheName, TheBirthDate=@TheBirthDate WHERE ID=" & RecID & ""
Dim SaveDataCMD As New OleDbCommand
If Con.State = ConnectionState.Closed Then
' إذا كان الاتصال مقفل
Con.Open()
With SaveDataCMD
.Connection = Con
.CommandType = CommandType.Text
.CommandText = SaveDataSQl
.Parameters.AddWithValue("TheName", txtName.Text)
.Parameters.AddWithValue("TheBirthDate", dtDate.Value.Date)
.ExecuteNonQuery()
.Dispose()
End With
Con.Close()
Else
' الاتصال مفتوح مسبقاً
With SaveDataCMD
.Connection = Con
.CommandType = CommandType.Text
.CommandText = SaveDataSQl
.Parameters.AddWithValue("TheName", txtName.Text)
.Parameters.AddWithValue("TheBirthDate", dtDate.Value.Date)
.ExecuteNonQuery()
.Dispose()
End With
Con.Close()
End If
End Sub
Private Sub btnClose_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClose.Click
txtName.Text = Nothing
RecID = 0
TheBirthDate = Nothing
TheName = Nothing
Me.Close()
End Sub
End Class
برمجة النافذة الرئيسية وعمليات البحث والحذف
PHP كود :
Imports System.Data.OleDb
Public Class frmMain
Private Sub btnClose_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnClose.Click
Me.Close()
End Sub
Private Sub btnNew_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnNew.Click
frmNew.ShowDialog()
End Sub
Private Sub frmMain_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
' تجهيز الداتاقريدفيو
With dgvList
.DataSource = Nothing
.Rows.Clear()
.ColumnCount = 3
' رأس العمود
.Columns(0).HeaderText = "ID"
' اتساع العمود
.Columns(0).Width = 30
' محاذات محتويات الخلية
.Columns(0).DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter
' محاذاة عنوان العمود
.Columns(0).HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
' رأس العمود
.Columns(1).HeaderText = "الاســـــــم"
' اتساع العمود
.Columns(1).Width = 150
' محاذاة عنوان العمود
.Columns(1).HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
' رأس العمود
.Columns(2).HeaderText = "تاريخ الميلاد"
' اتساع العمود
.Columns(2).Width = 110
' محاذاة عنوان العمود
.Columns(2).HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter
' لجعل الخلية تعرض التاريخ فقط
.Columns(2).DefaultCellStyle.Format = "d"
End With
LoadData()
End Sub
Public Sub LoadData()
Dim LSQL As String = "select * from TheTable order by ID"
Dim LAdapter As New OleDbDataAdapter(LSQL, Con)
Dim LDataSet As New DataSet
Dim RowsCount As Integer
Dim i As Integer
' مسح الداتاقريدفيو من قيم سابقة محتملة
dgvList.Rows.Clear()
' وهنا نفحص هل هناك اتصال بقاعدة البيانات ام لا
' وهذه خطوة مهمة جداً ويجب اتباعها دائماً
' قبل أن تفعل أي شيء تأكد من حالة الاتصال بقاعدة البيانات
If Con.State = ConnectionState.Closed Then
' لا يوجد اتصال بقاعدة البيانات
Con.Open()
LAdapter.Fill(LDataSet, "LoadingData")
RowsCount = LDataSet.Tables("LoadingData").Rows.Count
If RowsCount = 0 Then
' يتم فحص السجلات المسترجعة من جمل اس كيو ال، فإن كان عددها صفرا
' معناها لا يوجد سجلات والجدول فارغ
' فيتم إغلاق الاتصال وعدم عرض اي شيء
dgvList.Rows.Clear()
LDataSet.Reset()
Con.Close()
Exit Sub
Else
' وإلا، فيتم مسح القائمة من سجلات سابقة وتعبئتها مجددا
' الأمر التالي لإفساح المجال لعرض السجلات المسترجعة
' يعني ادراج عدد من الاسطر في القائمة مساوي لعدد السجلات المسترجعة
dgvList.Rows.Add(RowsCount)
' هذه هي عملية تعبئة البيانات من الداتاسيت إلى الداتاقريد فيو
For i = 0 To RowsCount - 1
With dgvList
.Rows(i).Cells(0).Value = LDataSet.Tables("LoadingData").Rows(i).Item("ID")
.Rows(i).Cells(1).Value = LDataSet.Tables("LoadingData").Rows(i).Item("TheName")
.Rows(i).Cells(2).Value = LDataSet.Tables("LoadingData").Rows(i).Item("TheBirthDate")
End With
Next
LDataSet.Reset()
Con.Close()
End If
Else
' الاتصال مفتوح مسبقاً بقاعدة البيانات
LAdapter.Fill(LDataSet, "LoadingData")
RowsCount = LDataSet.Tables("LoadingData").Rows.Count
If RowsCount = 0 Then
dgvList.Rows.Clear()
LDataSet.Reset()
Con.Close()
Exit Sub
Else
dgvList.Rows.Add(RowsCount)
' Now: fill DGV with data
For i = 0 To RowsCount - 1
With dgvList
.Rows(i).Cells(0).Value = LDataSet.Tables("LoadingData").Rows(i).Item("ID")
.Rows(i).Cells(1).Value = LDataSet.Tables("LoadingData").Rows(i).Item("TheName")
.Rows(i).Cells(2).Value = LDataSet.Tables("LoadingData").Rows(i).Item("TheBirthDate")
End With
Next
LDataSet.Reset()
Con.Close()
End If
End If
End Sub
Private Sub btnEdit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEdit.Click
' برمجة الزر تعديل
' وهنا نفحص قائمة المشتركين، إن كانت فارغة يتم عرض رسالة تفيد ذلك
' وإلا فيتم عرض فورم تعديل السجل المختار وتحديث قاعدة البيانات والداتاقريدفيو
If dgvList.Rows.Count < 2 Then
MsgBox("القائمة فارغة", MsgBoxStyle.Critical, "عذراً")
ElseIf dgvList.SelectedRows(0).Cells(0).Value = Nothing Then
MsgBox("يجب اختيار سجل لتعديله", MsgBoxStyle.Critical, "عذراً")
Else
With frmEdit
.RecID = Val(dgvList.SelectedRows(0).Cells(0).Value)
.TheName = dgvList.SelectedRows(0).Cells(1).Value
.TheBirthDate = dgvList.SelectedRows(0).Cells(2).Value
.ShowDialog()
End With
End If
End Sub
Private Sub btnDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDelete.Click
' برمجة الزر حذف
' وهنا نفحص قائمة المشتركين، إن كانت فارغة يتم عرض رسالة تفيد ذلك
' وإلا فيتم حذف السجل المختار وتحديث قاعدة البيانات والداتاقريدفيو
If dgvList.Rows.Count < 2 Then
MsgBox("القائمة فارغة", MsgBoxStyle.Critical, "عذراً")
Else
Dim RecID As Integer
Dim Answer As Integer
RecID = Val(dgvList.SelectedRows(0).Cells(0).Value)
If RecID = Nothing Then
MsgBox("لم تقم باختيار سجل لحذفه", MsgBoxStyle.Critical, "عذراً")
Else
Answer = MsgBox("هل تريد فعلاً حذف هذا السجل", MsgBoxStyle.Question + MsgBoxStyle.OkCancel, "تنبيه")
If Answer = MsgBoxResult.Ok Then
Dim DelSQl As String = "DELETE * FROM TheTable WHERE ID=" & RecID & ""
Dim DelCMD As New OleDbCommand
If Con.State = ConnectionState.Closed Then
Con.Open()
With DelCMD
.Connection = Con
.CommandType = CommandType.Text
.CommandText = DelSQl
.ExecuteNonQuery()
.Dispose()
End With
Con.Close()
LoadData()
Else
With DelCMD
.Connection = Con
.CommandType = CommandType.Text
.CommandText = DelSQl
.ExecuteNonQuery()
.Dispose()
End With
Con.Close()
LoadData()
End If
End If
End If
End If
End Sub
Private Sub txtSearch_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles txtSearch.TextChanged
SearchByName()
End Sub
Private Sub SearchByName()
' جملة الاستعلام التالية تبحث وتجلب السجلات التي تتطابق فيها حروف البحث مع حقل الاسم
' في كل مرة يتم كتابة حرف يتم تنفيذها وتنفيذ باقي الكود
Dim LSQL As String = "select * from TheTable where TheName like '%" & txtSearch.Text & "%' order by ID"
Dim LAdapter As New OleDbDataAdapter(LSQL, Con)
Dim LDataSet As New DataSet
Dim RowsCount As Integer
Dim i As Integer
' مسح الداتاقريدفيو من قيم سابقة محتملة
dgvList.Rows.Clear()
If Con.State = ConnectionState.Closed Then
Con.Open()
LAdapter.Fill(LDataSet, "LoadingData")
RowsCount = LDataSet.Tables("LoadingData").Rows.Count
If RowsCount = 0 Then
dgvList.Rows.Clear()
LDataSet.Reset()
Con.Close()
Exit Sub
Else
dgvList.Rows.Add(RowsCount)
' Now: fill DGV with data
For i = 0 To RowsCount - 1
With dgvList
.Rows(i).Cells(0).Value = LDataSet.Tables("LoadingData").Rows(i).Item("ID")
.Rows(i).Cells(1).Value = LDataSet.Tables("LoadingData").Rows(i).Item("TheName")
.Rows(i).Cells(2).Value = LDataSet.Tables("LoadingData").Rows(i).Item("TheBirthDate")
End With
Next
LDataSet.Reset()
Con.Close()
End If
Else
LAdapter.Fill(LDataSet, "LoadingData")
RowsCount = LDataSet.Tables("LoadingData").Rows.Count
If RowsCount = 0 Then
dgvList.Rows.Clear()
LDataSet.Reset()
Con.Close()
Exit Sub
Else
dgvList.Rows.Add(RowsCount)
' Now: fill DGV with data
For i = 0 To RowsCount - 1
With dgvList
.Rows(i).Cells(0).Value = LDataSet.Tables("LoadingData").Rows(i).Item("ID")
.Rows(i).Cells(1).Value = LDataSet.Tables("LoadingData").Rows(i).Item("TheName")
.Rows(i).Cells(2).Value = LDataSet.Tables("LoadingData").Rows(i).Item("TheBirthDate")
End With
Next
LDataSet.Reset()
Con.Close()
End If
End If
End Sub
End Class