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

منع ظهور مسج

بدأه A&A في 28 ديسمبر 2009 · 14 رد · 1,202 مشاهدة · في قواعد بيانات Microsoft Access
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم اخواني وخواتي الاعزاء

ارجو التفضل بالاجابة على سؤالي وهو

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

حيث يتم وضع الملف الذي يحتوي على الدات بيس على حاسبة مركزية

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

حيث يتم العمل على هذه الصيغة وبفضل الله يتم العمل بنجاح والحمد لله

لكن في الاونة الاخيرة صادفت الشبكة بعض التوقفات مما ادى عندما يكون توقف في الشبكة تظهر رسالة تؤشر الى انه الدات بيس ليست موجودة وكذلك يعطيني مسار الدت بيس مما يؤدي الى "كشف مكان الدات بيس على السيرفر"

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

وجزاكم الله الف خير

قُل لَّوْ كَانَ الْبَحْرُ مِدَاداً لِّكَلِمَاتِ رَبِّي لَنَفِدَ الْبَحْرُ قَبْلَ أَن تَنفَدَ كَلِمَاتُ رَبِّي وَلَوْ جِئْنَا بِمِثْلِهِ مَدَداً

#2

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

ملحوظتان قبل اقتراح أي حلول:

أولاً: لماذا تحاول إخفاء مكان وجود قاعدة البيانات؟ في العادة يكون مكان الجهاز الخادم server معلوماً للجميع، لكن هناك إجراءات أخرى لحماية قاعدة البيانات. أقول ذلك، لأن مكان هذا الجهاز يصعب إخفاؤه في الغالب، وإذا كان بإمكان المستخدم العادي الوصول إليه، والعبث فيه، فإنه ليس من المستحيل أيضاً كشف مكان ملف قاعدة البيانات على الجهاز.

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

Tools-> Database Utilities -> Linked Table Manager

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

Public Function CheckLinkedTables() As Boolean
    Dim tdfs As DAO.TableDefs
    Dim tdf As DAO.TableDef
    Dim strSourceDBName As String
    Dim dbs As DAO.Database
    Dim varDummy As Variant
    Dim lngErrNo As Long

    On Error Resume Next

    Set tdfs = CurrentDb.TableDefs
    Set tdf = tdfs(tdfs.Count - 1)
    strSourceDBName = Right(tdf.Connect, Len(tdf.Connect) - 10)
    Set dbs = OpenDatabase(strSourceDBName, , True)

    lngErrNo = Err.Number

    dbs.Close
    Set dbs = Nothing
    Set dtf = Nothing
    Set tdfs = Nothing

    If lngErrNo = 3024 Then
        MsgBox "يتعذر حالياً الوصول إلى قاعدة البيانات... سوف يتم إغلاق البرنامج", vbExclamation, "المعذرة"
        Application.Quit
    End If
End Function

يجب أن تتأكد من تشغيل هذه الدالة عند فتح ملف الواجهة مباشرة، مثلاً عبر تكوين ماكرو اسمه AutoExec، واختيار إجراء RunCode، مع اختيار اسم الدالة

المنفذة كالتالي:

CheckLinkedTables()

وهي الدالة التي كتبناها في وحدة نمطية (لا يهم اسم الوحدة النمطية module)...

هذه الدالة تحاول فتح قاعدة البيانات، وتتصيد الخطأ رقم 3024، والذي تظهر رسالته بالشكل: تعذر العثور على الملف ...

تأخذ الدالة اسم ومكان قاعدة البيانات من اختبار الخاصية connect للجدول الأخير في قاعدة البيانات الحالية، فإن كان الحل مناسباً لك، ويعمل على الشبكة، فيمكن شرح الدالة بمزيد من التفصيل...

والله أعلم.

#3

السلام عليكم

اولا بارك الله بك اخي العزيز على الاهتمام بالموضوع وإن شاء الله يجعله ربي في ميزان حسناتك

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

وجزاك الله كل خير

post-54264-12620914392446_thumb.jpg

قُل لَّوْ كَانَ الْبَحْرُ مِدَاداً لِّكَلِمَاتِ رَبِّي لَنَفِدَ الْبَحْرُ قَبْلَ أَن تَنفَدَ كَلِمَاتُ رَبِّي وَلَوْ جِئْنَا بِمِثْلِهِ مَدَداً

#4

وعليكم السلام أخي الكريم،

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

تم تعديل هذه المشاركة بواسطة أحمد مبارك الحيقي في 29 ديسمبر 2009 في 16:30

#5

السلام عليكم اخي العزيز

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

فاعذرني انه لم ارفعه لك

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

الواجهة مع قاعدة البيانات.zip

قُل لَّوْ كَانَ الْبَحْرُ مِدَاداً لِّكَلِمَاتِ رَبِّي لَنَفِدَ الْبَحْرُ قَبْلَ أَن تَنفَدَ كَلِمَاتُ رَبِّي وَلَوْ جِئْنَا بِمِثْلِهِ مَدَداً

#6

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

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

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

Tools -> Database Utilities ->Linked Table Manager

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

في كل الأحوال، لم تظهر النافذة الأولى التي أرفقتها في مشاركتك قبل الأخيرة. ربما يكون من الأفضل أن تعيد التجربة من عند إعادة ربط الجداول في ملف الواجهة بقاعدة البيانات على الخادم باستخدام مدير الربط Linked Table Manager، ثم تجربة الدالة (مع تغيير 3024 إلى 3044) والشبكة تعمل، ثم تعطيل الشبكة وتجربة ملف الواجهة بالدالة مرة أخرى...

#7
أحمد مبارك الحيقي كتب:

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

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

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

Tools -> Database Utilities ->Linked Table Manager

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

في كل الأحوال، لم تظهر النافذة الأولى التي أرفقتها في مشاركتك قبل الأخيرة. ربما يكون من الأفضل أن تعيد التجربة من عند إعادة ربط الجداول في ملف الواجهة بقاعدة البيانات على الخادم باستخدام مدير الربط Linked Table Manager، ثم تجربة الدالة (مع تغيير 3024 إلى 3044) والشبكة تعمل، ثم تعطيل الشبكة وتجربة ملف الواجهة بالدالة مرة أخرى...

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

اخي سوف اجرب هذه العملية وإن شاء الله خير

قُل لَّوْ كَانَ الْبَحْرُ مِدَاداً لِّكَلِمَاتِ رَبِّي لَنَفِدَ الْبَحْرُ قَبْلَ أَن تَنفَدَ كَلِمَاتُ رَبِّي وَلَوْ جِئْنَا بِمِثْلِهِ مَدَداً

#8

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

الرسالة والواجهة وقاعدة البيانات.zip

قُل لَّوْ كَانَ الْبَحْرُ مِدَاداً لِّكَلِمَاتِ رَبِّي لَنَفِدَ الْبَحْرُ قَبْلَ أَن تَنفَدَ كَلِمَاتُ رَبِّي وَلَوْ جِئْنَا بِمِثْلِهِ مَدَداً

#9

وعليكم السلام أخي الكريم...

حسب تجربتي، واحدة من الرسالتين 3024، تظهر عندما لا يكون الملف موجوداً في مسار صالح (مثلاً الشبكة تعمل، لكن الملف غير موجود في نفس الموقع الذي تم الربط به ابتداءً). الثانية 3044، تظهر عندما لا يكون المسار صالحاً أصلاً (مثلاً، الشبكة لا تعمل). فإذا جعلت الشرط في الدالة كالتالي:

If ((lngErrNo = 3024) Or (lngErrNo = 3044) Then

فربما تختفي الرسالتان...

#10

اخي العزيز اشكرك على التواصل معي لكن لحد الان لم تنجح اي طريقة هل ممكن ان تعطيني طريقة اخرى وايضا اريد ان اعرف ماهي الطريق التي تستتطيع بها معرفة ارقام الرسائل التي تظهر يعني اقصد على اي اساس نحن ادخلنا الارقام  "3044" و "3024" التي ضمن الشرط التاليIf ((lngErrNo = 3024) Or (lngErrNo = 3044) Thenوجزاك ربي كل خير

تم تعديل هذه المشاركة بواسطة A&A في 2 يناير 2010 في 11:25

قُل لَّوْ كَانَ الْبَحْرُ مِدَاداً لِّكَلِمَاتِ رَبِّي لَنَفِدَ الْبَحْرُ قَبْلَ أَن تَنفَدَ كَلِمَاتُ رَبِّي وَلَوْ جِئْنَا بِمِثْلِهِ مَدَداً

#11

السلام عليكم اخواني وخواتي الاعزاءهل ممكن الاسراع بالاجابة لاني في امس الحاجة الى هذا العمل وجزاكم الله كل خير

قُل لَّوْ كَانَ الْبَحْرُ مِدَاداً لِّكَلِمَاتِ رَبِّي لَنَفِدَ الْبَحْرُ قَبْلَ أَن تَنفَدَ كَلِمَاتُ رَبِّي وَلَوْ جِئْنَا بِمِثْلِهِ مَدَداً

#12

السلام عليكم اخواني وخواتي الاعزاء هل ممكن الاسراع بالاجابة لاني في امس الحاجة لها

قُل لَّوْ كَانَ الْبَحْرُ مِدَاداً لِّكَلِمَاتِ رَبِّي لَنَفِدَ الْبَحْرُ قَبْلَ أَن تَنفَدَ كَلِمَاتُ رَبِّي وَلَوْ جِئْنَا بِمِثْلِهِ مَدَداً

#13

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

بالنسبة للأخطاء فمن الممكن معرفة رقم ووصف الخطأ من كائن الخطأ Err نفسه المستخدم في الدالة:

Err.Number

يعيد رقم الخطأ

Err.Decription

يعيد وصف الخطأ

وعلى هذا، فإذا قمت باصطياد الخطأ عند التشغيل، وعرضت وصفه ورقمه، عرفت أي خطأ ينبغي عليك التحرز منه...

والله أعلم.

تم تعديل هذه المشاركة بواسطة أحمد مبارك الحيقي في 6 يناير 2010 في 17:17

#14

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

أخي العزيز أحمد مبارك الحيقي

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

post-12787-12741339659298.jpg

ومامن يد إلا يد الله فوقها *** وما من ظالم إلا سيبلى بأظلم

تفضل أخي الكريم | موسوعة الحميدي الذهبية | بأجزائها الثلاثة مع هدية الموسوعة .

#15

اخي العزيز انا اشكرك وبارك الله بيك على مجهودك الرائع .................. وارجوا من اخواني وخواتي في المنتدى الجواب على سؤالي وجزاكم ربي كل خير

قُل لَّوْ كَانَ الْبَحْرُ مِدَاداً لِّكَلِمَاتِ رَبِّي لَنَفِدَ الْبَحْرُ قَبْلَ أَن تَنفَدَ كَلِمَاتُ رَبِّي وَلَوْ جِئْنَا بِمِثْلِهِ مَدَداً

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