hassan123 قام بنشر مارس 18 قام بنشر مارس 18 السلام عليكم ورحمة الله وبركاته يوجد لدي برنامج مرتبط بشبكة محلية داخل شركة ، السيرفر windows server وقواعد البيانات على SQL server بداخلها الجداول . الواجهه النماذج والاستعلامات والتقارير على اجهزة المستخدمين . ولكن المشكلة هي يحتاج المستخدمين اضافات او تعديلات على احد النماذج او قد يكون فيه أخطاء ، اقوم بتحديث البرنامج وارجع مرة أخرى بحذف البرنامج عند المستخدمين واحمل لهم البرنامج يدويا على كل جهاز مما يأخذ وقت وجهد . المطلوب : اضع البرنامج بعد التعديل على السيرفر وعند فتح المستخدم البرنامج تظهر له مسج ان فيه تحديث وعند الموافقة يحذف البرنامج الحالي وينزل التحديث الجديد دون عناء المرور على اجهزة المستخدمين وتنزيل التحديث يدوي وخصوصا اذا كان البرنامج على عدة اجهزة ومواقعها تكون بعيدة . هذه الطريقة لو نجد لها حل لا تقل اهمية عن عمل البرنامج يوجد شرح مصور مرفق
ابوخليل قام بنشر مارس 18 قام بنشر مارس 18 عليكم السلام س : سؤال عندما تحذف الواجهة الفرعية من جهاز المستخدم وتستبدلها بالنسخة الجديدة هل تقوم باعادة ربط الجداول بقاعدة البيانات الموجودة على السيرفر ؟ بمعنى آخر هل اي واجهة تنقلها من جهاز الى آخر تعمل بدون تعديل المسار ؟
hassan123 قام بنشر مارس 18 الكاتب قام بنشر مارس 18 لا . أقوم بالتعديل على البرنامج واربط الجداول من جهازي بالجداول في السيرفر وأقوم بحفظ البرنامج على الفلاش ميموري واذهب الى أجهزة المستخدمين احذف البرنامج السابق وانسخ البرنامج المحدث من الفلاش ميموري وألصقه في مسارة وليكن على سبيل المثال في السي في مجلد اسمه program . عندي افكار لكن لم استطع ان اعملها لو فرضأ وضعت البرنامج بعد التعديل على مجلد مشاركة في السيرفر وصممت جدول فيه رقم اصدار مثلا رقم 1001 وعند بدأ تشغيل البرنامج عند المستخدم يكون اول نموذج يفتح عند المستخدم مخزن فيه قيمة 1001 يقارنها بالقيمة في الجدول اذا كانت نفس القيمة يفتح البرنامج اذا كانت مختلفة تظهر عند المستخدم رسالة يوجد تحديث . عند عمل برنامج محدث اقوم بتعديل القيمة في الجدول من السيرفر مباشرة واضعها على سبيل المثال 1002 بدل 1001 وتكون هذه القيمة مبرمجة في اول نموذج يفتح عند المستخدم بالقيمة 1002 . بهذه الطريقة كل مرة احدث نموذج بدأ التشغيل بقيمة جديدة مع القيمه التي اضيفها في السيرفر . احتاج ملف مساعد يكون في مجلد البرنامج على سبيل المثال VBS يكون مبرمج فيه عند التغيير في النسخة يقوم بحذف البرنامج القديم ويستدعي البرنامج المحدث من مجلد المشاركة مباشرة
ابوخليل قام بنشر مارس 18 قام بنشر مارس 18 نعم فكرتك صائبة للعلم حاليا لدي برنامج بحاجة الى هذه الخدمة ولكن الجداول اكسس على جهاز الادمن ، ونوعا ما نفذت فكرتك وبقي الاداة الوسيطة لهذا سألتك : اذا لصقت الواجهة الجديدة على جهاز المستخدم هل تقوم بعملية ربط
Foksh قام بنشر مارس 18 قام بنشر مارس 18 (معدل) تفكير بصوت مرتفع ،، بما ان المشروع عبارة عن قاعدتين إحداهما الرئيسية التي تحتوي كافة العناصر دون الجداول ومرتبطة بجداول القاعدة الثانوية ، ودون اي تغيير في قاعدة الجداول ، فأعتقد أنه لا حاجة لإعادة الربط بين قاعدة النماذج وقاعدة الجداول. أيضاً كنت اعمل على فكرة وهي بشكل مختصر كالآتي :- عند فتح قاعدة البيانات ستقوم قاعدة البيانات الرئيسية بفتح ملف TEXT على موقع جوجل درايڤ مثلاً وجلب رقم الاصدار ومقارنته مع حقل في قاعدة البيانات نفسها ؛ فإذا كانت القيمة أكبر في ملف الـ TEXT فسيخبرك بوجود نسخة جديدة مع الذهاب إلى رابط التحميل ليتم تحميلها وستقوم بدورك كمستخدم باستبدال النسخة القديمة بالحديثة . وغير ذلك لن يتم إخبار المستخدم بوجود تحديث جديد. والأداة الوسيطة التي ذكرها معلمنا الجليل @ابوخليل ستكون قاعدة بيانات مستقلة وظيفتها فقط التنزيل واستبدال النسخة القديمة بالحديثة. هذا تصور قيد التطوير ولكن انشغالي ببرنامج الحضور والإنصراف هو من اشغلني عن استكمال الفكرة. تم تعديل مارس 18 بواسطه Foksh
ابوخليل قام بنشر مارس 18 قام بنشر مارس 18 4 دقائق مضت, Foksh said: تفكير بصوت مرتفع ،، بما ان المشروع عبارة عن قاعدتين إحداهما الرئيسية التي تحتوي كافة العناصر دون الجداول ومرتبطة بجداول القاعدة الثانوية ، ودون اي تغيير في قاعدة الجداول ، فأعتقد أنه لا حاجة لإعادة الربط بين قاعدة النماذج وقاعدة الجداول. التعديل على الواجهات يتم خارج الشبكة كلها ( على جهاز المطور ) ومؤكد الربط مختلف الفكرة الصحيحة التي لن نحتاج فيها الى ربط هي ان يكون مكان الجداول على قرص شبكة (باسم موحد ) ويكون كذلك عند المطور 1
Foksh قام بنشر مارس 18 قام بنشر مارس 18 نقطة جميلة وذكية ذكرتها معلمي الفاضل ، ولكن أعتقد يوجد طريقة لتحديد اسم قاعدة البيانات الثانوية للجداول ومسارها داخل التحديث وسيتم الارتباط بها تلقائيا. من وجهة نظري 😊
ابوخليل قام بنشر مارس 18 قام بنشر مارس 18 انا تعاملت مع الشبكة من وقت مضى بعيد .. ولم يخطر على بالي بل اني لم احتج لفحص مسارات الاجهزة الفرعية ان كانت متشابهة ام لا وجهة نظرك على الرأس والعين .. فقط نريد تأكيدها يعني لما يكون معي الواجهات اخذتها من المطور هل يكفي تثبيت المسار على جهاز فرعي واحد واخذ نسخة الصقها على البقية فقط مع الاعتذار لصاحب الموضوع .. خرجنا به عن مساره
hassan123 قام بنشر مارس 19 الكاتب قام بنشر مارس 19 فكرة التحديث اللي ابحث عنها نفس فكرة الوتساب او الفبيسبوك او اي تطبيق على موبايلك على سبيل المثال تفتح موبايلك على الوتساب تجد رسالة بوجود تحديث جديد تضغط موافق يتحدث عندك الوتساب بضغطة زر دون عناء من المطور . سوف اشرح الطريقة في الرد القادم بشكل مصور حتى تتضح الطريقة .
Foksh قام بنشر مارس 19 قام بنشر مارس 19 42 دقائق مضت, ابوخليل said: يعني لما يكون معي الواجهات اخذتها من المطور هل يكفي تثبيت المسار على جهاز فرعي واحد واخذ نسخة الصقها على البقية ..... باعتقادي هي نفس الفكرة الظاهرة في صورة الأخ @hassan123 ، بحيث ان مسار الجهاز الرئيسي ثابت لا يتغير كون الشبكة محلية . فإذا تم تثبيت المسار للجهاز المصدر في جميع الأجهزة الهدف فسيكون الموضوع بسيط . باعتقادي وكأن الفكرة هي الربط بقاعدة الجداول وكأنها بجانب قاعدة البيانات الحالية عن طريق تحديد مسارها في كود مديول الـ Relink ( في موضوع آخر ). واعتذر معك خروجي عن الموضوع ، وسأحاول لاحقاً توضيح وجهة نظري في هذا الموضوع 🤗
hassan123 قام بنشر مارس 19 الكاتب قام بنشر مارس 19 البرنامج منقسم الى جزئين (الجداول) في قاعدة بيانات على SQLserver في الجهاز الرئيسي ( الخادم Server ) الجزء الثاني موجودة على أجهزة المستخدمون ( النماذج الاستعلامات التقارير ) جهازي اللي اطور عليه البرنامج وأجهزة المستخدمون وجهاز السيرفر الخادم مرتبطة بشبكة محلية LAN أطور البرنامج واحدثه وهو متصل بقاعدة البيانات السيرفر ثم اقوم بنسخه على الفلاش ميموري واقوم بنقله على اجهزة المستخدمين المرفقات تشرح التالي Part1 يوضح البرنامج وملحقاته على جهاز المستخدم في البارتشن C في المجلد Program1 Part2 يوضح الجداول المرتبطة بالسيرفر والنماذج والتقارير وجدول مستقل به حقل رقمي يسجل فيه رقم النسخة part3 نموذج البدء عند تشغيل البرنامج والتحقق من النسخة مهمتة كالتالي مثال : 1 -البرنامج يعمل عند المستخدمين نموذج البدء يحوي الرقم للنسخة 1001 وجدول xVer مسجل في الحقل الرقمي 1001 2- قمت بالتحديث على البرنامج على سبيل المثال اضافة نموذج اقوم بتغيير رقم النسخة في نموذج البدء الى 1002 وجدول xVer اعدل في الحقل الرقمي 1002 3- اثناء تركيب البرنامج المحدث عند المستخدم الاول والثاني واراد المستخدم الخامس ان يدخل على البرنامج قبل ان اذهب اليه لا يستطيع الدخول لانه لم يصله التحديث الجديد المرحلة السابقة لا اشكال فيها المطلوب بعد عمل جدول xVer وربطة بنموذج البدء وانحلت مشكلة اجبار المستخدم على التحديث اجاد طريقة اخرى لإكمال التحديث آليا بدون العمل اليدوي الممل .
Foksh قام بنشر مارس 19 قام بنشر مارس 19 (معدل) الفكرة واضحة أخي الكريم ، أعتقد يوجد موضوع هنا للأستاذ @Moosak يخص موضوع التحديث ، وقد استخدمتها سابقاً مع إجراء بعض التعديلات حسب حاجتي لمشروع طبعاً . ويمكن التطوير على الفكرة بما يتطلبه مشروعك إذا فهمت آلية عمل فكرة الأستاذ موسى . أما بخصوص موضوع اعادة ربط الجداول بعد التحديث على أجهزة الشبكة ، فتوصلت الى هذه الفكرة علها تكون صائبة. وأخبرني بنتيجتها بعد تحربتها على الشبكة المحلية لديك فضلاً لا أمراً 🥰 ReConnectServer.accdb تم تعديل مارس 19 بواسطه Foksh
Moosak قام بنشر مارس 19 قام بنشر مارس 19 كما ذكر المهندس فادي @Foksh قمت بعمل فكرة سابقا واشتغلت عليها فترة وكانت ناجحة ولله الحمد .. لكن واجهت فيها بعض الإشكالات وطورتها لاحقا بعمل وسيط ملف VBS هو اللي يقوم بعملية حذف الإصدار القديم وتنزيل الإصدار الجديد ، بالإضافة جعلت البرنامج تلقائيا يتعرف على مكان واجهات البرنامج ومكان قاعدة الجداول .. 🙂 وإلى الآن أعمل بهذي الطريقة ومرتاح جدا معها وتشتغل معاي بدون أية مشاكل ولله الحمد 🙂 .. ولازلت أنوي إنزال موضوع متكامل إن شاء الله يشرح الآلية الجديدة لتحديث البرنامج لدى المستخدمين .. 🙂✌ رابط الآلية القديمة :
ابوخليل قام بنشر مارس 19 قام بنشر مارس 19 3 ساعات مضت, Moosak said: بالإضافة جعلت البرنامج تلقائيا يتعرف على مكان واجهات البرنامج ومكان قاعدة الجداول .. 🙂 نريد هذه فضلا لا امرا .. ربما تكون افضل من طريقتي طريقتي هي انشاء قرص شبكة على جميع الاجهزة يكون اسمه موحد مثلا : z
Moosak قام بنشر مارس 19 قام بنشر مارس 19 9 ساعات مضت, ابوخليل said: نريد هذه فضلا لا امرا .. ربما تكون افضل من طريقتي طريقتي هي انشاء قرص شبكة على جميع الاجهزة يكون اسمه موحد مثلا : z بشكل سريع لتلبية طلبك يا سيدي .. وبدون الغوص في التفاصيل .. هذه واجهة تحميل التحديث الجديد على الشبكة المحلية : وللحصول على موقع نسخة الجداول + الواجهة الحالية للمستخدم ( نفس الموجودة في الصورة أعلاه - الجزء السفلي ) هذين هما الكودين : موقع نسخة الجداول BE : =Nz(DLookUp("Database";"MSysObjects";"Type=6");[CurrentProject].[FullName]) موقع نسخة الواجهات FE : =[CurrentProject].[FullName]
hassan123 قام بنشر مارس 20 الكاتب قام بنشر مارس 20 أشكركم جميعا بارك الله في جهودكم وفي أفكاركم وتفاعلكم سوف نطبق افضل الأفكار على المشروع لكم خالص التحية والتقدير 1
Moosak قام بنشر مارس 20 قام بنشر مارس 20 6 ساعات مضت, hassan123 said: سوف نطبق افضل الأفكار على المشروع نتمنى لك التوفيق أخي حسان .. 🙂🌷 ولو صبرت علي قليلا .. سأقوم بعون الله بإنزال التحديثات الأخيرة حول هذا الموضوع مع الملفات كاملة 🙂👌 2
hassan123 قام بنشر مارس 20 الكاتب قام بنشر مارس 20 العفو اخي @Moosak لقد استفدت منكم الكثير وقد طلعت بنتيجة أخرى سوف أشرحها إن شاء الله عما قريب . 2
Moosak قام بنشر مارس 20 قام بنشر مارس 20 10 دقائق مضت, hassan123 said: وقد طلعت بنتيجة أخرى سوف أشرحها إن شاء الله عما قريب . ننتظر بشوق 😊👌🏻
أفضل إجابة hassan123 قام بنشر مارس 22 الكاتب أفضل إجابة قام بنشر مارس 22 (معدل) استكمالا لكيفية التحديث بطريقة أخرى بعد الشكر لمساعدتكم في طرح الأفكار سوف أقدم لكم هذه الطريقة وقبل البدأ اريد ان أنوه على بعض الردود حول الجداول في قاعدة البيانات هل أقوم بإعادة ربطها بعد التحدث والجواب هو (لا) وذلك عند تحديث البرنامج اقوم بإعادة ربطها من جهاز المطور وكل أجهزة المستخدمون والسيرفر وجهازي اللي أطور البرنامج عليه مرتبطة بشبكة محلية داخل الشركة وبعد التحديث وعند تركيب البرنامج على أي جهاز فإن الجداول تتصل بقاعدة البيانات مباشرة . سوف أشرح الفكرة باختصار المتطلبات 1- جدول جديد يضاف في البرنامج مرتبط بقاعدة البيانات مباشرة يحتوي على حقل رقم النسخة 2- تصميم نموذج افتتاحي مصدره الجدول السابق 3- تصميم برنامج مساعد نسميه (Update.accdb ) ونضعه في مجلد البرنامج 4- مجلد مشاركة موجود على السيرفر نضع فيه البرنامج المحدث شرح خطوات البرنامج عند التحديث 1- عند اكتمال التحديث يضاف رقم النسخة الجديدة في النموذج على سبيل المثال (002) في النموذج الافتتاحي و في الجدول رقم النسخة 2-عند التشغيل يقوم البرنامج بمقارنة النسخة المخزنة في الجدول مع جدول حقل النسخة ، سوف يجد الاختلاف وتظهر رسالة يوجد تحديث 3- يغلق البرنامج (الاصدار القديم) ويفتح البرنامج المساعد 4- عند فتح البرنامج المساعدة يقوم بحذف النسخة القديمة ويستدعي النسخة الجديدة من مجلد المشاركة على السيرفر ويلصقها في نفس مجلد البرنامج بدل النسخة القديمة التفاصيل من المعروف أن البرنامج سوف يكون على الهاردسك ( C ) عند جميع المستخدمون في المجلد (Shaoon) وأيضا البرنامج المساعد (Update.accdb) وملحقات البرنامج مثل أيقونة البرنامج او ملفات التعليمات وغيرها 👇 النموذج الافتتاحي في البرنامج عند المستخدم ذو الاصدار 001 👇 النموذج الافتتاحي في البرنامج الوسيط ( Update.accdb ) 👇 انتهى الشرح في المرفق الشرح العملي ملاحظة هامة : عند تنزيل الشرح العملي فك الضغط وضع الثلاثة المجلدات في البارتشن (C) مباشرة ومن ثم الدخول على المجلد (Shaoon) وتشغيل البرنامج (Shaoon.accdb) Program.rar تم تعديل مارس 22 بواسطه hassan123 2 2
ابوخليل قام بنشر مارس 22 قام بنشر مارس 22 شكرا لك استاذ حسان على الشرح الوافي الكافي و هي فكرتك الأولى ولعلك نسيت اضافة الجدول المحلي ضمن واجهة المستخدم لأن كتابة المقارنة بهذه الطريقة ستعمل لمرة واحدة فقط : 'يتأكد هل فيه نسخة مختلفة If Me.VerNo <> "001" Then ' =====> في كل مرة تقوم بتحدسث النسخة يجب تعديل الاصدار هنا وفي حقل الجدول xVer MsgBox "يوجد اصدار أحدث", 48 + 524288, "تحديث النسخة" واذا سمحت لي باضافة صغيرة : الجدول xver هذا على قاعدة البيانات في السيرفر وهو من سيحمل الرقم الجديد و يوجد جدول (محلي) على واجهة المستخدم يحمل الرقم القديم عند فتح واجهة المستخدم يقارن بين الرقمين في الجدولين .. فإن اختلفا يتم تشغيل التحديث ...... ويتم ايضا تحديث الجدول المحلي بالرقم الجديد /// وبما ان النسخة جديدة يكون المطور هو من وضع الرقم الجديد في الجدول المحلي فلا حاجة للتحديث . ليصبح كود المقارنة بما يشبه هذا : If VerNo1 <> VerNo2 Then 3
Moosak قام بنشر مارس 22 قام بنشر مارس 22 ما شاء الله تبارك الرحمن 🙂 🌹 فكرة رائعة أخي حسان @hassan123 وهذا دليل على أنه لا حدود للإبداع في الأكسس 👌🏼 بالإضافة للنقطة التي ذكرها أستاذنا @ابوخليل ( وهي نقطة مهمة في نظري ) .. فقط أنبهك لموضوع الروابط للواجهة القديمة و ملف التحديث و رابط التحديث الجديد .. هذه الروابط لو تجعل الكود يتعرف على مواقعها بشكل أوتوماتيكي سيسهل عليك بعض الأمور ... منها : 1- في الجدول xVer أضف حقل لمكان وجود ملف التحديث وذلك للحصول عليه تلقائيا من الجدول وذلك لأنك قد ترغب مستقبلا في تغيير أسمه أو موقعه دون الحاجة لتغييره يدويا في الكود. 2- قد يتم تنصيب البرنامج على قرص آخر غير ال C لذلك إجعل تحديد مواقع التنصيب شيء من هذا القبيل : 'حذف البرنامج النسخة V001 Kill CurrentProject.Path & "\Shaoon.accdb" ' موقع نسخة البرنامج المحدثة Dim NewUpdatePath As String NewUpdatePath = DLookup("[NewUpdateFilePath]", "[xVer]") 'نسخ النسخة الجديدة002 ووضعها بدل النسخة التي انحذفت FileCopy NewUpdatePath, _ CurrentProject.Path & "\Shaoon.accdb" . . . . ...... <<تكملة الكود>> لاحظت بأنك قمت بربط التحديث الجديد بقاعدة البيانات قبل وضع التحديث موضع التنفيذ وهذا شيء جيد 👍🏻🙂 2
ابوخليل قام بنشر مارس 22 قام بنشر مارس 22 10 ساعات مضت, hassan123 said: وقبل البدأ اريد ان أنوه على بعض الردود حول الجداول في قاعدة البيانات هل أقوم بإعادة ربطها بعد التحدث والجواب هو (لا) وذلك عند تحديث البرنامج اقوم بإعادة ربطها من جهاز المطور وكل أجهزة المستخدمون والسيرفر وجهازي اللي أطور البرنامج عليه مرتبطة بشبكة محلية داخل الشركة وبعد التحديث وعند تركيب البرنامج على أي جهاز فإن الجداول تتصل بقاعدة البيانات مباشرة . تمام .. هذا الذي سرت عليه في بعض اعمالي السابقة انشاء قرص شبكة عام على جميع الاجهزة ، المشكلة انه يكون ظاهر شأنه شأن الاقراص الأخرى فأنا استفسر عن كود موحد يقوم مقامه 1
hassan123 قام بنشر مارس 22 الكاتب قام بنشر مارس 22 أفكار ممتازة جداً ، شكرا لاقتراحاتكم لاحظت أن مجلد المشاركة في السيرفر يحتاج الى بناء ( أوذونات ) صلاحيات للوصول إليه ، ففكرت في طريقة أخرى لاستبدال فكرة مجلد المشاركة وهي إضافة حقل آخر في جدول ( xVer ) وليكن اما نوع مرفق Attachment أو حقل من نوع كائن OLE ويرفع ملف التحديث بواسطته من السيرفر مباشرة بدلا من مجلد المشاركة . رفع الملف سيكون سهل من قاعدة البيانات في السيرفر ولكن احتاج الى كود برمجي يقوم بتحميل الملف من الجدول ( xVer ) الى مجلد البرنامج عند حذف الاصدار القديم و استبداله بالإصدار الجديد المرفق التالي يوضح ذلك Saoon_DATAbase.accdb
hassan123 قام بنشر مارس 25 الكاتب قام بنشر مارس 25 السلام عليكم ورحمة الله وبركاته استكمالا لاستبدال التحديث عن طريق حقل Attatchment في الجدول (xVer)الجدول المضاف للبرنامج والاستغناء عن مجلد المشاركة Share folder ولأهمية موضوع التحديث حيث لا يقل أهمية عن تصميم البرنامج بحد ذاته ، خصوصا اذا كان البرنامج يرتبط بأكثر من مستخدم ومعاناة التحديث اليدوي على كل جهاز مما قد يؤدي الى ارهاق المبرمج وكثرة الأخطاء أشكركم جميعا وأشكر الخبراء في المنتدى على طرح الأفكار والأراء الجميلة فقد توقفت في المشاركة السابقة في كيفية تصدير الكائن الى مجلد البرنامج وقد وجدت حل لهذه المشكلة بعد البحث في المنتدى ووجدت مشاركة للأخ @Moosak في الموضوع التالي: لقد عدلت على الطريقة وتم عمل الإضافة عند المستخدمين ونجحت الطريقة ولله الحمد المرفق التالي لمن أراد الاستفادة ولتطبيق الطريقة فك الضغط عن المرفق في البارتشن C مباشرة ومن ثم الدخول على المجلد (Shaoon) وتشغيل البرنامج (Shaoon.accdb) MyProgram2.rar MyProgram2.rar
الردود الموصى بها
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.