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

IF EXISTS بالأكسس

مغلق
بدأه C-Sharp في 18 يناير 2003 · 10 رد · 1,347 مشاهدة · في مراجعة المواضيع
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

في SQL Server يمكن اختبار إن كان الكائن (جدول Table أو إجراء مخزن Stored Procedure أو ... الخ) موجود أو لا قبل حذفه أو إجراء استعلام عليه ، و ذلك باستخدام الصيغة التالية:

IF EXISTS (SELECT MyColumn FROM sysobjects WHERE MyColumn='xyz')

	DROP PROCEDURE xyz

سؤالي هو: هل هناك طريقة مشابهة في Access لاستخدام التعبير IF EXISTS

أرجو أن أكون قد وضحت المطلوب ... و شكرا على المساعدة

#2

نفس الامر يمكن استعماله في الاكسس راجع الملف help

#3

أخي الكريم

السلام عليكم

حسب علمي فإن هذا الأمر غير موجود في الأكسس لكن هذه دالة تقوم بالمطلوب

Function ObjectExists(strObjectType As String, strObjectName As String) As Boolean

     Dim db As Database

     Dim tbl As TableDef

     Dim qry As QueryDef

     Dim I As Integer

     

     Set db = CurrentDb()

     ObjectExists = False

     

     If strObjectType = "Table" Then

          For Each tbl In db.TableDefs

               If tbl.Name = strObjectName Then

                    ObjectExists = True

                    Exit Function

               End If

          Next tbl

     ElseIf strObjectType = "Query" Then

          For Each qry In db.QueryDefs

               If qry.Name = strObjectName Then

                    ObjectExists = True

                    Exit Function

               End If

          Next qry

     ElseIf strObjectType = "Form" Or strObjectType = "Report" Or strObjectType = "Module" Then

          For I = 0 To db.Containers(strObjectType & "s").Documents.count - 1

               If db.Containers(strObjectType & "s").Documents(I).Name = strObjectName Then

                    ObjectExists = True

                    Exit Function

               End If

          Next I

     ElseIf strObjectType = "Macro" Then

          For I = 0 To db.Containers("Scripts").Documents.count - 1

               If db.Containers("Scripts").Documents(I).Name = strObjectName Then

                    ObjectExists = True

                    Exit Function

               End If

          Next I

     Else

          MsgBox "ÎØÃ Ýí ÊÍÏíÏ äæÚ ÇáßÇÆä"

     End If

     

End Function

علماً بأنه يجب تمرير نوع الكائن واسمه لها والنوع هو أحد الأنواع المذكورة داخل الدالة في عبارة If

تحياتي

أخوك / أبو هاجر

#4

شكرا أخوي أبو هاجر على ردك ... لكني كنت أمني النفس بجملة SQL تؤدي الغرض :( ... و السبب أنني أعمل على برنامج يقوم بفتح اتصال مع قاعدة البيانات و إرسال الأوامر و استقبال النتائج باستخدام SQL ... و البرنامج غير معمول بلغة Visual Basic أو VBA

أخوي a_beshari لو كان التعبير IF EXISTS حسب ما أنا كاتبنه شغال ، ما كان طرحت السؤال أصلا :D و الا شو رايك ;) أنا كنت أحتمل أن تكون صيغة التعبير IF EXISTS مختلفة في Access عن SQL Server أو غيره ، فسألت عن ها الشي ... فمثلا في mySQL التعبير IF EXISTS يستخدم بالطريقة التالية:

DROP TABLE IF EXISTS MyTable

و احتملت بعد أن تكون الصيغة وحدة في Access و SQL Server بس sysobjects له بديل باسم ثاني مثلا

على كل حال شكرا على ردك ، و خيرها فغيرها :P

يا أخوان ... صحيح أن خبير الأكسس أفتى بالموضوع بس ممكن يكون غلطان :P فساعدوني و لكم جزيل الشكر

#5

أخي الكريم C-Sharp

السلام عليكم

هل يعقل أن من يبرمج بلغة C-Sharp يحتاج إلى مثل هذه الأوامر أعتقد أن مثل هذا الأمر يفترض أن يكون في لغة البرمجه نفسها والسبب المنطقي أخي الكريم أنك في SQL و MYSQL تتعامل مع سيرفر فتحتاج إلى يقوم السيرفر نفسه بهذه العملية أما مع أكسس فأنت تتعامل مع ملف ومن السهل القيام بهذه العملية من خلال لغة البرمجة C-Sharp نفسها رغم أنني لا أعرف فيها شيئاً لكنني متأكد أنه لا بد من وجود مثل هذه الإمكانية فيها أو على الأقل يمكن الفحص عن طريق اختبار رقم الخطأ

على كل حال إذا كنت غير قادر على إيجاد الأمر الخاص بذلك في C-Sharp فيمكنني مساعدتك

تحياتي

أخوك / أبو هاجر

#6

يا اخي الامر موجود ولكن ربما لم تفهم استخدامه فهو يرجع لك false or true فقط وهو يستعمل عند وجود subquery مثلا select employeeid from orders where employeeid in (select employeeid from employees where employeeid=15) هذا يرجع لنا خطا وذلك لعدم وجود رقم ه1ا الموظف ولذلك اذا استعملنا exists فسوف يرجع لنا false وليس خطا

#7

السلام عليكم

شكرا لك أخي العزيز إبا هاجر (كيف لغتي العربية الفصحى ;)) على تفاعلك معي.

تم وضع مواصفات قياسية للغة SQL كما هو معروف ... لكن و على الرغم من ذلك هناك بعض الاختلافات بين الشركات المصنعة لنظم إدارة قواعد البيانات (DBMS) خاصة في جزء اللغة المتعلق بتعريف و بناء قاعدة البيانات (DDL) ... و من ضمنها التعبير IF EXISTS ... و هذا اللي معقدني :( ... و قبل أن أكمل و أوضح فكرة البرنامج الذي ذكرت ، أريد أن أكتب بضعة أسطر للمبتدئين ؛ علهم يخرجون من هذا الموضوع بفائدة ، و عشان ما يكونون مثل الأطرش في الزفة :P

للمبتدئين فقط

يمكن تقسيم لغة SQL إلى قسمين ، الأول منهما يتعلق بتعريف قاعدة البيانات و بنائها ، و يسمى بـ (Data Definition Language) أو (DDL) ، و من أمثلة أوامر هذا القسم (CREATE, ALTER, DROP) ... و الثاني منهما يتعلق بمعالجة البيانات نفسها و إجراء علمليات الإضافة و الحذف و الاسترجاع و ... الخ عليها ، و يسمى (Data Manipulation Language) أو (DML) ، و من أمثلة أوامر هذا القسم (SELECT, UPDATE, DELETE) ... و عند التعامل مع قاعدة بيانات من نوع Access لن تكون بحاجة للتعامل مع أوامر (DDL) لأن الواجهة المرئية (Visual Interface) تغنيك عن التعامل مع أوامر SQL ... أما عند الإضافة و التعديل و الحذف أو الاستعلام فأنت بالتأكيد بحاجة لأوامر SQL لأنه من غير المعقول أن تقوم بذلك يدويا ، فالبرنامج الذي تكتبه يقوم بإرسال أوامر SQL إلى قاعدة البيانات للقيام بهذه الأعمال.

فكرة البرنامج الذي ذكرت تقوم على أساس توفير بيئة سهلة للمبتدئين لتنفيذ أوامر SQL المختلفة ، و تتعامل مع نظام قاعدة بيانات بسيط مثل Access ، و ذلك بدل أن يقوم الطالب أو أي مبتدئ بتنصيب برامج ضخمة مثل SQL Server أو Oracle أو برامج ذات واجهة استخدام (User Interface) سيئة مثل MySQL فقط لأن عنده كورس SQL بالجامعة أو حاب يجرب أمر من أوامر SQL ، و هو متأكد أن أيا من هذه البرامج لن تكون أهميته بالنسبة له غير ذلك ... أنا واحد من الناس إللي كنت رافض أنزل أوراكل على جهازي (خايف يخرب لي الجهاز :() على الرغم من أن الكورس بالجامعة كان يعتمد عليه ، لكن مشيت أموري بالغصب على MySQL.

أرجو أن يكون ما ذكرت واضحا بالنسبة لفكرة البرنامج ، و شكرا لك ثانية أخي أبا هاجر ;) و أرجو دوام التواصل

أخي العزيز a_beshari أنا مب سيء لها الدرجة بـ SQL عشان ما أعرف شو ترجع IF EXISTS :P و ما دامك مصر ، عطني أمرين SQL كاملين مجربنهم و شغالين معاك على Access ، الأول يقوم بالتأكد من وجود Table أو Query قبل حذفه (يعني يشبه المثال المذكور في موضوعي الأول فوق) و الثاني يقوم بالتأكد من وجود Table قبل إجراء الاستعلام أو الإضافة و ما شابه

و لك كل التحية و الشكر

#8

اخي العزيز لا تزعل مني ولكن اجد صعوبة في الكتابة باللغة العربية اولا

وثانيا لا احب من يدلي بدلوه في شيء لا يعرفه وليس انت المقصود بالطبع

اما الامر Exists فهو يو ضح ما اذا كان هذا ال Subquery سيرجع لنا سجلات ام لا وليس هل الجدول موجود ام لا اكرر اسفي (gift) (f)

#9

أخوي a_beshari ما في داعي للأسف ... أنا ما عندي شي أزعل منه ، لأني كنت متأكد أن في سوء فهم للموضوع بيني و بينك ، و إن شاء الله ما حصل إلا خير ...

شكرا و أرجو دوام التواصل (f)

#10

اذا كنت فهمت السؤال صح

يمكن فتح connection بال ado مثلا

و تكون جملة select عادية مثل

select * from emp

و نسمي ال connection

myconn

مثلا

ثم بعد ذلك بعمل Loop

SQL ="select * from emp "
set Myrec=Myconn.execute(SQL)

if Myrec.EOF then

  هنا معناه انه لم يجد شيء

else


end if
#11

عزيزي محمد طاهر ... شكلك فهمتني غلط :(

جملة MyRec.EOF تختبر فيما إذا كان هناك سجلات (Records) في (RecordSet) بعد موقع المؤشر (Cursor) الحالي أم لا - يمكن استعمالها لمعرفة إن كان الاستعلام قد عاد بسجلات أو لا - ... و ذلك - للأسف - بعيد تماما عن سؤالي

سؤالي هو عن جملة SQL في Access تقوم بنفس وظيفة جملة SQL التي كتبتها في سؤالي الأول

على كل ، شكرا على المحاولة

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

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