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

استفسار في استيراد وتصدير جميع النماذج عن طريق الكود

بدأه saalsalman في 13 نوفمبر 2009 · 12 رد · 1,427 مشاهدة · في قواعد بيانات Microsoft Access
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

اشكر القائمين على هذا الموقع ولدي سؤال يحتاج الى اجابة لو تكرمتم

في هذا الموضوع : استيراد و تصدير النماذج عن طريق الكود

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

DoCmd.TransferDatabase acExport, "Microsoft Access", txtPath, acTable, "Costomer_list", "Costomer_list", False

DoCmd.TransferDatabase acExport, "Microsoft Access", txtPath, acTable, "Employee_list", "Employee_list", False

DoCmd.TransferDatabase acExport, "Microsoft Access", txtPath, acForm, "Costomer_list", "Costomer_list", False

DoCmd.TransferDatabase acExport, "Microsoft Access", txtPath, acQuery, "CustomerFind", "CustomerFind", False

DoCmd.TransferDatabase acExport, "Microsoft Access", txtPath, acReport, "Costomer_list", "Costomer_list", False

DoCmd.TransferDatabase acExport, "Microsoft Access", txtPath, acModule, "partname", "partname", False

سؤالي هو ماذا لو اردنا التخلص من هذه المعضلة

وذلك بإنشاء كود يقوم بتصدير جميع النماذج الموجودة في القاعدة بدون استثناء و من دون ان احدد اسمائها في الكود . هل يمكن عمل ذلك وشكرا ؟؟؟

#2

الى أعلى

#3

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

يمكنك أخي الدوران على كل الكائنات، مثل الكود التالي:

	 
	Dim obj As AccessObject
	Dim tbl As DAO.TableDef

	For Each tbl In CurrentDb.TableDefs
		If tbl.Attributes = 0 Then
			DoCmd.TransferDatabase acExport, "Microsoft Access", "D:\Import.mdb", acTable, tbl.Name, tbl.Name
		End If
	Next tbl

	For Each obj In CurrentProject.AllForms
		DoCmd.TransferDatabase acExport, "Microsoft Access", "D:\Import.mdb", acForm, obj.Name, obj.Name
	Next obj

	For Each obj In CurrentProject.AllReports
		DoCmd.TransferDatabase acExport, "Microsoft Access", "D:\Import.mdb", acReport, obj.Name, obj.Name
	Next obj

	For Each obj In CurrentProject.AllModules
		DoCmd.TransferDatabase acExport, "Microsoft Access", "D:\Import.mdb", acModule, obj.Name, obj.Name
	Next obj

	For Each obj In CurrentData.AllQueries
		DoCmd.TransferDatabase acExport, "Microsoft Access", "D:\Import.mdb", acQuery, obj.Name, obj.Name
	Next obj

والله أعلم.

تم تعديل هذه المشاركة بواسطة أحمد مبارك الحيقي في 15 نوفمبر 2009 في 19:10

#4

بارك الله بكم أخواني الكرام : أحمد مبارك الحيقي و الأخ سلمان

على هذه المشاركه وأسأل الله ان يوفقكم لما يحبه ويرضاه

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

post-15367-1258306425_thumb.gif

المثال بعد التعديل

DbExport_UP.rar

بالتوفيق لكم جميعا

#5

الأخت الكريمة الفاضلة زهرة:

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

لك مني جزيل الشكر والتقدير وأعانك الله علينا.

#6
team2000 كتب:
الأخت الكريمة الفاضلة زهرة:

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

لك مني جزيل الشكر والتقدير وأعانك الله علينا.

اخي الكريم team2000

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

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

post-15367-1258354535_thumb.gif

1. اختر من قوائم كائنات قاعدة البيانات الحالية الكائنات المطلوب تصديرها

2. اختر مسار قاعدة البيانات التي سوف يتم التصدير لها

3. اضغط على زر الأمر تصدير Export

zaDbExport.rar

بالتوفيق

#7

شكرا لك اختي الفاضلة أم عهود على هذا العمل الجميل وبارك الله بك ..

وهناك ملاحظة صغيرة ..المثال عمل بشكل ممتاز على قاعدة بيانات بدون رقم سري وعندما تمت التجربة على قاعدة ثانيه عليها رقم سري وبعد اضافة الكود التالي الى زر الامر تصدير ... (هذا الكود من صنع يديك الكريمة)

Dim wrkJet As Workspace
Dim dbs As Database
Set wrkJet = DBEngine.Workspaces(0)
Set dbs = wrkJet.OpenDatabase(Me.txtPath, False, False, ";PWD=1234")

حدث معي مشكلة بالنموذج المسمى Costomer_list واعتقد ان الموضوع تشابه اسماء بين اسم الجدول واسم النموذج وتم حل المشكلة بتعديل اسم النموذج ..

والملاحظة الثانية مشكلة في الوحدة النمطية partname وتم حل المشكلة بتعديل الاسم فقط .

شكرا على هذه التحف الجميلة وجعلها الله لك في ميزان حسناتك ..

أبو عدنان ..

27169617.gif
#8

الاخت الكريمة الفاضلة: زهرة "المنتدى"

دائماً متألقة ومبدعة... راعاك الله وسدد خطاك.. وزادك من علمه.. أميـــــــــــــــــــــــــــــــــــــــــــــــــــــــــن

#9

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

شكرا لكم جميعا

على ما قدمتموه لنا من خبرات فعالة

اما الان سوف ابين لكم عن السبب الرئيسي لهذا السؤال الا وهو موضوع ارقني كثيرا .

حيث انه يوجد لدي برنامج مقسم الى قسمين

القاعدة : وتحتوي على خمس ملفات وبها الجداول

الواجهة : ملف واحد به النماذج

القاعدة موجودة على السيرفر الرئيسي

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

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

وعدد الاجهزة الموجودة 53 جهاز ومسح الملف القديم .

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

الفكرة :

هي عمل جدول في قاعدة البيانات يحتوي على حقلين . وليكن اسمه مثلا Refresh_all

الاول : اسم المستخدم (ويكون مربوطا بجدول المستخدمين) بعلاقة ون تو ون

والثاني : (حقل من نوع نعم او لا ) يكون اسمه حالة التحديث.

وضع الكود المشار اليه بالاعلى واللذي يقوم بإستيراد النماذج والتقارير و الوحدات .

والكود الذي يقوم بربط الجداول بالقاعدة .

في النموذج الاول الذي في الواجهة (نموذج تسجيل الدخول )

نقوم بوضع كود من نوع

Dlookup

للتحقق من وضع النماذج للمستخدم بحيث يقوم هذا الامر بالبحث عن حالة التحديث بناءا على اسم المستخدم .


Dim obj As AccessObject
Dim tbl As DAO.TableDef

For Each tbl In CurrentDb.TableDefs
If tbl.Attributes = 0 Then
DoCmd.TransferDatabase acLink, "Microsoft Access", "database source", acTable, tbl.Name, tbl.Name
End If
Next tbl

For Each obj In CurrentProject.AllForms
DoCmd.TransferDatabase acImport, "Microsoft Access", "database source", acForm, obj.Name, obj.Name
Next obj

For Each obj In CurrentProject.AllReports
DoCmd.TransferDatabase acImport, "Microsoft Access", "database source", acReport, obj.Name, obj.Name
Next obj

For Each obj In CurrentProject.AllModules
DoCmd.TransferDatabase acImport, "Microsoft Access", "database source", acModule, obj.Name, obj.Name
Next obj

For Each obj In CurrentData.AllQueries
DoCmd.TransferDatabase acImport, "Microsoft Access", "database source", acQuery, obj.Name, obj.Name
Next obj

DoCmd.RunSQL "UPDATE Refresh_all SET Refresh_all.Status = 0 " & _
"WHERE (((Refresh_all.User_Name)=[forms]![Logon]![User_Name]));"
End if
if dlookup("[status]","Refresh_all","[user_name]=" & Forms!Logon!User_name)=-1 then

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

وفي الختام لا يسعني الا ان اشكر كل من ساعدني على فعل ذلك أو شاركنا همومنا واهدر جزءا من وقته للبذل في خدمة المجتمع فجزاكم الله خيرا .

#10

أخي الكريم Saalsalman:

هده فكرة جميلة كنت ابحث عنها ولكن واجهتني مشكلة وهي أن الجداول أو النمادج التي ستم استيرادها إلى القاعدة هي بأسماء الجداول والنمادج التي فيها ولذلك سيقوم الاكسس بتغيير اسم النمادج المستوردة بوضع رقم (1) بعد كل اسم كالمعتاد وبذلك لن يتم التعرف عليها باعتبارها هي النماذج الجديدة المعدلة لذا يلزم اضافة كود أولاً لالغاء النماذج القديمة قبل استيراد النماذج الجديدة المعدلة. فوقفت عتد هذا الحد. فكيف تغلبت على هذه المشكلة؟ ارجو إفادتي مع جزيل شكري واحترامي لكل من ساهم في توضيح هذه الفكرة وساهم في ظهورها والاستفادة منها وشكري لك على طرح السؤال.

#11

اخواني الكرام

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

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

اخي الفاضل team2000

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

Function zExportAllForms()
On Error GoTo MyErr
Dim strPath As String
'تستطيع هنا تغيير مسار قاعدة البيانات المراد التصدير اليها 
strPath = "C:\MyDb_be.mdb"
Dim FrontObj As AccessObject, FrontDB As Object
Set FrontDB = Application.CurrentData
For Each FrontObj In FrontDB.AllForms
DoCmd.DeleteObject acForm, FrontObj.name
End If
Next FrontObj

For Each BackObj In BackDB.AllForms
DoCmd.TransferDatabase acExport, "Microsoft Access", strPath, acForm, BackObj.name, BackObj.name
End If
Next BackObj

Set FrontDB = Nothing
Set BackDB = Nothing

MyErr:
If Err.Number <> 0 Then
MsgBox Err.Number & " - " & Err.Description
End If
End Function

بالتوفيق

#12

الاخت الكريمة المتألقة دائماً : أم عهــود وزهرة المنتدى

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

#13

جزاكى الله كل خير يا أم عهود

وبارك الله فيكم إخوانى

تمنياتى للجميع بالتوفيق

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