مشكلة في تحديث البيانات على الأجهزة المربوطة على شبكة
#11
لا 
تتغير بعد اغلاق البرنامج في الاجهزة العميلة (clients)
وتأخد القيمة المسجلة على اخر  جهاز يتم اغلاق البرنامج
للتوضيح مثلا
الكمية الحقيقية 10
نبيع على الجهاز الأول 3 تبقى 7
والجهاز الثاني 2 تبقى 8
مجموع البيع 5 من المفروض تبقى الكمية 5
لكن الكمية التي تسجل هي الكمية المسجلة في اخر  جهاز يتم فيه إغلاق البرنامج فلو كان الجهاز الأول تبقى الكمية في السيرفر 7 بدلا من 5
مع العلم أن كل الكمية المباعة من الجهازين مسجلة في السيرفر أي 5
أرجوا أن أكون قد أوصلت الفكرة
الرد
#12
طيب ، هل ممكن إرفاق الكود الذي يتم فيه تغيير كمية السلعة المباعة؟
وماذا عن ال Transaction ، هل تتعامل معها ؟
ثم وضح أكثر المكونات التي تستعملها ، هل هي  IBX  أم DBExpress ؟
اللهم اجعلني من أهل القرآن ، الذين هم أهلك و خاصتك.
تذكر بأن الوقت الذي تلهو فيه ، غيرك يبني مجده فيه.
الرد
#13
(13-04-2016, 10:11 PM)MOUMEN78 كتب : الكمية الحقيقية 10
نبيع على الجهاز الأول 3 تبقى 7
والجهاز الثاني 2 تبقى 8
مجموع البيع 5 من المفروض تبقى الكمية 5
حتما تستخدم مكون Table تفتحه عند التنفذ وتبقه كذلك
لنعد للمشكل:
عند الحذف تاخذ الكمية التي كانت عند فتج الجدول 10 والتي قد تكون تغيرت وهنا الخطأ
تنقص منها 3 وتحفظ 7 بالجدول
في الجهاز الاخر تكون بقيت 10 دون تحديث، عند بيع 2 تنقصها تبقى 8 التي تحفظها بالجدول دون اي تحقق وهنا نفس الخطأ السابق
مشكلة الكثير انه يقوم بانشاء برنامج وربطه بقاعدة بيانات و عندما ينتهي يحاول استخدامه بأكثر من جهاز مربوط بنفس قاعدة البيانات وهنا الخطأ، اي منظومة تعمل على شبكة يفر فيها قبل حتى تصميم قاعدة البيانات. لذلك قلت للسائل عليك بقرأة كتب قواعد البيانات لتفهم على الاقل كل توثيق Firebird مثلا وتفهم معنى مثل Stored Procedures / Triggers / Events / Transactions

الحلول:
- تتحقق من قيمة الكمية قبل الحفظ: مثلا عند بيع 3 تستخدم استعلام sql لتخذ قيمة الكمية، ان كانت كافية استعلام اخر للتعديل وانقاص 3 من نتيجة الاستعلام السابق، ثم التحقق من النتيجةى مرة اخرى.
- تحذف كل مكونات Table التي ببرنامجك وتغيرها بQuery تفتح عند الاستعمال وتغلق بعدها ما مراعات التحقق
- تستخدم ُEvents كما اقترج اخي Unprogramme
- تستدعي Refresh قبل اي تعديل على البيانات
- تستخدم stored procedure تمرر لها الكمية وهي تتكفل بالتحقق وانقاصها
- هناك حلول اخرى...حسب قاعدة البيانات/المشروع (البرنامج المطور)...لا يوجد حل مطلق.
راجع رد سابق لبعض الافكار

http://delphi4arab.net/forum/showthread....8#pid37638
رَبَّنَا اغْفِرْ لِي وَلِوَالِدَيَّ وَلِلْمُؤْمِنِينَ يَوْمَ يَقُومُ الْحِسَابُ
[-] كل من 1 user says قال شكرا ل محمد عبد العزيز على المشاركة المفيدة
  • wadoud
الرد
#14
Thumbs Down 
[size=small]في برمجة الشبكات القاعدة عامة تقول[/size]

[size=small]لا تتصل الا عند الحاجة[/size]
[size=small]لا تبقى متصلا لوقت طويل (اتصل، اقضي حاجتك ثم اقطع الاتصال)[/size]
[size=small]عند الاتصال اطلب فقط ما تحتاج من بيانات[/size]
هذا هو الحل رغم أني تعبت في تطبيق هذا الحل وتصحيح البرنامج - إلا أنه فعال واعطاني الحل البرنامج شغال 10/10
شكرا لكل من تفاعل معي ولم يبخلنا بالنصائح بارك الله فيكم Tongue Tongue Tongue Tongue Tongue
الرد


التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم