قسم الربط بين محرك قواعد البيانات و بيئة vb.net

الاتصال و التعامل مع قاعدة بيانات أكسس فى بيئة vb.net بواسطة تقنية ADO.NET

بسم الله الرحمن الرحيم

الاخوة الاعضاء أهلا وسهلا بكم .....فى هذا الدرس إن شاء الله تعالى سنتعلم سويا كيفية الاتصال بقاعدة بيانات أكسس فى الفجوال بيسك دوت نت ....هذا الدرس بالكامل من شرح أ/ هانى الشايب مدير موقع شبكة أكواد البرمجة على هذا الرابط .....فعندما قررت البدء فى شرح هذا الدرس وجدت أننى لن أستطيع أن أخرج هذا الدرس بالشكل الرائع الذى قام به أ/هانى الشايب ....واليكم نص الدرس :

أن ما دعاني لبدء هذا الشرح هو التطور المستمر للبرمجة وصعوبة أيجاد شرح وافي لعملية الاتصال ومحاكاة قاعدة بيانات من حفظ واسترجاع وتحديث وبحث .. ألخ . فكل ما نجده هو الأمثله والمشاريع الشخصية الجاهزة وهي مفيدة ولكن لا يكون أثرها كالدرس المشروح فأغلبيتنا يفتقد لأقل معلومه وأسرعها وأن تكون سهلة الفهم لكي يستوعبـــــها المبتدء قبل المحترف كحالي عندما بدءت البرمجه ومن ثم الاحتراف وهذه الكلمة هي لتمييز قدرات الشخص على الابتكار والتفكيـر والأبداع وهي في النهاية تفـــــاوت للمستويات بين الافراد ولكنها ليست بدرجة الكمال لأن الكمال لله وحده سبحانه وتعالــــــــــــى

فالبرمجة بأعتقادي الشخصي بحر شاسع لا حدوده له لتنوعها .. فربما المبتدء يجد فيها ما يتوقف عنده المـــــحترف وهذا هو لب الموضوع


التعاون بأقل معلومة هو الاحتراف بحد ذاته


متطلبات المشروع[1] برنامج Visual Studio .NET

[2] معرفة مسبقة بلغة الفيجول بيسك دوت نت والتعامل مع نماذجه وأداوته
[3] قاعدة بيانات (وهنا سنبدأ مع الأكسس ثم سنحولها إلى قاعدة سيرفر وسنرى الاختلاف)
[4] عليك بكتابة الشيفرات الموجودة في الدرس لكي تخطىء وتعرف أين أخطأت

ملاحظة : اتمنى من الاخوة الاعضاء عند أدراجكم لمشاركاتكم أن تقتصر على الأسئلة والأستفسارات بعكس المدح والشكر .. فكل مانريده هو الأفادة والأستفادة وعدم أكثار الصفحات بدون فائدة .. ومن يريد أبدء أعجابه أو أنتقاده للموضع أن يراسلني برسالة على الخاص .

نبذه عن ADO.NETهي مجموعة من الفئات مشمولة في مجال الأسماء System.Data غرضها الوصول إلى مصادر البياناتData Sources والتي تمثل بيانات محفوظة تحت أنظمة قواعد بيانات متعددة الأنواع مما يعني قدرتك على الوصول إلى أي قاعدة بيانات مهما كانت الشركة المنتجة لها

(أ. تركي العسيري)

الأختلافات الجوهربة بين ADO.NET and ADO

** ADO **
-1 مصمة للعمل في بيئة متصلة بأستمرار مع قاعدة البيانات
-2 يستخدم الكائن RecordSet للأحتفاظ بمجموعة بيانات واحدة
-3 تحتوي على أنواع من المؤشرات Cursors المستخدمة لأغراض مختلفة ولكل مؤشر أمكانياته الخاصة
-4 تخزن البيانات في هيئتها الثنائية مما يصعب أرسالها عبر جدران الحماية . كما أنها غير مفيدة للأنظمة التي لا تدعم ADO
-5 تستهلك قدراً من موارد النظام بسبب اتصالها الدائم بقاعدة البيانات أثناء المعالجة


ADO.NET
-1 مصممة من الأساس للعمل في بيئة غير متصلة (ويمكنها العمل باتصال دائم مع قاعدة البيانات)
2- يستخدم الكائن DataSet للأحتفاظ بعدة مجموعات من البيانات
3- لا تستخدم المؤشرات لأنها تعمل في بيئة غير متصلة .
4- تخزن البيانات في هيئة XML العالمية . وهذه الهيئة مصممة لكي ترسل عبر جدران الحماية وعبر الشبكات دون مشاكل كما يمكن لأي تطبيق قراءة البيانات بهيئة XML بسهولة .
5- تعمل كنظام بيانات منفصل عن قاعدة البيانات فهي لا تتصل بقاعدة البيانات إلا عند الضرورة وبالتالي لن تستهلك مورد النظام الإ عند الضرورة


والأختلافان الأخيران رقم 4 - 5 هما جوهرة الاختلاف وأهمها


معماريةADO.NET :والمقصود هنا الخصائص المزوده والمساعدة في عملية الاتصال لقراءة وتكييف البيانات وهي
[1]- مجموعة البيانات DataSet

وهو الكائن المكافىء للكائن RecordSet ولكن مع الكثير من المزايا والتحسينات حيث يستطيع تخزين أكثر من جدول أو نتيجة أستعلام في نفس الوقت حيث يمثل كل واحد من هذه الجداول كائناً منفصلاً عن الآخر

[2]- مجموعة البيانات DataAdapter يمثل الجسر الذي يربط بين DataSet وقاعدة البيانات ويدعم أوامر Select - Update - Delete - Insert وبالتالي بإمكانه القيام بعمليات مختلفة على البيانتا كما أنه المسؤول عن تحميل كائنDataSet بالبيانات


000]مجموعة البيانات DataReader يستخدم هذا الكائن لقراءة البيانات فقط ويمكنه قراءة كميات ضخمه منها تلك التي لا يمكن تخزينها في الذاكرة مؤقتاً


[4]- مجموعة البيانات DataRelation يستخدم هذا الكائن لتمثيل العلاقات بين الجداول في قاعدة البيانات JOIN


0000]مجموعة البيانات Connection يعمل هذا الكائن بصورة مشابهة للكائن Connection في ADO وهو يمكننا من إنشاء اتصال مع قاعدة البيانات

[6]- مجموعة البيانات Command
يسمح هذا الكائن لكائن DataAdapter بتطبيق الأوامر على قاعدة البيانات ويمكنه أن يتضمن اربعة من هذه الأوامر

سبحان الله وبحمدة .....سبحان الله العظيم


رد: الاتصال و التعامل مع قاعدة بيانات أكسس فى بيئة vb.net بواسطة تقنية ADO.NET

مُساهمة
الدرس الثاني : عملية الاتصال بالقاعدة بأستخدام المعالج

_ لكى تتمكن من عملية الوصول إلى البيانات من خلال ADO.NET على نوع مصدر البيانات و الذى سنقوم بتحديدة من خلال المعالج عن طريق الخطوات التالية :

1_ نقوم بالنقر على Data Sources في الجزء السفلي من مستكشف الحلول في نسخة 2008 كما فى الصورة التالية :

إذا كان لديك VB NET 2010 أو عام 2012 ثم علامة التبويب مصدر بيانات على اليسار، أسفل مربع الأدوات (إذا لم تتمكن من رؤية علامة التبويب، انقر فوق View > Other Windows > Data Sources)

2_ بعد النقر على Data Sources سوف تشاهد شاشة الترحيب بكم في معالج تكوين مصدر البيانات، فقط حدد Database ثم انقر فوق التالي، كما فى الشاشة أدناه:


في الإصدار و 2010 و 2012 من VB NET، سترى هذه الشاشة تظهر كما يلى :



3_بعد تحديد Database والنقر على التالى ستظهر لك الشاشة التالية :


انقر فوق زر New Connection فى المربع الحوارى أعلاه ليظهر لك المربع التالى


4_ كما ترون فى المربع الحوارى السابق فان مصدر البيانات الافتراضى هو SQL Server database ....ولأننا نريد للاتصال إلى قاعدة بيانات Access سنقوم بتغير هذا المصدر و ذلك من خلال النقر على زر Change ليفتح لنا المربع التالى :


من المربع أعلاه سنقوم بتحديد Microsoft Access Database File ثم النقر على زر أوكية ليظهر لنا المربع الحوارى التالى :


انقر فوق الزر استعراض Browse وذلك لتحديد قاعدة البيانات التى تريد الاتصال بها .....ثم بعد ذلك أنقر على زر أختبار الاتصال للتأكد من نجاح عملية الاتصال بظهور الرسالة التالية :



5_ثم انقر فوق الزر موافق سوف تعاد لك معالج تكوين مصدر البيانات كما يلى :


6_انقر فوق التالي للانتقال إلى الخطوة التالية من المعالج كما يلى :


تأكد من أن هناك وضع علامة في المربع ل "Save the connection"، كما هو ظاهر أعلاه ثم انقر فوق التالي ليظهر لك المربع التالى:


كما هو ظاهر أعلاه يمكنك اختيار أي من الجداول والحقول التي تريد الاتصال بها. ولو وضعت علامة في المربع Tables لتشمل جميع جدوال قاعدة البيانات.و يمكنك ان تعطي بيانات اسما، إذا كنت تفضل ذلك. انقر فوق إنهاء والانتهاء من ذلك.

7_عندما يتم إرجاعك إلى النموذج الخاص بك، يجب أن تلاحظ أنه تم إضافة مصدر البيانات كما فى الشكل التالى:



ويمكنك النقر على السهم الصغير بجوار مصدر البيانات لتجد الجدوال و الحقول كما فى الشكل التالى :



8_ إضافة حقل الى النافذة .....لإضافة حقل إلى النموذج الخاص بك، انقر على أحد الحقول في القائمة. اضغط باستمرار على زر الماوس الأيسر، واسحب الحقل على النافذة التى تريدها كما يلى :



في الصورة أعلاه، يتم سحب الحقل FNAME على النموذج......و سوف تجد ايضا بعض الكائنات فى اسفل و شريط التنقل بين الحقول و السجلات فى الاعلى ....و لو قمت بتشغيل برنامجك ستجد أنه قد تم الاتصال بقاعدة البيانات و يمكنك بالفعل التنقل بين السجلات باستخدام شريط التنقل كما فى الشكل التالى :



9_ مربع النص هو العنصر الافتراضى الذى يظهر عند سحبك لاحد الحقول على النافذة ليتم عرض بيانات هذا الحقل فى هذا المربع .....لكن يمكنك تغير مربع النص بأحد الادوات الاخرى مثل listbox وذلك من خلال تحديد الحقل ثم من خلال السهم الصغير أختر نوع العنصر الذى تريده أن يظهر بدلا منه كما فى الشكل التالى :

سبحان الله وبحمدة .....سبحان الله العظيم


رد: الاتصال و التعامل مع قاعدة بيانات أكسس فى بيئة vb.net بواسطة تقنية ADO.NET

مُساهمةالأتصال بقاعدة البيانات عن طريق الأكواد Connection

وهذه الطريقة هي ما أفضلها دائما .. وستجد المتعة في ذلك من خلال تتبعك
معنا لهذه الدروس وسوف يدور الكلام هنا حول الاتصال بقاعدة البيانات من
نوع اكسس Access وذلك لأن الاغلبية يتعامل معها فلنبدأ ...... .
قبل التعامل مع مصدر بيانات، عليك فتح اتصال معها وفي هذا القسم سنعرض الاساليب المتعددة للاتصال بمصادر البيانات.

تعريف كائن الاتصال
الرمز:
Dim Con As New OleDbConnection()

حيث : OleDbConnection مخصصة للأتصال بقواعد البيانات من نوع OLE DB .NET Data Provider أما أذا كانت قواعد البيانات من نوع SQL Server .NET Data Provider فسيكون تعريف الاتصال من نوع SqlConnection و بهذا الشكل :
الرمز:
Dim Con As New SqlConnection()

نص الاتصال بالقاعدة
سوف نقوم بتعريف متغير من نوع نص ووضع مسار الاتصال بقاعدة البيانات بداخله بهذه الطريقة
الرمز:
 Dim ConnString As String  = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source =c:\HnHnDB.mdb""

وهذ الكود يجب أسناده إلى مزود البيانات الذي يميل له كما سبق ذكره وهنا سيتم اسناده إلىOleDbConnection وستكون الشفرة بهذه الطريقة
الرمز:

  Dim con As OleDbConnection
               con = New OleDbConnection(ConnString)

أو يمكنك كتابة التعريف بهذا الشكل ايضا
الرمز:
Dim con As New OleDbConnection(ConnString)

ملاحظة : بدلا من كتابة نص الاتصال كاملا في كل مرة تنوي انشاء كائن اتصال جديد قم بوضع نص الاتصال في متغير عام على مستوى المشروع والقصد ان المتغير يختصر عليك كتابة شفرة الاتصال بهذه الطريقة في كل مرة تريد بها انشاء كائن للأتصال بالقاعدة لتحديث بياناتها .
الرمز:

Dim con As New OleDbConnection "Provider=Microsoft.Jet.OLEDB.4.0;Data Source =c:\HnHnDB.mdb"

ولجعل المسار لمجلد القاعدة معروف تلقائيا كما في VB6 مثلاً والقصد هنا استخدام App.Path فقد تغييرت كلمة المسار التلقائي في VB.NET Application.StartupPath إلى وهناك أشكال عدة في استخراج المسارات في الفيجول نت سنذكرها لاحقاً أنشالله . وبهذه الكلمة ستكون شفرة الاتصال بهذه الطريقة:

الرمز:

        Dim  ConnString As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source =" & Application.StartupPath & "\HnHnDB.mdb"
 

ملاحظة : يجب أن تكون قاعدة البيانات HnHnDB.mdb في مجلد المشروع Bin يمكنك وضع القاعدة في اي مكان تريد ولكن الآن نحن نتكلم حول خاصية Application.StartupPath والتي تعرف مسار هذا المجلد من ضمن المشروع

أما بالنسبة لشفرة الاتصال بقاعدة بيانات من نوع سيرفر SQL Server وستكون بهذا الشكل وهي لا تختلف عن الاكسس سوى في عملية الاتصال حيث أنك ستتعامل مع ال Access كملف لقاعدة بيانات اما SQL Server فأنك تتعامل مع محرك قواعد بيانات

الرمز:

                Dim SQLCon As New SqlConnection()                SQLCon.ConnectionString = "Data Source=DEV4ARABS_SERVER;" _
                & "User ID= HnHn; Password= _ ";admin
                & "Initial Catalog= "القـــاعدة

الآن سنأتي على فتح وإغلاق الاتصال بالقاعدة : بعد أن اسندنا نص الاتصال بالقاعدة للمتغير ConnString يمكننا الآن البدء بفتح الاتصال واغلاقه عن طريق هذه الجمل ...


الرمز:

con.Open ()  لفتح الاتصال
con.Close () لأغلاق الاتصال


ولمعرفة حالة الاتصال ان كنا متصلين بالقاعدة أم لا سنستخدم الحالة State التابعة لكائن الاتصال والتي سينتج عنها عند الاستفسار ما يلي أن كان الاتصال في الاوضاع التالية :

[1] Open الاتصال مفتوح
[2]Closed الاتصال مغلق
[3]Connecting جاري فتح الاتصال
[4]Executing يتم تنفيذ امر استعلام على الاتصال
[5] Fetching جاري الحصول على بيانات من سجلات مصدر البيانات

وستأتي شفرة التأكد من حالة الاتصال بهذه الطريقة
الرمز:

            If (Con.State And ConnectionState.Open) <> 0 Then
'HnHn التعرف إلى حالة الاتصال
                        MsgBox("تم فتح الاتصال بنجاح")
                Else
                        MsgBox("تم اغلاق الاتصال ")
                End If



ويمكنك تغيير الوضع Open إلى إي من الأوضاع السابقة

سنأتي الأن على ذكر كائن الأوامر Command ولتذكير فقط بما سبق ذكره عن الكائن




[6]- مجموعة البيانات Commandيسمح هذا الكائن لكائن DataAdapter بتطبيق الأوامر على قاعدة البيانات

بعد تكوين الاتصال مع قاعد ة البيانات، ستأتي هذه الخطوة وهي ارسال جمل
الاستعلام وهنا بأمكانك حصر البيانات التي تريد استعراضها كما تشاء أن كانت
لديك فكرة في جمل الاستعلام SQL وستكون هذه الشفرة مع شفرة الاتصال وسيكون تعريفا بهذه الطريقة
:
الرمز:

Dim cmd As New OleDbCommand()


أما أذا كانت قواعد البيانات من نوع SQL Server .NET Data Provider فسيكون تعريف الاتصال من نوعSqlConnection و بهذا الشكل :
الرمز:

Dim cmd As As New SqlCommand()


وستكون شفرة الربط مع اتصال بهذه الطريقة
الرمز:

'HnHn  شفرة الاتصال بالقاعدة بشكل تام
Dim Con As New OleDbConnection(ConnString)
Dim cmd As New OleDbCommand()
Con.Open()
cmd.Connection = Con

سبحان الله وبحمدة .....سبحان الله العظيم

رد: الاتصال و التعامل مع قاعدة بيانات أكسس فى بيئة vb.net بواسطة تقنية ADO.NET

مُساهمة
تابع لعملية الاتصال (فتح الجداول والتعامل معها )


سنحتاج هنا إلى عنصرين رئيسيين لتكملة عملية التعامل مع البيانات وهما ...


[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







وفي الختام هناك مثال مرفق لتوضيح كل ما تم ذكره في عملية الاتصال

سبحان الله وبحمدة .....سبحان الله العظيم


رد: الاتصال و التعامل مع قاعدة بيانات أكسس فى بيئة vb.net بواسطة تقنية ADO.NET

مُساهمة
عملية الأضافة والتحديث

الأضافة

سأتحدث هنا بطريقتين لأتمام عملية الاضافة وهما


[1] استعمال خاصية DataRow
[2] استعمال جملة استعلام INSERT INTO
---
DataRow حيث انها تمثل سجل كامل من سجلات الجدول ولن نستطيع التعامل معها بإنشاء كائن باستخدامNew من الفئة DataRow بمعنى ان تعريف المتغير بهذه الطريقة الخاطئة لن يفيد في عملية التعامل مع الفئة
الرمز:
Dim dRow As New DataRow


وأنما يتم ذلك بطريقتين :

[1] - بتعريف سطر جديد NewRaw()
[2] - تعريف مصفوفة من النوع Object

ولن اشرح سوى طريقتين كما ذكرت سابقا وهما الأكثر استخداما في اعتقادي وايضا لكي لا تتشعب الامور بتفاصيل اكثر حيث اني احاول ان اركز على الامور الاكثر فائدة وتدول وكلن له طريقته ......اذا سنشرح

الطريقة الأولى باستخدام NewRaw() التابعة للفئة DataRow
الرمز:
Dim dRow As DataRow = NameTabel.NewRow()

ملاحظة : NameTabel هو الجدول (مصدر البيانات) وهذه هي شفرة عملية أضافة سجل بـالفئة DataRow والخاصية NewRaw()
الرمز:

                REM : HnHn كائن للإضافة سطر جديد لمجموعة البيانات
                Dim dRow As DataRow

                REM : HnHn اضافة سطر جديد في الجدول لتخزين البيانات فيه
                dRow = rs.Tables("HnHnEmp").NewRow()

                REM : HnHn : عملية نقل البيانات من الحقول إلى حقول الجدول 
                'أما عن طريق تحديد اسماء الحقول التي في الجدول إو عن طريق الفهرسة

                REM : HnHn : dRow.Item("LastName") = TextBox2.Text
                REM : HnHn : OR Index
                dRow.Item(1) = TextBox2.Text
                dRow.Item(2) = TextBox3.Text
                dRow.Item(3) = TextBox4.Text
                dRow.Item(4) = TextBox5.Text
                dRow.Item(5) = TextBox6.Text
                dRow.Item(6) = TextBox7.Text



الطريقةالثانية باستخدام INSERT INTO

جمل ال SQL هي احدى طرق عملية الاضافة وستكون شفرة الاضافة مسنودة إلى متغير من نوع كوماند OleDbCommand
وقد قلنا سابقا أن هذه الفئة تؤدي مهمة تطبيق الاوامر على القاعدة وها نحن
نستخدمها الآن في تطبيق جملة SQL من آجل عملية الأضافة حيث سنحتاج منها
العنصر CommandText وستكون الشفرة على سبيل المثال كما يلي ..
الرمز:

                'Rem HnHn : تعريف متغير واسناده إلى كوماند ليقوم بعملية الحفظ لجملة الاضافة
                Dim SavInto As New OleDb.OleDbCommand

                REM HnHn : INSERTجملة الاضافة بـ
                SavInto.CommandText = "INSERT INTO HnHnEmp (NameField) values ('" & TextBox1 & "') "


حيث NameField = سنكتب بدلا عنه اسماء الحقول الموجودة في الجدول وتفصل بينهما الفاصلة (,)وسنكتب نظيرها من الحقول اللي على الفورم بنفس التسلسل TextBox2 , TextBox1 وهكذا ...مع مراعاة علامات التنصيص ' أذا كان الحقل في الجدول من نوع نص وبدون علامات تنصيص أذا كان نوع الحقل رقم وعلامة # اذا كان نوع الحقل تاريخ وبناء على المثال المرفق لديكم سنكتب الشفرة كما يلي ...
الرمز:

                'Rem HnHn : تعريف متغير واسناده إلى كوماند ليقوم بعملية الحفظ لجملة الاضافة
                Dim SavInto As New OleDb.OleDbCommand

                REM HnHn : INSERTجملة الاضافة بـ

SavInto.CommandText = "INSERT INTO HnHnEmp (LastName,FirstName,BirthDate,Address,Mobail,Notes) values ('" & TextBox2.Text & "','" & TextBox3.Text & "',#" & TextBox4.Text & "#,'" & TextBox5.Text & "'," & TextBox6.Text & ",'" & TextBox7.Text & "') "



تحديث البيانات

وهكذا عرضنا ثلاثة طرق لعملية الاضافة والموضوع لم ينتهي بعد حيث لابد من
بعد عملية الاضافة تأتي عملية تحديث البيانات وهذا ما سنشرحه الآن مع كل
طريقة من الطرق السابقة كيف سيتم تحديث البيانات فيها وسنبدأ بــــــ

تحديث بيانات الطريقة الأولى : NewRaw() الخاصة بالفئة DataRow

وستأتي عملية تحديث البيانات هنا بتعريف متغير من نوع الفئة DbCommandBuilder الخاص بالعمليات التي تحدث على السجلات من جمل الاستعلام SQL ثم يتم اسناد الكائن للمحول DataAdapter
ومن ثم فتح الجدول وأضافة سجل فيه مدرج في حقوله البيانات المسنده له ومن
ثم اسناد السجل بحقوله للمحول في عملية تحديث للبيانات وتأتي الشفرة
النهائية في هذه المرحلة من عملية الاضافة بهذه الطريقة كما يلي ...


الرمز:

            Dim CmdB As New OleDb.OleDbCommandBuilder(Dp)
                '------------------------
                REM : HnHn كائن للإضافة سطر جديد لمجموعة البيانات
                Dim dRow As DataRow

                REM : HnHn اضافة سطر جديد في الجدول لتخزين البيانات فيه
                dRow = rs.Tables("HnHnEmp").NewRow()

                REM : HnHn : عملية نقل البيانات من الحقول إلى حقول الجدول 
                'أما عن طريق تحديد اسماء الحقول التي في الجدول إو عن طريق الفهرسة

                REM : HnHn : dRow.Item("LastName") = TextBox2.Text
                REM : HnHn : OR Index

                dRow.Item(1) = TextBox2.Text
                dRow.Item(2) = TextBox3.Text
                dRow.Item(3) = TextBox4.Text
                dRow.Item(4) = TextBox5.Text
                dRow.Item(5) = TextBox6.Text
                dRow.Item(6) = TextBox7.Text

REM HnHn : اضافة السجل للجدول
                rs.Tables("HnHnEmp").Rows.Add(dRow)

REM HnHn : عملية التحديث في قاعدة البيانات
                Dp.Update(rs, "HnHnEmp")
                MsgBox("تمت عملية الاضافة والحفظ في قاعدة البيانات بنجاح")


تحديث بيانات الطريقة الثانية : INSERT INTO ...وفي هذه المرحلة تتم عملية تحديث البيانات بالخطوات التالية


[1] - تعريف المتغير من نوع أمر [OleDbCommand]
[2] - تحديد مسار الاتصال واسناده للمتغير
[3] - تحديد نوع الامر وسيكون من نوع نص .. لأننا نحن من سيقوم بكتابة الاستعلام يدويا
[4] - كتابة جملة الاستعلام لأضافة الحقول للجدول
[5] - فتح الاتصال لأتمام العملية النهائية
[6] - حصر السجلات التي ستتأثر بعملية الأضافة
[7] - اغلاق الاتصال

والشفرة ستكون كالتالي ....


الرمز:

                REM HnHn : تعريف متغير واسناده إلى كوماند ليقوم بعملية الحفظ لجملة الاضافة
                Dim SavInto As New OleDb.OleDbCommand

                REM HnHn : تحديد مسار الاتصال للمتغير
                SavInto.Connection = Con

                REM HnHn : تحديد نوع الأمر وسيكون من نوع نص لأننا سنقوم بكتابة الاستعلام يدوي
                SavInto.CommandType = CommandType.Text

                REM HnHn : INSERTجملة الاضافة بـ
                SavInto.CommandText = "INSERT INTO HnHnEmp(LastName,FirstName,BirthDate,Address,Mobail,Notes) values ('" & TextBox2.Text & "','" & TextBox3.Text & "',#" & TextBox4.Text & "#,'" & TextBox5.Text & "'," & TextBox6.Text & ",'" & TextBox7.Text & "') "

                REM HnHn  : فتح الاتصال لعملية الاضافة
                Con.Open()

                REM HnHn :  لحصر عدد السجلات التي تأثرت بعملية الاضافة
                SavInto.ExecuteNonQuery()

                REM HnHn : اغلاق الاتصال
                Con.Close()

                MsgBox("تمت عملية الاضافة والحفظ في قاعدة البيانات بنجاح")
  الموضوع منقول للامانة

هناك 3 تعليقات:

  1. شكرا علي المجهود ربنا يوفقك وياريت تواصل (:

    ردحذف
  2. السلام عليكم ممكن نعرف من اللي كاتب الموضوع ضروري اريده مساعده ي ريت اجد رد ارجوووكم مساعدتكم ...اة ادلوني ع احد يكون متخصص ةيستطع تقديم لي مساعده..

    ردحذف
  3. الرجاء التواصلا معنا عبر صفحتنا على الفايس بوك اوعن طريق ايمل الشبكة toumssalte@gmail.com

    ردحذف