الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

العمل مع الإجراءات المخزنة Stored Procedures في Microsoft Access من خلالVB.NET الجزء الأول

مغلق
بدأه المزيني في 29 أكتوبر 2006 · 5 رد · 2,713 مشاهدة · في ADO.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله والحمد لله والصلاة والسلام على رسول الله وبعد،،

أحببت أن أشارك بهذه المقالة والتي اجتهدت في ترجمتها من اللغة الإنجليزية إلى اللغة العربية فلعل البعض أن يجد فيها الفائدة.

وأعتذر مقدماً لجميع الأخوة عن وجود أي ملاحظات حول الترجمة أو الأسلوب ،وليكرمني الجميع بالإقتراح والتصويب والتعليق وللجميع أطيب تحياتي.

لابأس من تأجيل الإشارة إلى المصدرالأصلي لهذه المقالة في نهاية الجزء الثاني منها فإلى المقالة:

المقدمة

في الإصدارات الأحدث لـ Microsoft Access، بذل جهد عظيم للوصول بهذا المنتج ليصبح نظام قواعد بيانات علائقي كامل الميزات. الإجراءات المخزنة Stored procedures وظيفة طالما اقترنت بأنظمةِ قواعد البيانات المؤسسية مثل SQL Server، هذه الوظيفية يمكنك أن تجدها الآن في Microsoft Access. فالإجراءات المَخْزُونة في Microsoft Access أصبحت متاحة مع الإصدار2000 Access والمحرك النفاث4 لقاعدة البيانات Jet 4 Database Engine. وحتى إن كنت ممن تعود على استخدام الإجراءات المخزنة في SQL Server فستكون من المهتمين بالتعرف على كيفية استخدامها في Access. على كلاً يوجد بَعْض القيود سنذكره لاحقاً في هذ الجزء من المقالة.

سيتم تقسيم هذه المقالةِ إلى جزئين: الجزء الأول سيتناول بالتفصيل كَيفَية إنشاء Stored procedures في Access باستخدام ADO.NET مع Visual Basic.NET. الجزء الثاني سيعرض من خلاله كيفية استخدام الإجراءات المَخزنة Stored procedures المنشئة في الجزء الأول من المقالة بتَجميع طبقة الوصول للبيانات data access tier الذي يُمْكِنُ أَنْ يشكل ويستخدم في تطبيقاتِكَ الخاصةِ. الكود في هذه المقالةِ تم تطبيقه باستخدام الإصدار2002 Access ، ويفترض أَنْ يَعْملَ أيضاً مع نسخة 2000 Access.

كَيفَ تعمل الإجراءات المخزنة في Access؟

بخلاف الكائنات الأخرى في Access الإجراءاتَ المخزنة لَيْسَ لَها واجهة ولا يُمْكن أنْ تنشئ أَو تشغل من خلال واجهة المستخدم في Access. والطريقة الوحيدة لذلك هي ببساطة كتابة الكود. سأريكم كيف يتم ذلك في ADO.NET.( مع تحفظي الشخصي على هذه المعلومة فبالإمكان القيام بذلك من خلال مصمم الإستعلام)

عند إضافة إجراءَ مخزن stored procedure إلى قاعدة بيانات Access يعيد المحرك النفّاثَ Jet Engine صياغة الإجراءِ المَخزونِ إلى كائن استعلام query object. بالنسبة لمطورِ Access قَدْ يَبْدو مثل هذا العملِ غير ضروريِ لتَشْفير الإستعلام كونه يمكن أن يقوم بذلك مباشرة. إلا أنه وعلى العكس من ذلك فلهذا العمل فوائده. انظرعندما يتطلب الأمر التعامل أو التنقل بين نسختين مختلفتين قاعدة بيانات Access وقاعدة بيانات خادمِ SQL. فاستخدام الإجراءات المخزنة ستجعل الأمر أكثر سهولة لكِتابَة كود لطبقة قاعدةَ بيانات التطبيقِ فالتغييرات في البرنامج بين النسخِ المختلفة ستكون طفيفة جداًِ.

إنشاء الإجراءات المخزنة

لتوضيح ذلك سأريك أولاً كَيفية إنشاء جمل SQL التي تقوم بإنشاء الإجراءاتِ المخزنة. في نهاية المقالة سأعرض كامل الكود المطلوب لتشغيل هذه الجمل على قاعدة البيانات. سنستخدم قاعدة بيانات Northwind والتي تأتي ضمن Access وسيتم إنشاء أربعة إجراءاتِ مخزنة. سنركز في جميع الإجراءات على جدول المنتَجاتِ Products . دعنا نبدأُ بأول الأربعة سهولة وهو اختيار كامل البيانات لجميع سجلات الجدول. لإنشاء الإجراءِ المخزونِ نفذ جملة SQL التالية على قاعدةِ البيانات:

"CREATE PROC procProductsList AS SELECT * FROM Products;"

الجزء: "CREATE PROC procCustomerList" هو في الحقيقة الجزء الذي ينشئ الإجراءَ المخزن. والجزءِ الذي يلي "AS" فيمكن أَن يكون أي جملة SQL صحيحِة.

في أغلب الأحيان ستحتاج إلى تمرير قيمة إلى الإجراء المخزن stored procedure وهذه القيمة ستستخدم في الاستعلام. أفترض أنك ترغب حذف سجل على أساس رقم المنتج ProductID لهذا السجل. الإجراء المخزن التالي يمكنك من الإطلاع على كَيفَية القيام بذلك:

"CREATE PROC procProductsDeleteItem(inProductsID LONG)" & _
"AS DELETE FROM Products WHERE ProductsID = inProductsID;"

لاحظ في نهاية السطر الأول على اليمين بعد علامة التنصيص وبعد الإعلانِ CREATE PROC. وجود بارامتر معرف كـ قيمة من النوع Long . وهي القيمة التي تمثل قيمة المتغير الذي يمثل رقم المنتج المراد حذفه.

الجملتين التاليتين توضحان على التوالي كَيفَية إنشاء إجراء مخزن لإضافة وتحديث جدول المنتجات. لاحظ عدم اشتمال الجملتين على جميع الحقول وذلك بقصد الإختصار:

"CREATE PROC procProductsAddItem(inProductName VARCHAR(40), " & _
"inSupplierID LONG, inCategoryID LONG) " & _
"AS INSERT INTO Products (ProductName, SupplierID, CategoryID) " & _
"Values (inProductName, inSupplierID, inCategoryID);"
"CREATE PROC procProductsUpdateItem(inProductID LONG, " & _
"								   inProductName VARCHAR(40)) " & _
"AS UPDATE Products SET ProductName = inProductName " & _
"	WHERE ProductID = inProductID;"

لاحظ وجود الفاصلة لفصل كل بارامتر عن الآخر وذلك عند وجود بارامترات متعددة.

قيود ومحاذير

نذكر هنا بَعْض المحاذيروالقيود التي قَد تصادفك خلال العمل، خصوصاً إذا اعتدت عَلى قوة SQL Server.

البارامترات من نوع Output غير ممكن استخدامها.

لا تستخدم الرمز @ . فالرمز @ يستخدم في أغلب الأحيان من قبل Transact SQL (SQL Server)، حيث يمثل متغير محلي. Access لا يحول هذا الرمز دائماً وأحياناً يتركه أو يتجاهله أو يهمله. وهذا يمكِن أَن يتسبب في حدوث خطأ خفي يمكِن أَنْ يؤدي إلى فقدانِ السلاسل الغير تامة.

الجداول المؤقتة Temporary tables غير متوفرة في Access.

توقع وجود العديد مِن الخيارات المتوفرة في Transact SQL وغير المتوفرَة في Access نظراً لعدم توافقه مع Transact SQL.

الخاتمة

آمل أن تكون هذه المقالة قد سلطت الضوء على جانب قد يكون غائب عن البعض. الأسطر التالية تشتمل على كامل الكود المقدم في هذه المقالة.

لاحظ: مسار قاعدة البيانات المستخدم هو:

C:\Program Files\Microsoft Office\Office10\Samples\Northwind.mdb

ويمكنك تغييره بما يتناسب والمسار الموجود لديك.

Imports System
Imports System.Data
Imports System.Data.OleDb

Module CreateSP

	Sub Main()

		ProductsProcs()

	End Sub

	' Products Stored Procs to be added to the db.
	Sub ProductsProcs()
		Dim sSQL As String

		' procProductsList - Retrieves entire table
		sSQL = "CREATE PROC procProductsList AS SELECT * FROM Products;"
		CreateStoredProc(sSQL)

		' procProductsDeleteItem - Returns the details (one record) from the 
		' JobTitle table
		sSQL = "CREATE PROC procProductsDeleteItem(@ProductID LONG) AS " _
			& "DELETE FROM Products WHERE ProductID = @ProductID;"
		CreateStoredProc(sSQL)

		' procProductsAddItem - Add one record to the JobTitle table
		sSQL = "CREATE PROC procProductsAddItem(inProductName VARCHAR(40), " _
			& "inSupplierID LONG, inCategoryID LONG) AS INSERT INTO " _
			& "Products (ProductName, SupplierID, CategoryID) Values " _
			& "(inProductName, inSupplierID,   CategoryID);"
		CreateStoredProc(sSQL)

		' procProductsUpdateItem - Update one record on the JobTitle table
		sSQL = "CREATE PROC procProductsUpdateItem(inProductID LONG, " _
			& "inProductName VARCHAR(40)) AS UPDATE Products SET " _
			& "ProductName = inProductName WHERE ProductID = inProductID;"
		CreateStoredProc(sSQL)


	End Sub

	' Execute the creation of Stored Procedures
	Sub CreateStoredProc(ByVal sSQL As String)
		Dim con As OleDbConnection
		Dim cmd As OleDbCommand = New OleDbCommand()
		Dim da As OleDbDataAdapter

		' Change Data Source to the location of Northwind.mdb on your local 
		' system.
		Dim sConStr As String = "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data " _
			& "Source=C:\Program Files\Microsoft " _
			& "Office\Office10\Samples\Northwind.mdb"

		con = New OleDbConnection(sConStr)

		cmd.Connection = con
		cmd.CommandText = sSQL

		con.Open()
		cmd.ExecuteNonQuery()
		con.Close()

	End Sub


End Module

في الملف المرفق مثال يحتوي على ماسبق يعمل على VB.NET 2005

العمل مع الإجراءات المخزنة Stored Procedures في Microsoft Access من خلالVB.NET الجزء الثاني والأخير

msaccess_sp.rar

تم تعديل هذه المشاركة بواسطة المزيني في 7 نوفمبر 2006 في 22:22

#2

السلام عليكم ورحمة الله وبركاته :

أولاً الله يعطيك العافية أخي المزيني :) جهد مشكور و مثاب عليه بإذن الله ..

بصراحة يا ريت كل واحد فينا يجتهد في ترجمة مقالة ولو كانت بسيطة

وبعدها ترى ما أحلى مصادرنا العربية ..

ولكن كما يقال أمل إبليس في الجنة :D

دروس و كتب مفيدة----------------------كتيب الإجرائيات المخزنةتعرف على اللغة Transact SQL <<-->> كتيب عن تنصيب قواعد البيانات Sql Server باللغة العربية كتيب عن إنشاء قواعد البيانات في SQL Server باللغة العربية <<-->> درس مع الأمثلة عن المؤشرات و التعامل معها في الـ T-SQLالعبارات الشرطية و الحلقات في T-SQL <<-->> شرح لبعض الـ Extended Stored Procedure استخدام مكتبات الـ Dot Net الخاصة بك في الـ Sql Server 2005 <<-->> التعامل مع المصفوفات من خلال الـ T-SQLتعابير الجداول الشائعة في SQL Server 2005 <<-->>الاتصال بالأداة SQL Server Management Studioحلول سريعة و لمحات برمجية --------------------------------التصدير إلى إكسل : طريقة أولى : طريقة بسطر واحد من الكود <<-->> طريقة ثانية : طريقة تحتاج إنشاء إجرائية مخزنةً تجهيز بيانات جدول بالصيغة XML تمهيداً لحفظها كملف <<-->> تصدير البيانات إلى ملفات نصية برمجياً إغلاق جميع الإتصالات المفتوحة بقاعدة بيانات محددة .. تمهيداً لاسترجاعها أو حذفها <<-->> الاستعلام بناء على وقت مخزن بالصيغة العربية ضمن حقل نصي ..حذف السجلات المتكررة و إبقاء عدد محدد منها في جدول.. <<-->> أسرع طريقة لحذف سجلات جدول كيف احصل على اسم جهازي والباسوورد باستخدام T-SQL <<-->> حشر أنواع الصور المختلفة في حقل من نوع Image باستخدام إجرائية مخزنة .كيف تعرف أنواع الصور المخزنة في حقل من نوع Image .. <<-->> إجرائيات مخزنة ببارامترات ديناميكية مفيدة جداً للاستعلامات استخدام رقم الحقل بدلاً من الإسم في عبارات الإستعلام <<-->> من هو أضخم الجداول في قاعدة بياناتي ؟معرفة زمن تنفيذ الإجرائيات ( لتختار الطريقة الأسرع بين إجرائياتك المخزنة ) <<-->> التعامل مع الـ Rules برمجياً الحصول على آخر صف في الجدول <<-->> قراءة ملفات XML باستخدام T-SQL برمجياً (مثال مرفق)سحب بيانات ملف إكسل إلى الـ SQL Server <<-->> تشفير النسخة الاحتياطية بكلمة مرور <<-->> التخلص من البيانات المكررة <<-->> حل مشكلة التاريخ الهجريDifferential Backup بالتعريف---------- لا إله إلا الله .. محمد رسول الله

أخوكم في الله..  Imad Ozone

#3

جزاك الله كل الخير ولكن لا يمكن عمل جمله استعلام بها وظيفة في الاكسس

sSQL = "CREATE PROC procProductsList1101 AS SELECT OrderDetails.Quantity , aa(OrderDetails.Quantity,OrderDetails.Quantity) AS Exp11 FROM OrderDetails;"

aa as function in access

#4

السلام عليكم

أى الكريم المزيني

مشكوووووووور جدا على هذا الدرس المفيد وفى أنتظار الجزء الثانى

tks.gif

Never Give Up You Are Programmer

Being Genius Is The Step Before Madness

Artificial Intelligence Is No Match For Natural Stupidity

#5

الأخ/KARIMSOFT

ياليت كنت أقدر كان ماتأخرت...

بس ممكن ياباشا ربنا يفتح عليك وتتحفنا بالحل قريباً بمشيئة الله.

فربنا كريم.

الأخوة: imadouzoun و GENIUS-IT أشكر لكم مروركم الكريم وأبشرو بالخير...

بس كن الموضوع موعاجب البعض بحكم أنهم يرون أن أي شيء عن الـ Access لايستحق القراءاة والا وش رأيكم؟

تم تعديل هذه المشاركة بواسطة المزيني في 4 نوفمبر 2006 في 20:43

#6
اقتباس
بس كن الموضوع موعاجب البعض بحكم أنهم يرون أن أي شيء عن الـ Access لايستحق القراءاة والا وش رأيكم؟

مين الى قال كده

بالعكس الموضوع جديد ومفيد جدا

وانا شخصيا أستفدت منه كتير

Never Give Up You Are Programmer

Being Genius Is The Step Before Madness

Artificial Intelligence Is No Match For Natural Stupidity

هذا الموضوع مغلق.

مواضيع مشابهة