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

تعديل كود حذف الجداول من قاعدة البيانات

بدأه alexandrien في 30 أبريل 2012 · 6 رد · 1,218 مشاهدة · في قواعد بيانات Microsoft Access
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

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

الأخوة والأخوات مشرفي وأعضاء المنتدى الكريم

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

Private Sub Form_Load()
If Date = #10/1/2012# Then

'لحذف العلاقات بين الجداول
Dim DB As DAO.Database, i As Integer
Dim totalRelations As Integer
	Dim RS As Recordset
	Dim TableName As String
Set DB = CurrentDb()
totalRelations = DB.Relations.Count
If totalRelations > 0 Then
For i = totalRelations - 1 To 0 Step -1
DB.Relations.Delete (DB.Relations(i).Name)
Next i
End If

'لحذف الجداول
 	Set RS = DB.OpenRecordset("Select name from MsysObjects where (type = 1 and name not like 'Msys*')")
	Do While Not RS.EOF
    	TableName = RS("Name")
    	On Error Resume Next
    	DoCmd.DeleteObject acTable, TableName
    	RS.MoveNext
	Loop
	RS.Close
 End If

End Sub

والكود يعمل بشكل ممتاز جدا

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

قاعدة الجداول فقط واسمها : برنامج متابعة السيارات_be.mdb

قاعدة النماذج والتقارير والجداول المرتبطة واسمها : برنامج متابعة السيارات.mdb

وبعدها لم يعمل الكود وأعتقد أن الكود لم يجد الجداول في القاعدة التي تحتوي على النماذج ( برنامج متابعة السيارات.mdb ) لذلك أرجو منكم التعديل على الكود حتى يقوم بحذف الجداول في القاعدة الثانية ( برنامج متابعة السيارات_be.mdb )

مع العلم أن القاعدتين موجودين في الدرايف D داخل مجلد ( برنامج متابعة السيارات )

وهل سوف يعمل الكود إذا ما تم وضعه على الجهاز الآخر الذي يشارك قاعدة البيانات ؟

مع جزيل الشكر والتقدير لكل من ساهم في الحل

تم تعديل هذه المشاركة بواسطة alexandrien في 30 أبريل 2012 في 13:58

اللهم آتنا في الدنيا حسنة وفي الآخرة حسنة وقنا عذاب النار

#2

للرفع

اللهم آتنا في الدنيا حسنة وفي الآخرة حسنة وقنا عذاب النار

#3

اخي الكريم

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

تحتاج فقط الى تغيير بسيط جدا في نوع الجداول

حيث type = 1 يمثل الجداول الرئيسية في القاعدة

و type = 6 يمثل الجداول المرتبطه

اذا التغيير فقط في الرقم من 1 الى 6 وسيعمل الكود إن شاء الله

استبدل السطر القديم

Set RS = DB.OpenRecordset("Select name from MsysObjects where (type = 1 and name not like 'Msys*')")

بالسطر الجديد

Set RS = DB.OpenRecordset("Select name from MsysObjects where (type = 6 and name not like 'Msys*')")

بالتوفيق

1
#4
zahrah كتب:

اخي الكريم

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

تحتاج فقط الى تغيير بسيط جدا في نوع الجداول

حيث type = 1 يمثل الجداول الرئيسية في القاعدة

و type = 6 يمثل الجداول المرتبطه

اذا التغيير فقط في الرقم من 1 الى 6 وسيعمل الكود إن شاء الله

استبدل السطر القديم

Set RS = DB.OpenRecordset("Select name from MsysObjects where (type = 1 and name not like 'Msys*')")

بالسطر الجديد

Set RS = DB.OpenRecordset("Select name from MsysObjects where (type = 6 and name not like 'Msys*')")

بالتوفيق

الأخت الكريمة دائماً Zahrah

طبعاً لا أعرف كيف أشكرك

ولكن كل ما يستطيع لساني وأناملي أن تقوله وتكتبه لكي أن يجزاك الله الجنة وخير الدنيا والآخرة

طبعاً التعديل اللي حضرتك سويتيه على السطر ضبط تمام

لكن هذا الكود يقوم بحذف الجداول المرتبطة فقط في قاعدة النماذج ومطلوب أيضاً :

أولاً : أن يقوم بحذف الجداول الأساسية من قاعدة الجداول.

ثانياً : شرط التاريخ لا يعمل ما أدري ما هي المشكلة فيه.

ثالثاً : هلى هناك طريقة لحذف باقي مكونات القاعدة من ( إستعلامات - نماذج - تقارير - ماكرو - وحدات نمطية ).

ولكن دعينا نبدأ بأولاً حيث هو الأهم

ولكي كل التحية والتقدير

تم تعديل هذه المشاركة بواسطة alexandrien في 1 مايو 2012 في 10:15

اللهم آتنا في الدنيا حسنة وفي الآخرة حسنة وقنا عذاب النار

#5

اخي الفاضل

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

If Date =Format( #10/1/2012#,"dd/mm/yyyy") Then

تنسيق التاريخ هو : يوم - شهر - سنه

بالنسبة لحذف الجداول الرئيسية من قاعدة الجداول فلا اعلم لماذا تريد حذفها !!!!

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

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

اما اذا رغبت في حذق الجداول الرئيسية من قاعدة الجداول فيلزمك اعادة الكود القديم الذي به Type=1 الى قاعدة الجداول من خلال عمل نموذج جديد بها ثم تضع الكود بها وسوف يتم حذف الجداول الرئيسية من قاعدة الجداول

بالتوفيق

#6

اليك أخى هذا الكود بعد التعديل

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

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

Private Sub DeleteTables(Optional DBpath As String = "")

On Error Resume Next

'لحذف العلاقات بين الجداول
Dim DB As DAO.Database, i As Integer
Dim totalRelations As Integer
        Dim RS As Recordset
        Dim TableName As String

If DBpath = "" Then
  Set DB = CurrentDb()
Else
  Set DB = OpenDatabase(DBpath)
End If

totalRelations = DB.Relations.Count
If totalRelations > 0 Then
For i = totalRelations - 1 To 0 Step -1
DB.Relations.Delete (DB.Relations(i).Name)
Next i
End If

'لحذف الجداول
        Set RS = DB.OpenRecordset("Select name from MsysObjects where ((type = 1 or type = 6 ) and name not like 'Msys*')")
        Do While Not RS.EOF
        TableName = RS("Name")
        On Error Resume Next
        DoCmd.DeleteObject acTable, TableName
        RS.MoveNext
        Loop

 RS.Close
 Set RS = Nothing
 DB.Close
 Set DB = Nothing

End Sub

مدونتى:-

احترف الأكسس مع أبو يوسف

متغيب حاليا لانشغالى الشديد

#7

الأخوة الاكارم

استخدمت كود اس كيو ال لحذف الجداول المرتبطة ولم تظهر أي مشكلة فحبيت اشاركم الرأي

DoCmd.RunSQL "Drop table table1"
DoCmd.RunSQL "Drop table table2"

عزوز عبداللاه
مدرب ومطور قواعد بيانات أكسس

الاهتمامات

VBA,VB.NET,ASP.NET,SQL SERVER, ORACLE

azouzeg@hotmail.com

01004147149

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