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

*كود* يقوم بنفس عمل إستعلام الإلحاق (append) من عدة قواعد فى مجلد

مغلق
بدأه سهمُ في 23 ديسمبر 2002 · 41 رد · 9,145 مشاهدة · في قسم الأرشيف و المواضيع المميزه
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

الأخوة الأفاضل

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

قمت بعمل إستعلام إلحاق وذلك لإلحاق جميع بيانات جميع الجداول من قاعدة البيانات 1 إلى قاعدة البيانات 2 والمتطابقتين فى التصميم والمختلفتين فى البيانات.

وعند تصميم هذا الإستعلام يتم تحديد قاعدة البيانات المطلوب الإلحاق بها.

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

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

#2

أخي الكريم

السلام عليكم

قبل تنفيذ الاستعلام ضع الكود التالي

docmd.setwarnings  false

تحياتي

#3

هذه ثلاث أمثلة علي الاضافة

بال ado

بال dao

بال SQL

المثال الاول ado

unboundado.zip

#5

المثال الثالث SQL

و يوجد فى الموقع فى توقيعي مقال مترجم عن ال DAO & ADO

فى الاسئلة المتكررة فى الاكسس ربما تفيد قراءته

unboundsql.zip

#6

أبوهاجر - محمد طاهر

أشكركم على سرعة الرد

قمت بتحميل المرفقات وسأقوم بدراستها :)

#7

الأخ محمد طاهر

الأمثلة لا تحتوى على المطلوب فهى تحتوى على اضافة بيانات جديدة غير مرتبطة إلى الجدول المحدد فى قاعدة البيانات الحالية :(

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

#8

أخي العزيز

الامثلة بها ال3 جمل كود التي تستخدم بدلا من استعلام الالحاق

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

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

و أما المثال الكامل

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

#9

أخى الفاضل

المطلوب فقط دمج جدولين فى قاعدتى بيانات مختلفتين فى البيانات ومتطابقتين فى التصميم لتكون النتيجة جدول فى إحداهما به البيانات الأصلية (مثلاً البيانات من أ-001 وحتى أ-120) بالإضافة إلى البيانات من الجدول الثانى (مثلاً من ب-001 وحتى ب-150 )

#10

حل مؤقت

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

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

ثم طبق الكود التالي

docmd.runsql("INSERT INTO Table1 ( id, koko, toto ) SELECT Table11.id, Table11.koko, Table11.toto FROM Table11;")

حيث id و toto , koko هي اسماء الحقول المطلوب اضافتها

او لكل الحقول

docmd.runsql("IINSERT INTO Table1 SELECT Table11.* FROM Table11;")

و هذا حل مؤقت لانك ستكتب الكود لكل جدول

اما الحل الكامل فهو عمل loop علي الجداول الموجودة و تنفيذ الامر مباشرو عليها كلها

جرب هكذا مؤقتا

#11

أخى الفاضل(f)

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

فهل يمكن تعديل الكود لإلحاق البيانات من جدول-1 الموجود فى قاعدة بيانات أخرى إلى جدول-1 الموجود فى قاعدة البيانات الحالية

وبالنسبة لربط قاعدتى البيانات ماذا يفيد؟

مع العلم أن هناك من 3 إلى 5 مستخدمين للبرنامج على أجهزة مختلفة وبعد الإنتهاء من إدخال البيانات يتم تجميع البيانات فى أحد هذه الأجهزة يدوياً عن طريق النسخ واللصق لأن عملية الإستيراد لا تفى بالغرض

وتتكرر هذه العملية أكثر من مرة شهرياً

وأيضاً تتغير أسماء قاعدة البيانات فى كل مرة ولكن التصميم ثابت للجميع

ولا يمكن ربط الأجهزة ووضع البيانات على سيرفر

#12

ربما تفيد هذه الطريقة:

أولا استيراد الجداول باستخدام الكود

 DoCmd.TransferDatabase acImport, "Microsoft Access", _

    "C:PAPA318777.mdb", acTable, "table1", "table11"

ثانيا استخدام كود الأخ محمد طاهر للإلحاق

ثالثا مسح الجدول table11

مع وضع كود لقراءة اسم الملف المطلوب الإستيراد منه (لأن اسم قاعدة البيانات يختلف دائما)

فما رأيكم ؟

#13

تفكير منطقي

و ما ينقصه هو ان يتم التعامل معه بصورة عامة

أي تكون هناك واجهة مستخدم لاختيار القاعدة و انتقاء الجداول منها

بحيث تصلح لاي قاعدة

أما كحل لموضوعك ، فاعتقد أنه بذلك محلول

و ما ينقص هو اضافة الآلية عليه

و ليس لدي المطلوب جاهز حاليا

و اذا لم يوافيك به احد الاخوة ساحاول باذن الله اعداده مساء الجمعة

و اذا استطعت قبل ذلك سافعل باذن الله

و علي امل ان تجده من غيري قبل ذلك :D

#14

هذا هو الكود والذى يقوم باستيراد الجدول11 ثم إلحاقه بالجدول1 ثم حذف الجدول11 والذى سيتكرر بعدد جداول البيانات

يبقى موضوع الآلية:) وسأحاول فيه أيضا من أمثلة الموقى

Private Sub Import_Click()

On Error GoTo Err_Import_Click

    DoCmd.TransferDatabase acImport, "Microsoft Access", _

    "C:PAPA318777.mdb", acTable, "table1", "table11"

     DoCmd.SetWarnings False 'أبو هاجر

     DoCmd.RunSQL ("INSERT INTO Table1 SELECT Table11.* FROM Table11;") ' محمد طاهر

    DoCmd.DeleteObject acTable, "Table11"

     DoCmd.SetWarnings True

Exit_Import_Click:

    Exit Sub



Err_Import_Click:

    MsgBox Err.Description

    Resume Exit_Import_Click

    

End Sub
#15

وهذا الكود نص أوتوماتيك ولكنه أفضل من السابق :D

 Private Sub Import_Click()

On Error GoTo Err_Import_Click

Dim ofn As OPENFILENAME

        ofn.lStructSize = Len(ofn)

        ofn.lpstrFilter = "Mdb Files (*.mdb)" + Chr$(0) + "*.mdb" + Chr$(0) _

                        + "Mde Files (*.mde)" + Chr$(0) + "*.mde" + Chr$(0)

        ofn.lpstrFile = Space$(254)

        ofn.nMaxFile = 255

        ofn.lpstrFileTitle = Space$(254)

        ofn.nMaxFileTitle = 255

        ofn.lpstrInitialDir = CurDir

        ofn.lpstrTitle = " Merge Data"

        ofn.flags = 0

        Dim a

        Dim SFN As String 'SFN: Source File Name

        a = GetOpenFileName(ofn)

    If (a) Then

        SFN = Trim$(ofn.lpstrFile)

        DoCmd.TransferDatabase acImport, "Microsoft Access", SFN, acTable, "table1", "table11"

        DoCmd.TransferDatabase acImport, "Microsoft Access", SFN, acTable, "table2", "table22"

        '...

        '...

        DoCmd.SetWarnings False

        DoCmd.RunSQL ("INSERT INTO Table1 SELECT Table11.* FROM Table11;")

        DoCmd.RunSQL ("INSERT INTO Table2 SELECT Table22.* FROM Table22;")

        '...

        '...

        DoCmd.DeleteObject acTable, "Table11"

        DoCmd.DeleteObject acTable, "Table22"

        '...

        '...

        DoCmd.SetWarnings True

    Else

        

    End If

Exit_Import_Click:

    Exit Sub



Err_Import_Click:

    MsgBox Err.Description

    Resume Exit_Import_Click

    

End Sub
#16

الإخوة الكرام سهم محمد

بداية آسف للمقاطعة لكن مادفعني إلى ذلك هو ما قاله الأخ محد

اقتباس
و ليس لدي المطلوب جاهز حاليا

و اذا لم يوافيك به احد الاخوة ساحاول باذن الله اعداده مساء الجمعة

مرفق ملف يقوم بالمطلوب

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

استورد جميع الجداول إلى الملف المرفق واحذف أي جداول أخري موجودة في الملف

بالطبع يجب أن تكون الجداول في جميع الملفات وفي الملف المرفق متماثلة تماماً

بعد ذلك افتح المثال وسوف يعرض عليك قائمة بأسماء جميع قواعد البيانات الموجودة المجلد

حدد قواعد البيانات التي تريد الاستيراد منها بالنقر عليها لتحديد أكثر من قاعدة بيانات استخدم مفتاحي SHIFT لتحديد مجموعة متوالية أو CTRL لتحديد مجموعة متفرقة من قواعد البيانات المعروضة في القائمة

انقر زر استيراد البيانات وسوف يتم تجميع البيانات في الجداول الموجودة في الملف المرفق

أخيراً لا تغير اسم الملف المرفق

ملاحظة : لم أجرب البرنامج آمل تجربته وإخباري

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

imp_data.zip

#17

أخي العزيز

قاطع فى أي وقت تحب فبالتأكيد تدخلك فيه فائدة (f)(f)

و جزاك الله خيرا علي المثال ( سأجربه مساء باذن الله )

#18

أبو هاجر(f)(f)(f)

أشكرك على الملف وسأحاول تجربته غداً إن شاء الله

#19

الأخ سهم

السلام عليكم

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

أنا في الانتظار حفظك الله فلقد أمضيت وقتاً ليس باليسير في كتابة الكود وأنتظر النتيجة

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

#20

أخي العزيز

مجهود رائع

فقط ملحوظتان

فى كود زر الاستيراد

Set ctl = Me.datalist

بدلا من

ctl = Me.datalist

لانها لم تعمل علي اكس بي الا هكذا

و ايضا بعد الاستيراد لاول مرة قبل تشغيل الكود ، نقوم بمسح المحتويات قبل التجميع

و بما أنك تكرمت بكل هذا الكود

أقترح اضافة الاستيراد الاول و الغاء البيانات فى الزر الاعلي علي أن ينتقي المستخدم احدي القواعد فقط

كود رائع و جزاك الله خيرا

#21

الأخ محمد

أشكرك على ملاحظاتك القيمة

اقتباس
Set ctl = Me.datalist

بدلا من

ctl = Me.datalist

لانها لم تعمل علي اكس بي الا هكذا

و ايضا بعد الاستيراد لاول مرة قبل تشغيل الكود ، نقوم بمسح المحتويات قبل التجميع

تم تعديلها

أما قولك

اقتباس
أقترح اضافة الاستيراد الاول و الغاء البيانات فى الزر الاعلي علي أن ينتقي المستخدم احدي القواعد فقط

فمعذرة لأنني لم أفهم قصدك آمل منك شاكراً التوضيح حتى أعدك الكود تعديلا نهائيا وأرفقه

تحياتي الطيبة لك

#22

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

ثم بعد ذلك يتم مسح محتويات الجداول

و تتم الخطوتان قبل الدمج فى الجدول الجديد

و يكون هذا المرحلة الاولي

أما الثانية

فكما هي

و جزاك الله خيرا و أكثر من أمثالك (f)

#23

أخي الكريم محمد

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

تحياتي وشكراً على ملاحظاتك

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

#24

يبدو أنني لم أوضخ بشكل كافي :D

ما قصدت اضافته هو هذه الخطوة

اقتباس
مرفق ملف يقوم بالمطلوب

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

استورد جميع الجداول إلى الملف المرفق واحذف أي جداول أخري موجودة في الملف

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

و هذا مجرداختصار لخطوة فى البداية ، و أنت بالفعل قد قمت بالجزء المهم

و مشكور كتير(f)

#25

الأخ محمد طاهر

السلام عليكم

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

الان سقوم البرنامج بحذف أي جداول موجودة فيه حالياً

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

ثم يقوم بعد ذلك بتجميع البيانات

تحياتي والملف مرفق بعد التعديل

imp_data.zip

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

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