تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
الحذف للسجل بشروط معينة
#1
السلام عليكم .
اخواني لدي هذا الكود لعملية حذف سجل من قاعدة البيانات ما أريده لو تكرمتهم هو كيف أضيف أمام هذا الكود شرط أن لا يكون هذا السجل الذي اريد حذفه متواجد او مرتبط بجدول آخر بقاعدة البيانات و بارك الله فيكم
كود :
   Dim Cmd As New OleDb.OleDbCommand
       With Cmd
           Cmd.Connection = Conne
           Cmd.CommandType = CommandType.Text
           Cmd.CommandText = "DELETE  From Suppliers Where No_Suppliers = @No_Suppliers"
           Cmd.Parameters.Clear()
           Cmd.Parameters.AddWithValue("@No_Suppliers", OleDbType.Integer).Value = TextSuppliersNo.Text
       End With

           If Conne.State = ConnectionState.Open Then Conne.Close()
           Conne.Open()
           Cmd.ExecuteNonQuery()
             If Conne.State = ConnectionState.Open Then Conne.Close()
           Cmd = Nothing
الرد }}}
تم الشكر بواسطة:
#2
وعليكم السلام ورحمة الله وبركاته

الحل : 
- نصنع دالة تتحقق من ذلك وتتطلب:
1 - إنشاء كائن إتصال خاص بها وليكن اسمه (pConn) و نضعه إما في مودل أو في قسم التصريح العام قبل حدث تحميل النافذة :
(لا تنسى تصحح مسار واسم قاعد البيانات بما لديك)
كود :
Public pConn As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;" & "data source=" & Application.StartupPath & "\data.accdb")
 ملاحظة : كي لا تقع ضمن أخطاء فتح وإغلاق قاعدة البيانات،،، هذا الكائن (pConn)  لا تستخدمه ضمن أكوادك الأخرى..  فقط ضمن أكواد النداء السريع كهذا الكود.. لأنه بإختصار (بيفتح اتصال مع قاعدة البيانات، بيتشغل شغله، وبيغلق اتصاله مع قاعدة البيانات)..

2 - ننشئ الدالة : 
كود :
  Public Function Existing_Value(sSQLSelect As String) As Boolean
      If pConn.State <> ConnectionState.Open Then pConn.Open()

      Dim fCmd As New OleDbCommand(sSQLSelect, pConn)
      Dim fDt As New DataTable

      fDt.Load(fCmd.ExecuteReader())

      If pConn.State <> ConnectionState.Closed Then pConn.Close()

      If fDt.Rows.Count > 0 Then
          Return True
      Else
          Return False
      End If
  End Function

3 - قبل البدء بأي عملية يمكنك التحقق من شرط ما وهذا الشرط تستطيع كتابته بـ جملة استعلام الـ SQl
ضمن الدالة أثناء إٍستدعائها فتصبح الجملة الشرطية هي :
(عدل اسم الجدول TablXXX  بما يناسب جداولك والحقل [id] الذي تبحث فيه عن التواجد)، واستدعيه مع كل جدول تريد البحث فيه..
كود :
       If Existing_Value("Select * from TablXXX Where [id]='" & TextBox1.Text.Trim & "'") Then
           MsgBox("هذا السجل مرتبط بسجلات أخرى، لا يمكنك حذفه أو  ....")
           Exit Sub
       End If

هذا إجراء عام فيك تستخدمه بأي مشروع عندك..
للتحقق من أي شيء :
- قبل إدخال سجل جديد منعاً للتكرار.
- قبل حذف سجل ما منعاً من نزع علاقة مع جداول أخرى.
- قبل التعديل لنفس ما ذكر أعلاه.
قال صلى الله عليه وسلم: 
«كلمتان خفيفتان على اللسان 
ثقيلتان في الميزان،حبيبتان إلى الرحمن: 
سبحان الله وبحمده، سبحان الله العظيم».
الرد }}}
تم الشكر بواسطة: محمد خيري
#3
بارك الله فيك اخ طه على المساعدة شوف لو تكرمت الملف عندي جدولين 
جدول 1 و جدول 2
من المفروض اقدر احذف من الجدول 1 فقط الاسم ( حمودة ) لانه لا يتواجد اسمه بالجدول 2


الملفات المرفقة
.zip   WindowsApplication1.zip (الحجم : 109.17 ك ب / التحميلات : 23)
الرد }}}
تم الشكر بواسطة:
#4
أنسخ هذا الكود بدلاً من الكود الذي لديك في المشروع :

PHP كود :
Imports System.Data.OleDb

Public Class Form1
    Public Conne 
As OleDb.OleDbConnection = New OleDb.OleDbConnection("Provider=Microsoft.Ace.OLEDB.12.0;Data Source=|Datadirectory|\DataBase1.Accdb;")
 
   Public pConn As New OleDb.OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;" "data source=" Application.StartupPath "\DataBase1.accdb")

 
   Private Sub Form1_Load(sender As ObjectAs EventArgsHandles MyBase.Load
        DataGridView1
.DataSource fDataTable("Select * from Table1 Order By Id Asc")
 
       DataGridView2.DataSource fDataTable("Select * from Table2 Order By Id Asc")
 
   End Sub

    Private Sub DataGridView1_SelectionChanged
(sender As ObjectAs EventArgsHandles DataGridView1.SelectionChanged
        Try
            With DataGridView1
                Me
.TextBox1.Text = .CurrentRow.Cells(1).Value.ToString()
 
           End With
        Catch ex 
As Exception
        End 
Try
 
   End Sub

    
'=========================================================================================
    Public Function Existing_Value(sSQLSelect As String) As Boolean ' 
للتحقق من وجود سجل
        If pConn
.State <> ConnectionState.Open Then pConn.Open()
 
       '---------------------------------------------------------
        Dim fCmd As New OleDb.OleDbCommand(sSQLSelect, pConn)
        Dim fDt As New DataTable

        fDt.Load(fCmd.ExecuteReader())
        '
---------------------------------------------------------
 
       If pConn.State <> ConnectionState.Closed Then pConn.Close()
 
       '---------------------------------------------------------
        If fDt.Rows.Count > 0 Then
            Return True
        Else
            Return False
        End If
        '
---------------------------------------------------------
 
   End Function

 
   Public Function fDataTable(sSQLSelect As String) As DataTable   '  لتعبئة جدول من قاعدة البيانات ضمن داتاتيبل
        If pConn.State <> ConnectionState.Open Then pConn.Open()
        '
---------------------------------------------------------
 
       Dim fCmd As New OleDb.OleDbCommand(sSQLSelectpConn)
 
       Dim fDt As New DataTable

        fDt
.Load(fCmd.ExecuteReader())
 
       '---------------------------------------------------------
        If pConn.State <> ConnectionState.Closed Then pConn.Close()
        '
---------------------------------------------------------
 
       If fDt.Rows.Count 0 Then
            Return fDt
        Else
            Return Nothing
        End 
If
 
       '---------------------------------------------------------
    End Function

    Public Function fDataTable2(sSQLSelect As String) As DataTable   ' 
 لتعبئة جدول من قاعدة البيانات ضمن داتاتيبل
        If pConn
.State <> ConnectionState.Open Then pConn.Open()
 
       '---------------------------------------------------------
        Dim fCmd As New OleDb.OleDbCommand(sSQLSelect, pConn)
        Dim fDt As New DataTable

        fDt.Load(fCmd.ExecuteReader())
        '
---------------------------------------------------------
 
       If pConn.State <> ConnectionState.Closed Then pConn.Close()
 
       '---------------------------------------------------------
        If fDt.Rows.Count > 0 Then
            Return fDt
        Else
            Return Nothing
        End If
        '
---------------------------------------------------------
 
   End Function


 
   Public Sub RunCommand(strSqlCommand As String ' لتنفيذ أمر ما (حذف، إضافة، تعديل) اا
        If pConn.State <> ConnectionState.Open Then pConn.Open()
        '
---------------------------------------------------------
 
       Dim cmd As New OleDbCommand(strSqlCommandpConn)
 
       cmd.ExecuteNonQuery()
 
       pConn.Close()
 
       '---------------------------------------------------------
        If pConn.State <> ConnectionState.Closed Then pConn.Close()
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        If Existing_Value("Select * from Table2 Where [MyName]='" & TextBox1.Text.Trim & "'") Then
            MsgBox("هذا السجل مرتبط بسجلات أخرى، لا يمكنك حذفه أو  ....")
            Exit Sub
        End If

        RunCommand("Delete From Table1 Where Name ='" & TextBox1.Text.Trim & "'")

        MsgBox("تم الحذف بنجاح")

        DataGridView1.DataSource = fDataTable("Select * From Table1 Order By ID")

    End Sub
End Class 
قال صلى الله عليه وسلم: 
«كلمتان خفيفتان على اللسان 
ثقيلتان في الميزان،حبيبتان إلى الرحمن: 
سبحان الله وبحمده، سبحان الله العظيم».
الرد }}}
تم الشكر بواسطة: محمد خيري , محمد خيري
#5
شكرا جزيلا و بارك الله فيك اخ طه على المساعدة الان فعلا تحقق المطلوب بالضبط الهي يرضى عليك و على والديك ان شاء الله
الرد }}}
تم الشكر بواسطة: Taha Okla



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


يقوم بقرائة الموضوع: