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

مشكلة في الاتصال مع قاعدة بيانات أكسس على الشبكة

مغلق
بدأه Like Delphi في 10 مايو 2006 · 8 رد · 940 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

إخواني لقد عملت مشروع على الدلفي يرتبط بقاعدة بيانات من نوع أكسس

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

قمت بوضع ملف الأكسس على أحد الأجهزة و عن طريق الـ Connectin String للـ ADO

عملت اتصال لهذا الملف مع حوالي 10 ملفات تنفيذية تتعامل مع هذا الملف على 10 أجهزة.

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

وعندما يقوم أحد الـ Clients بحذف سجل ما من استعلام يظهر خطأ على البرامج البقية وهو:

Row Connt Be Located For Updating, Some Values May Have Been Changed Since it was last Read.

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

أفيدونا جزاكم الله خيراً

قال تعالى: ((وَمَا أَصَابََكُمْ مِنْ مُصِيبَةٍ فَبمَا كَسَبَتْ أَيْدِيكُمْ وَ يَعْفُو عَنْ كَثِيرٍ)) :.:.: الشورى: الآية 30.

IN ALLAH WE TRUST

:.:.:.:.:.:.:.:.:.:.:.:.:.:

#2
اقتباس
المشكلة هي أنه عندما أحد الأجهزة يقوم باستعلام ما, فإن نتيجته ستظهر على جميع الاجهزة الأخرى

كيف تظهر نتيجة الاستعلام علي بقية الاجهزة :blink: :blink: :blink: :blink: :huh: :huh:

كيف ذلك؟؟؟؟؟؟

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

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

ام عن طريق AdoCommand او AdoQuery

فينصح في حال العمل على الشبكة استخدام AdoCommand او Adoquery وذلك لانه ممكن ان يكون احد الشباب التي على الاجهزة

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

لحل المشكلة قم باستخدام تعليمة SQL لحذف السجل و ذلك بوضع التعليمة في AdoCommand او AdoQuery

Delete Table1 where ID  = 1

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#3

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

أنه يتعامل مع الملف حوالي 10 أجهزة.

قال تعالى: ((وَمَا أَصَابََكُمْ مِنْ مُصِيبَةٍ فَبمَا كَسَبَتْ أَيْدِيكُمْ وَ يَعْفُو عَنْ كَثِيرٍ)) :.:.: الشورى: الآية 30.

IN ALLAH WE TRUST

:.:.:.:.:.:.:.:.:.:.:.:.:.:

#4

هلا وضحت السؤال الاول لكي افيدك اخي الكريم

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#5

سأشرح لك الفكرة بالتفصيل:

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

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

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

البرنامج يحتوي على Adoquery لكل خطوة.

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

مثلاُ:

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

أي

Adotable والذي بدوره مرتبط مع grid لعرض الأسطح التي اختارها لمستخدم بحيث يستطيع حذف إحداها او إضافة جديد

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

البرنامج ممتاز على جهاز واحد ولكن عندما وضعنا على الشبكة ظهرت المشكلة, طبعاً سوف تظهر.

والغاية من وضعه على شبكة هي إمكانية معرفة عدد التسعيرات التي عملت و من صاحب كل منها.

أدركت الخطأ الآن, وأفكر في الحل:

1- إما أن أضع ملف قاعدة بيانات لكل جهاز و عند الحفظ للتسعيرة أو المكتب الكامل أقوم بحفظها على قاعدة بيانات أخرى مشتركة للكل, أخزن فيها (يعني أرشفة).

2- أن أضع حقل ID خاص بكل مستخدم ضمن تلك الجداول المؤقتة بحيث أنه إذا قام أحد المستخدمين بالحذف أقوم بحذف تلك السجلات التي تابعة للـ ID الخاص به, وعند الإضافة لسجلات ما, اضيفها و أميزها بذلك الـ ID.

ما رأيك أخي waeldalol, أو لك رأي آخر.

شكراً لكم.

قال تعالى: ((وَمَا أَصَابََكُمْ مِنْ مُصِيبَةٍ فَبمَا كَسَبَتْ أَيْدِيكُمْ وَ يَعْفُو عَنْ كَثِيرٍ)) :.:.: الشورى: الآية 30.

IN ALLAH WE TRUST

:.:.:.:.:.:.:.:.:.:.:.:.:.:

#6

اخي الكريم ان استخدام قاعدة بيانات Access على الشبكة من اكبر المصائب

و لكنك اخطأت و اخترتها الله يعينك

بخصوص الموضوع

لم افهم كثير و لكن ماذا تقصد بالجداول المؤقتة ولماذ وضعتها يبدو انه هناك خطأ كبير في تصميم قاعدة البيانات لديك

رب اجعلني مقيم الصلاة ومن ذريتي ربنا وتقبل دعاء.

لا تنسى: "العقل مثل العضلة كلما استخدمته أكثر كلما ازدادت قوته"

#7
اقتباس
اخي الكريم ان استخدام قاعدة بيانات Access على الشبكة من اكبر المصائب

معك حق.

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

ربما يكون هناك خطأ ما لكن خطوات العمل أدت بي إلى هذه الطريقة

المهم: أقصد بالجداول المؤقتة:

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

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

قال تعالى: ((وَمَا أَصَابََكُمْ مِنْ مُصِيبَةٍ فَبمَا كَسَبَتْ أَيْدِيكُمْ وَ يَعْفُو عَنْ كَثِيرٍ)) :.:.: الشورى: الآية 30.

IN ALLAH WE TRUST

:.:.:.:.:.:.:.:.:.:.:.:.:.:

#8

السلام عليكم

أخي الكريم Like Delphi

حسب ما فهمته فكرتك هكذا

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

وضع القاعدة في جهاز في شبكة

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

طبعا لن يعمل الأمر

الحل هو Multi-tier

d4baa0.gif
#9

السلام عليكم

أخي DeltaAziz بالأصل كانت الفكرة هي أن يعمل البرنامج على جهاز واحد

أو بالأحرى على عدة أجهزة ولكل جهاز قاعدة بيانات خاصة به طبعاً بذلك لن يحصل مشاكل بإذن الله

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

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

فظهرت المشكلة.

فكرت من أمس إلى اليوم والحمد لله الله هداني لطريقة و هي:

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

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

فقمت بفصل تلك الجداول عن قاعدة البيانات ووضعتها في قاعدة بيانات أخرى, ومن ثم وزعت هذه الاخيرة على جميع الأجهزة وربطها

بـ Connection جديد مع المستخدمين, فأصبح الآن كل مستخدم يتعامل مع قاعدتين بيانات

الأولى: للإستعلام و الأرشفة

الثانية: للتخزين المؤقت (يعني مثل مسودة فقط)

النتيجة:

حلت المشكلة فلم يعد هناك تضارب أو اشتراك بالسجلات التي تعالج :)

سرعة أكبر في الحساب وذلك لأن العمل أصبح على نفس الجهاز و الأرشقة فقط على السرفر (أو جهاز من الشبكة) :)

و الحمد لله هذه الفكرة لم تتطلب تعديل الكثير في البرنامج ;)

بالنسبة لتعدد الطبقات, أعتقد أنه عندها سننتقل إن شاء الله إلى SQL Server أو حتى Oracle بدلاً من أكسس المحدودة.

شكراً لكل الإخوة الذين شاركوا

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

قال تعالى: ((وَمَا أَصَابََكُمْ مِنْ مُصِيبَةٍ فَبمَا كَسَبَتْ أَيْدِيكُمْ وَ يَعْفُو عَنْ كَثِيرٍ)) :.:.: الشورى: الآية 30.

IN ALLAH WE TRUST

:.:.:.:.:.:.:.:.:.:.:.:.:.:

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

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…