السلام عليكم .
اخواني لدي هذا الكود لعملية حذف سجل من قاعدة البيانات ما أريده لو تكرمتهم هو كيف أضيف أمام هذا الكود شرط أن لا يكون هذا السجل الذي اريد حذفه متواجد او مرتبط بجدول آخر بقاعدة البيانات و بارك الله فيكم
كود :
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
وعليكم السلام ورحمة الله وبركاته
الحل :
- نصنع دالة تتحقق من ذلك وتتطلب:
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
هذا إجراء عام فيك تستخدمه بأي مشروع عندك..
للتحقق من أي شيء :
- قبل إدخال سجل جديد منعاً للتكرار.
- قبل حذف سجل ما منعاً من نزع علاقة مع جداول أخرى.
- قبل التعديل لنفس ما ذكر أعلاه.
بارك الله فيك اخ طه على المساعدة شوف لو تكرمت الملف عندي جدولين
جدول 1 و جدول 2
من المفروض اقدر احذف من الجدول 1 فقط الاسم ( حمودة ) لانه لا يتواجد اسمه بالجدول 2
أنسخ هذا الكود بدلاً من الكود الذي لديك في المشروع :
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 Object, e As EventArgs) Handles 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 Object, e As EventArgs) Handles 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(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 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(strSqlCommand, pConn)
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
شكرا جزيلا و بارك الله فيك اخ طه على المساعدة الان فعلا تحقق المطلوب بالضبط الهي يرضى عليك و على والديك ان شاء الله