تقييم الموضوع :
  • 2 أصوات - بمعدل 3
  • 1
  • 2
  • 3
  • 4
  • 5
[مثال] كيفية إضافة السجلات والبحث عنها وتعديلها وحذفها
#1
السلام عليكم ورحمة الله وبركاته

أقدم لكم برنامجاً بسيطاً لعمل العمليات الأربع الأساسية على قواعد البيانات وهي:

البحث
الإضافة
التعديل
الحذف

المثال المرفق موجه أساساً للمبتدئين أمثالي، وحاولت أن يكون الكود فهوماً قدر المستطاع.
أتمنى لكم الفائدة.


برمجة نافذة الإضافة:
كود :
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.ObjectByVal e As System.EventArgsHandles 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.ObjectByVal e As System.EventArgsHandles btnClose.Click
        Me
.Close()
    
End Sub

    
Private Sub btnNew_Click(ByVal sender As System.ObjectByVal e As System.EventArgsHandles btnNew.Click
        frmNew
.ShowDialog()
    
End Sub

    
Private Sub frmMain_Load(ByVal sender As System.ObjectByVal e As System.EventArgsHandles 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(LSQLCon)
        
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 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)

                ' 
Nowfill DGV with data
                
For 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.ObjectByVal e As System.EventArgsHandles 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.ObjectByVal e As System.EventArgsHandles 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(LSQLCon)
        
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)

                ' 
Nowfill DGV with data
                
For 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 


الملفات المرفقة
.zip   SavingDate.zip (الحجم : 113.46 ك ب / التحميلات : 2,092)
الرد }}}
#2
رائع جدا ً ومبدع .. مثالك جميل كلنا نستفيد منه

تحياتي
الرد }}}
تم الشكر بواسطة: أبوبكر سويدان , 30june , awidan76
#3
مشكور جداً على المثال المفيد
الرد }}}
تم الشكر بواسطة: أبوبكر سويدان , 30june , awidan76
#4
السيد الفاضل
لي طلب سبق ان طلبته منذ فترة في احد المنتديات واتمني ان تجيني عليه
كيف اجعل المؤشر يعود ويقف عند نفس السجل الذي تم تعديله ؟؟؟

اتمني الاجابة وتعديل المثال
الرد }}}
تم الشكر بواسطة: awidan76
#5
أي مؤشر تحديداً؟
الرد }}}
تم الشكر بواسطة: awidan76
#6
حضرتم قمت مثلا بتعديل السجل رقم 5

عند العودة م ن التعديل يكون ( السجل المحدد ) في الجريد هو اول سجل

كيف اجعل السجل المحدد هو السجل الذي تم تعديله ؟؟
الرد }}}
تم الشكر بواسطة: awidan76
#7
بارك الله فيك اخي على هذا المثال الرائع
الرد }}}
تم الشكر بواسطة: أبوبكر سويدان , awidan76
#8
الله يجزاك خير وكثر الله من امثالك
الرد }}}
تم الشكر بواسطة: أبوبكر سويدان , awidan76
#9
السلام عليكم
اخواني اني مبرمج مبتداء
ابحث عن طريقة املاء جداول الاكسس من خلال الفجوال عن طريق الكود
اجوكم المساعدة وانا ابحث عن هذا الموضوع منذ اكثر من شهرين ولم اجد الطريقة المناسبة
وسوف اكون شاكرا لكم
الرد }}}
تم الشكر بواسطة: awidan76
#10
حضرتم قمت مثلا بتعديل السجل رقم 5

عند العودة م ن التعديل يكون ( السجل المحدد ) في الجريد هو اول سجل

كيف اجعل السجل المحدد هو السجل الذي تم تعديله ؟؟
الرد }}}
تم الشكر بواسطة: awidan76


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  [مشروع] مثال(كود انشاء(قاعدة بيانات + جدول + اعمدة) تصفير العداد) مع اضافة صور والبحث المطلق سعود 14 21,801 06-06-17, 05:35 PM
آخر رد: Abdh111

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم