اذهب الي المحتوي
أوفيسنا
بحث مخصص من جوجل فى أوفيسنا
Custom Search

إدارة الجداول المرتبطة ، أداة وشروحات


الردود الموصى بها

شكرا لإطلالتك الطيبة أخي العزيز ، الامر على الجدول وقريبا

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

 

والله من وراء القصد وهو حسبي

  • Like 1
رابط هذا التعليق
شارك

  • الردود 65
  • Created
  • اخر رد

Top Posters In This Topic

إخوتي الأعزاء

حين تتشعب الامور تزداد الحاجات و تتراكم ، ولا بد من التعامل بهدوء وروية مع ما يلزم

بتصميم وتصور لسدّ الثغرات حتى نصل لنتائج طيبة

كنت فيما سبق أشرت الى كودات لربط كافة الجداول في BE ، حيث تم تضمين المسار ضمن الكود ، وبالتجربة والتطبيق وجدت أنه من الأصح و الاكثر منطقية و احترافاً ، ولكي يكون الامر أكثر مرونة عند التطبيق ، مع أهمية عدم العودة للكود عند الحاجة للربط لمسار جديد ، أن يتم الاستعانة بمربع حوار اختيار الملف ، وكان الامر بحاجة لبعض البحث و التروي ، حيث وجدتني اتعامل مع إصدارين من الأكسيس 2003 و 2007 ، و أضع هنا ما يلزم ويعمل مع الاصدارين ، حيث نقوم بإنشاء وحدة نمطية جديدة نسميها ModOpenfilename  ونكتب خلفها :

Option Compare Database

Private Declare Function GetOpenFileName Lib "comdlg32.dll" Alias _
"GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long

Private Type OPENFILENAME
    lStructSize As Long
    hwndOwner As Long
    hInstance As Long
    lpstrFilter As String
    lpstrCustomFilter As String
    nMaxCustFilter As Long
    nFilterIndex As Long
    lpstrFile As String
    nMaxFile As Long
    lpstrFileTitle As String
    nMaxFileTitle As Long
    lpstrInitialDir As String
    lpstrTitle As String
    flags As Long
    nFileOffset As Integer
    nFileExtension As Integer
    lpstrDefExt As String
    lCustData As Long
    lpfnHook As Long
    lpTemplateName As String
End Type

Function LaunchCD(strform As Form) As String
    Dim OpenFile As OPENFILENAME
    Dim lReturn As Long
    Dim sFilter As String
    OpenFile.lStructSize = Len(OpenFile)
    OpenFile.hwndOwner = strform.Hwnd
    sFilter = "Access Databases (*.mdb;*.accdb)" & Chr(0) & "*.mdb;*.accdb" & Chr(0) & _
    "All Files (*.*)" & Chr(0) & "*.*" & Chr(0)
    OpenFile.lpstrFilter = sFilter
    OpenFile.nFilterIndex = 1
    OpenFile.lpstrFile = String(257, 0)
    OpenFile.nMaxFile = Len(OpenFile.lpstrFile) - 1
    OpenFile.lpstrFileTitle = OpenFile.lpstrFile
    OpenFile.nMaxFileTitle = OpenFile.nMaxFile
    OpenFile.lpstrInitialDir = "C:\"
    OpenFile.lpstrTitle = "Officena.net ... Find The location of Back End File"
    OpenFile.flags = 0
    lReturn = GetOpenFileName(OpenFile)
        If lReturn = 0 Then
            MsgBox "A file was not selected!", vbInformation, _
              "Select a file using the Common Dialog "
         Else
            LaunchCD = Trim(Left(OpenFile.lpstrFile, InStr(1, OpenFile.lpstrFile, vbNullChar) - 1))
         End If
End Function

ونستحدث في النموذج مربع نص لتلقي الملف الذي سيتم إختياره كمصدر BE للربط ونسميه Text1 أو أي اسم مناسب لنموذجنا ، ثم ننشيئ زر أمر لتشغيل مربع الحوار / فتح ملف ، ونضع خلفه الكود التالي :

 Me!Text1 = LaunchCD(Me)

وبعد ظهور مربع الحوار / اختيار ملف ، وقيامنا باختيار الملف الهدف ، يحمل مربع النص مسار الملف .

رابط هذا التعليق
شارك

بالنتيجة ، وبتوفيق من الله ، فقد توصلت لحل مسائل الاخوة المطروحة جميعها

ربط جميع الجدول مع BE واحد

ربط جميع الجدول مع أكثر من BE

ربط جداول مختارة من BE

ربط جداول مختارة من أكثر من BE

إلغاء الربط نهائياً

وهناك نتجاوز مسألة الربط بين جزئي القاعدة أو أجزائها إلى تعقيدات إختلال الارتباط ومسألة Broken Back End ، حيث تختل أجزاء القاعدة وتتوقف عن العمل ويبدأ المستخدم بالتخبط نتيجة توقف قاعدة البيانات .

جربت خلال اليومين المنصرمين مجموعة من السيناريوهات على موضفي الشركة لدي ، وكسرت الربط عن قاعدة البيانات ، سواء بتغيير إسم ملف أو مجلد ضمن المسار على الخادم / السيرفر ، واستجبت لنداءات الموظفين وحاولت ( كمسخدم ) إعادة ربط الجداول ، فكانت مهمة شاقة لأي مستخدم - مالم يكن جيد الإلمام بالبرمجة.

ثم أعدت الأمور لنصابها ، وبدأت بمحاولة لحصر التصورات و الافكار و الاحتمالات ، فوجدتها كثيرة جداً ، وتحتاج لتركيز وبعض الحصر بأطرعامة ، لا بد أن يأخذها المبرمج بعين الإعتبار.

 

ربما أكثرت من التنظير ، ولكن ما سردت واقع وليس محض تنظير ....

 

وللحديث بقية .....

 

 

.............

رابط هذا التعليق
شارك

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

الأخ الفاضل SSM أثار مسألة اختيار نسخة احتياطية معينة باعتبارها BE ، وهذا استلزم معي عمليات الغاء الربط والبدء بإرتباط جديد ، و أمور أخرى تكاثر عند التطبيق ...

والأخ راعي الغنم أثار مسألة إعادة الربط بين FE و أكثر من BE ، وهذه فيها الكثير الكثير فحدث ولا حرج ...

 

ولكن كما هو الأمر دوماً وبفضل من الله ، فكل شيئ متاح ، ما دمت خلفه ساعياً وله طالباً ، ولله الأمر من قبل ومن بعد ، فتحاً و تيسيراً و تفهيماً.

 

توقفت عن الشرح و الإسهاب به بعد هذه المسائل الثلاثة ، فكل منها في مسار فوددت أن أجمعها في جهد واحد ( حسب تصوري ، وقدرتي ، وفهمي ) و الأفهام كثيرة لا يضير بعضها إختلافها عن البعض الآخر ، والتصورات لا تنتهي فعددها بعد الخلق و البشر ، ولا يعيب أحدها إختلافه عن الآخر ، فهذا علم لا مطلق فيه ولا حدود إلا بأمر الله.

 

أعمل حالياً ، وأظنني انتهيت ، و أحتاج بعض التطبيق و التجربة حتى لا تكثر الثغرات من أخطائي ويصعب عليكم التعديل ، فإصبروا معي جزاكم الله خيراً ، فالمسعى مستمر إن قدر الله لنا وكان في العمر بقية .

 

و للحديث بقية ....

 

........

رابط هذا التعليق
شارك

إخوتي الفضلاء

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

وسادرج تباعاً مشاركات وملاحظات وصور لتوضيح تصوراتي للاستخدام ... بعد تجربة أربعة أيام

 

ورحم الله من أهدى إلي عيوبي

 

والله من وراء القصد وهو حسبي

NA_AccessRelink.rar

  • Like 2
رابط هذا التعليق
شارك

في بداية التطبيق ، يتم تشغيل ماكرو AutoExec لتدرج إجراءات الفحص للجداول المرتبطة

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

وذلك باستدعاء الوحدة النمطية ModCountLinks

 

رابط هذا التعليق
شارك

حال إستكمال الفحص وعدم وجود جداول مكسور إرتباطها Brocken Back End تظهر لك الصفحة الرئيسية للأداة ( نموذج ) ، وأفضل عند التطبيق أن يتم إستبدالها بالصفحة الرئيسية للتطبيق ( من خلال الماكرو ).

 

النموذج الحالي ، تتم فيه عمليات الربط و إلغاء الربط وإختيار ربط  BE جديد

 

gallery_12714_23_16516.gif

 

للربط : يتم إستدعاء مربع الحوار / إختيار ملف من خلال الضغط على زر أمر Browser - استعراض ، حين يتم إختيار الملف الهدف BE ، يتم لصق المسار في مربع النص ، ثم يتم الضغط على زر أمر Link لتتم عملية الربط .

ولغايات الربط مع BE أخرى يتم تكرار الخطوات السابقة.

رابط هذا التعليق
شارك

لغايات حذف الارتباطات كاملة يتم الضغط على زر الامر Delet Link

 

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

 

gallery_12714_23_3837.gif

رابط هذا التعليق
شارك

في حال عدم وجود مسار ملف لإجراء الربط معه تكون النتيجة هادئة غير مزعجة

جرب إعادة إختيار مسار نفس الملف BE وإجراء الربط مرة أخرى ، هنا يتم رفض ربط الجداول واحداً تلو الآخر ، وهذا اجراء إحترازي منعاً لتكرار الربط بنفس BE .

وهذه لك أخي محمد أيمن ( حسب ما فهمت منكم ).

 

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

 

و الله أعلم

رابط هذا التعليق
شارك

أما أخي راعي الغنم

بعد الربط مع أي عدد تشاء من BE بشرط عدم وجود جداول متشابهة ، قم بإغلاق التطبيق ، وقبل إعادة تشغيله ، قم بتغيير مسار BE المتعددة جميعها .

ملاحظة : تم إغلاق التطبيق حتى يسمح لك الجهاز بتغغير الاسم لأي مجلد أو ملف مرتبط .

 

أعد تشغيل التطبيق ولاحظ النتيجة !!!

 

........

رابط هذا التعليق
شارك

من خلال ماكرو بدء التشغيل ، يتم تفعيل الوحدة النمطية ModNatAccessRelinker واستدعاء محاور العمل بها ، حيث يتبين فقدان الربط مع الجداول ، و بالتالي يتم تحديد كل جزء BE على حدى ويطلب إعادة تحديد المسار له من خلال مربع حوار / إختيار ملف ، وبعد تحديد المسار الجديد يتم تلقائياً إعادة الربط لكل جدول بعد فحصه ، وتثبيت المسار الجديد.

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

 

gallery_12714_23_27827.gif

 

........

 

gallery_12714_23_35157.gif

 

.....................

 

 

وللحديث و التصورات و الملاحظات بقية ....

رابط هذا التعليق
شارك

حين يكون الربط سليماً ولا خلل به و أردت تغيير المسار أو إختيار ملفات جديدة BE ، يمكننا إستخدام الزر New BE

لإضافة إرتباطات جديدة ( التنقل بين النسخ الاحتياطية ) ....

 

gallery_12714_23_15781.gif

 

 

وللحديث بقية ......

 

........

رابط هذا التعليق
شارك

السلام عليكم

تبارك الرحمن 

زادكم الله علما اخونا العزيز ابو ادم المحترم

ورحمكم ووالديكم  

وجعل  الله علمكم صدقتا جاريه نعم المولى ونعم الموجيب

ونشكرك على المجهود الرائع

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

رابط هذا التعليق
شارك

  • 2 weeks later...

اخي أبو آدم تحية طيبة

بداية جزاك الله كل خير ووفقك و زادك علما و عملا

 

جربت التطبيق على اوفيس 2007 و لكن لم يحدث اي شيئ لم يتم ارتباط اي جدول ابدا

فما السبب ؟؟

 

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

رابط هذا التعليق
شارك

جربت التطبيق على اوفيس 2007 و لكن لم يحدث اي شيئ لم يتم ارتباط اي جدول ابدا

فما السبب ؟؟

 

 

أخي الحبيب

و أنا أسأل معك أيضاً

فمنذ قرأت مشاركتك ، للآن قمت بتجربة التطبيق مرات عديدة ، وقمت بأخذ نسخة وأجريت عليها بعض التطبيقات الإضافية ، وجربت وجربت وكانت كل مرة تعمل كما أريد لها ، ولم يحصل معي أي خطأ أو إعتراض أو رفض إجراء ارتباط أو رفض إلغاء إرتباط .

فأمسيت أسأل معك

 

فما السبب ؟؟

 

 

أرجو أن تعيد المحالة وأشعرني ...

سأحاول تصوير أداء التطبيق على 2003 و 2007 و تحميله

 

شكرا

رابط هذا التعليق
شارك

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

لكن لوحظ فقط عدم ارتباطها مع ملفات MDE لكن جاري التأكد منها .
 

رابط هذا التعليق
شارك

اخي ابو آدم تحية طيبة

جربت الارتباط مع قاعدة بيانات 2003 و عملت الوحدة النمطية بشكل ممتاز

جربت الارتباط مع قاعدة بيانات 2007 لم تعطي الوحدة النمطية اي خطأ ولكن في المقابل لم ترتبط باي جدول

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

لاحظت ان الكود يتوقف لان الوحدة النمطية تعيد الخطأ 0

 

الخطأ يمكن في السطر التالي الموجود في الوحدة النمطية ModLinkAll :

Dim rs As Recordset

قمت بتعديله الى

Dim rs As DAO.Recordset

والنتيجة تم الارتباط بنجاح و بدون اي مشاكل

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

رابط هذا التعليق
شارك

اخي ابو آدم تحية طيبة

واجهتني مشكلة وهي عند انشاء جدول جديد في قاعد بيانات الجداول و تشغيل قاعدة بيانات الواجهة  تظهر رسالة خطأ بان اسم الجدول غير موجود

كيف نستطيع تفادي هذه المشكلة ؟؟

رابط هذا التعليق
شارك

اخي ابو آدم تحية طيبة

جربت الارتباط مع قاعدة بيانات 2003 و عملت الوحدة النمطية بشكل ممتاز

جربت الارتباط مع قاعدة بيانات 2007 لم تعطي الوحدة النمطية اي خطأ ولكن في المقابل لم ترتبط باي جدول

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

لاحظت ان الكود يتوقف لان الوحدة النمطية تعيد الخطأ 0

 

الخطأ يمكن في السطر التالي الموجود في الوحدة النمطية ModLinkAll :

Dim rs As Recordset

قمت بتعديله الى

Dim rs As DAO.Recordset

والنتيجة تم الارتباط بنجاح و بدون اي مشاكل

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

 

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

 

شكرا

رابط هذا التعليق
شارك

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه



×
×
  • اضف...

Important Information