تابع لعملية الاتصال (فتح الجداول والتعامل معها )
سنحتاج هنا إلى عنصرين رئيسيين لتكملة عملية التعامل مع البيانات وهما ... [1] - OleDbConnection [2] - DataSetوهذا هو تعريفهما مع التعاريف السابقة الموضوعه في حدث
Public Class Form1وستأتي بشكل هذا
كود
Dim Con As New OleDb.OleDbConnection() REM HnHn : "تعريف كائن الاتصال "
Dim cmd As New OleDbCommand() REM HnHn : " تعريف كائن أمر لتمرير الاستعلام ثم الاتصال "
Dim Dp As OleDb.OleDbDataAdapter REM HnHn : " تعريف كائن تدفق البيانات بمعنى المصدر أو المزود "
Dim rs As New DataSet() REM HnHn : "تعريف كائن التعامل مع البيانات في الذاكرة "
'Dim ConnString As String REM HnHn : "تعريف متغير لتخزين مسار القاعدة "
وهكذا نكون كونا المجموعة الأساسية للتعامل مع البيانات بشكل تام وسنبدأ الآن بالاتصال بأحدى جداول القاعدة [ملاحظة:] ان كائن الاوامر
OleDbCommand لا يصل إلى مصدر البيانات بشكل مباشر وانما يعتمد على كائن الاتصال والذي بدوره يصل إلى مصدر بيانات كما في هذه الشفرة والمذكورة لديك في المثال المرفق سابقا .
كود
con.Open()
cmd.Connection = con
con.Close()
وللأستفادة من كائن الأمر علينا بناء جمل ة أستعلام مع مراعاة نوعها أن كانت جملة
استعلامية تقليدية أو
جملة تنفيذية وللمعلومية ....
أن
الجمل الاستعلامية هي التي لا تؤثر على سجلات قاعدة البيانات وانما تقوم بقراءة محتوياتها ونستخدم لها أمر
SELECTأما
الجمل التنفيذيةهي تلك الجمل التي تحدث تغييرا في سجلات جداول القاعدة بشكل التالي
.DELETE أو ،INSERT INTO ،UPDATE وغالبا ما يستخدم مع الجمل التنفيذية أمر
()ExecuteNonQuery وذلك كنوع من الحصر لعدد السجلات التي تأثرت بالعملية ومثال ذلك العملية التالية ..
كود
Dim SQL As String = "UPDATE Emp SET Slary = 5000 WHERE NoEmp = 10001 "
Dim cmd As New OleDbCommand(SQL, con)
cmd.ExecuteNonQuery()
الأن سنأتي على عملية الاتصال بجدول البيانات وسحبها منه بشكل التالي
[1] - سنقوم بتعريف متغيير لوضع جملة الاستعلام بداخله كما يلي
كود
Dim SQL As String = "SELECT * FROM HnHnEmp"
[2] - سنقوم بوضع الاستعلام مع الاتصال في محول البيانات
OleDbDataAdapter كود
Dp = New OleDb.OleDbDataAdapter(SQL, Con
[3] - سنقوم بنقل البيانات لتعامل معها من دون اتصال بوضعها في
DataSet كود
Dp.Fill(rs, "HnHnEmp")
[4] - أخيرا سنغلق القاعدة لتعامل معها من دون اتصال وستصبح الشفرة بشكل نهائيا بشكل التالي .....
كود
Con.ConnectionString = ConnString REM HnHn : "الاتصال بمسار القاعدة"
Con.Open() REM HnHn : فتح الاتصال
SQL = "SELECT * FROM HnHnEmp" REM HnHn : "وضع
Dp = New OleDb.OleDbDataAdapter(SQL, Con) REM HnHn : "تدفق البيانات مع الاتصال في المتحول"
Dp.Fill(rs, "HnHnEmp") REM HnHn : "التعامل مع سجلات الجدول في الدات سيت"
Con.Close()
لم يتبق الآن سوى أظهار البيانات في الحقول المخصصة لها وستأتي الطريقة بشكل التالي
كود
TextBox1.Text = rs.Tables("HnHnEmp").Rows(0).Item(0)
وتفصيلها كما يلي ..... TextBox1.Text :
الحقل الذي سيرتبط مع الحقل في الجدول rs.Tables("HnHnEmp"). :
اسم الجدول المدرج منه اسم الحقل المرتبط بالتيكس بوكس Rows(0). :
تمثل الصف الخاص بالحقل المرتبط وعند تغيير الرقم الذي بداخله يتم الانتقال لسجل التالي والعكس Item(0). :
تمثل عنصر الوصول إلى الفئات المحضونة من الكائن الرئيسي DataSet وھي خاصیة افتراضیة للكائن
DataRow لذا يمكنك تجاھلھا ان اردت .
وهكذا مع بقية الحقول بالشكل التالي وفق المثال المرفق ....
كود
REM HnHn : اظهار بيانات الجدولفي الحقول المخصصة
TextBox1.Text = rs.Tables("HnHnEmp").Rows(0).Item(0)
TextBox2.Text = rs.Tables("HnHnEmp").Rows(0).Item(1)
TextBox3.Text = rs.Tables("HnHnEmp").Rows(0).Item(2)
TextBox4.Text = rs.Tables("HnHnEmp").Rows(0).Item(3)
TextBox5.Text = rs.Tables("HnHnEmp").Rows(0).Item(4)
TextBox6.Text = rs.Tables("HnHnEmp").Rows(0).Item(5)
TextBox7.Text = rs.Tables("HnHnEmp").Rows(0).Item(6)
عملية التنقل بين السجلات في بيئة النت اختلف الأمر واصبحت عملية التنقل بهذا الشكل للسجل التالي
كود
Me.BindingContext(rs.Tables("HnHnEmp")).Position += 1
وللسجل السابق
كود
Me.BindingContext(rs.Tables("HnHnEmp")).Position - = 1
والسجل الأول سيكون بهذا الشكل
كود
Me.BindingContext(rs.Tables("HnHnEmp")).Position = 0
والسجل الأخير سيكون بهذا الشكل
كود
Me.BindingContext(rs.Tables("HnHnEmp")).Position = Me.BindingContext(rs.Tables("HnHnEmp")).Count - 1
وهذا بشكل عام ولكن في مثالنا سيتم عمل التنقل بين السجلات بالطريقة التالية
[1] - سنقوم بوضع متغيير على مستوى الفوم وسيكون من نوع رقم لتخزين قيمة او رقم السجل بداخله كما يلي كود
Dim Rec As Integer
[2] - سنقوم بعمل أجراء بأسم
ViewRecord وسيحوي السجلات المرتبطة بالحقول وستكون قيمة Rows(0) هي المتغيير Rec الذي قمنا بتعريفه للسجلات بشكل هذا كود
Rows(Rec)
وسيكون الأجراء بشكل هذا
كود
Private Sub ViewRecord()
REM HnHn : اظهار بيانات الجدولفي الحقول المخصصة
TextBox1.Text = rs.Tables("HnHnEmp").Rows(Rec).Item(0)
TextBox2.Text = rs.Tables("HnHnEmp").Rows(Rec).Item(1)
TextBox3.Text = rs.Tables("HnHnEmp").Rows(Rec).Item(2)
TextBox4.Text = rs.Tables("HnHnEmp").Rows(Rec).Item(3)
TextBox5.Text = rs.Tables("HnHnEmp").Rows(Rec).Item(4)
TextBox6.Text = rs.Tables("HnHnEmp").Rows(Rec).Item(5)
TextBox7.Text = rs.Tables("HnHnEmp").Rows(Rec).Item(6)
'HnHn : Total Record
Label9.Text = Rec & Space(2) & "OF" & Space(2) & rs.Tables("HnHnEmp").Rows.Count
End Sub
[3] - سنقوم الآن بتكوين عملية التنقل للسجلات بشكل التالي السجل التالي
كود
Private Sub ButtonNavNext_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonNavNext.Click
REM HnHn : Next
Rec = Rec + 1
Call ViewRecord()
End Sub
السجل السابق
كود
Private Sub ButtonNavPrevious_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonNavPrevious.Click
REM HnHn : Previous
Rec = Rec - 1
Call ViewRecord()
End Sub
السجل الأول
كود
Private Sub ButtonNavFirst_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonNavFirst.Click
REM HnHn : First
Rec = 0
Call ViewRecord()
End Sub
السجل الأخير
كود
Private Sub ButtonNavLast_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonNavLast.Click
REM HnHn : Last
Rec = rs.Tables("HnHnEmp").Rows.Count - 1
Call ViewRecord()
End Sub
ولتنقل بأكثر أمان سنضع بعض الشروط لتحقق من السجل أن كان في الأول أو في الأخير كما يلي :
الانتقال لسجل التالي كود
Private Sub ButtonNavNext_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonNavNext.Click
REM HnHn : Next
Rec = Rec + 1
'HnHn : التحقق من المتغيير اذا كان اكبر من مجموع عدد السجلات الكلي واعادة تخزين اخر قيمة
If Rec > rs.Tables("HnHnEmp").Rows.Count - 1 Then
MsgBox("لا توجد سجلات للأنتقال إليها")
Rec = rs.Tables("HnHnEmp").Rows.Count - 1
Exit Sub
Else
Call ViewRecord()
End If
End Sub
الانتقال لسجل السابق كود
Private Sub ButtonNavPrevious_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ButtonNavPrevious.Click
REM HnHn : Previous
Rec = Rec - 1
'HnHn : التحقق من المتغيير اذا كان اقل من الصفر واعادة تخزين اخر قيمة
If Rec < 0 Then
MsgBox("لا توجد سجلات للأنتقال إليها")
Rec = 0
Exit Sub
Else
Call ViewRecord()
End If
End Sub

وفي الختام هناك مثال مرفق

لتوضيح كل ما تم ذكره في هذا الدرس
لأضافة أستفسار أو سؤال حول الموضوع من هنا

وهذا كل شي لهذا الأسبوع.. وسنكمل في الاسابيع القادمة أن شالله كيف تتم عملية الاضافة والتعديل :
الملفات المرفقة
ApplicationG2.rar ( 41.42ك )
عدد مرات التنزيل: 1003