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

كيف اقوم بعمل تحديث للبرنامج عند المستخدمين دون عناء التحديث يدوي ؟


إذهب إلى أفضل إجابة Solved by hassan123,

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

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

يوجد لدي برنامج مرتبط بشبكة محلية داخل شركة ، السيرفر windows server وقواعد البيانات على SQL server  بداخلها الجداول .

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

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

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

 

هذه الطريقة لو نجد لها حل لا تقل اهمية عن عمل البرنامج 

يوجد شرح مصور مرفق

Digram1.jpg

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

عليكم السلام

س : سؤال

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

هل تقوم باعادة ربط الجداول بقاعدة البيانات الموجودة على السيرفر ؟

بمعنى آخر  هل اي واجهة تنقلها من جهاز الى آخر تعمل بدون تعديل المسار ؟

 

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

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

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

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

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

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

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

نعم فكرتك صائبة

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

لهذا سألتك : اذا لصقت الواجهة الجديدة على جهاز المستخدم  هل تقوم بعملية ربط

 

 

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

تفكير بصوت مرتفع ،،

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

 

أيضاً كنت اعمل على فكرة وهي بشكل مختصر كالآتي :-

عند فتح قاعدة البيانات ستقوم قاعدة البيانات الرئيسية بفتح ملف TEXT على موقع جوجل درايڤ مثلاً وجلب رقم الاصدار ومقارنته مع حقل في قاعدة البيانات نفسها ؛ فإذا كانت القيمة أكبر في ملف الـ TEXT فسيخبرك بوجود نسخة جديدة مع الذهاب إلى رابط التحميل ليتم تحميلها وستقوم بدورك كمستخدم باستبدال النسخة القديمة بالحديثة . وغير ذلك لن يتم إخبار المستخدم بوجود تحديث جديد.

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

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

تم تعديل بواسطه Foksh
رابط هذا التعليق
شارك

4 دقائق مضت, Foksh said:

تفكير بصوت مرتفع ،،

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

 

التعديل على الواجهات يتم خارج الشبكة كلها ( على جهاز المطور ) ومؤكد الربط مختلف

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

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

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

 

من وجهة نظري 😊

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

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

وجهة نظرك على الرأس والعين .. فقط نريد تأكيدها

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

 

مع الاعتذار لصاحب الموضوع .. خرجنا به عن مساره

 

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

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

على سبيل المثال تفتح موبايلك على الوتساب تجد رسالة بوجود تحديث جديد تضغط موافق يتحدث عندك الوتساب بضغطة زر دون عناء من المطور .

 

سوف اشرح الطريقة في الرد القادم بشكل مصور حتى تتضح الطريقة .

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

42 دقائق مضت, ابوخليل said:

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

باعتقادي هي نفس الفكرة الظاهرة في صورة الأخ @hassan123 ، بحيث ان مسار الجهاز الرئيسي ثابت لا يتغير كون الشبكة محلية .

 

image.png.b24a3b598f1e7c9551b413ccac54014f.png

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

باعتقادي وكأن الفكرة هي الربط بقاعدة الجداول وكأنها بجانب قاعدة البيانات الحالية عن طريق تحديد مسارها في كود مديول الـ Relink ( في موضوع آخر ).

 

واعتذر معك خروجي عن الموضوع ، وسأحاول لاحقاً توضيح وجهة نظري في هذا الموضوع 🤗

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

البرنامج منقسم الى جزئين (الجداول) في قاعدة بيانات على SQLserver في الجهاز الرئيسي ( الخادم Server )

الجزء الثاني موجودة على أجهزة  المستخدمون ( النماذج الاستعلامات التقارير )

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

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

المرفقات تشرح التالي

Part1

  يوضح البرنامج وملحقاته على جهاز المستخدم في البارتشن C في المجلد Program1

Part2

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

part3

نموذج البدء عند تشغيل البرنامج والتحقق من النسخة مهمتة كالتالي

مثال : 1 -البرنامج يعمل عند المستخدمين نموذج البدء يحوي الرقم للنسخة 1001 وجدول xVer  مسجل في الحقل الرقمي 1001

2- قمت بالتحديث على البرنامج على سبيل المثال اضافة نموذج اقوم بتغيير رقم النسخة في نموذج البدء الى 1002 وجدول xVer  اعدل في الحقل الرقمي 1002

3- اثناء تركيب البرنامج المحدث عند المستخدم الاول والثاني واراد المستخدم الخامس ان يدخل على البرنامج قبل ان اذهب اليه لا يستطيع الدخول لانه لم يصله التحديث الجديد

المرحلة السابقة لا اشكال فيها

المطلوب بعد عمل جدول xVer وربطة بنموذج البدء وانحلت مشكلة اجبار المستخدم على التحديث اجاد طريقة اخرى لإكمال التحديث آليا بدون العمل اليدوي الممل .

Part1.jpg

part2.jpg

Part3.jpg

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

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

 

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

وأخبرني بنتيجتها بعد تحربتها على الشبكة المحلية لديك فضلاً لا أمراً 🥰

 

ReConnectServer.accdb

 

 

تم تعديل بواسطه Foksh
رابط هذا التعليق
شارك

كما ذكر المهندس فادي @Foksh قمت بعمل فكرة سابقا واشتغلت عليها فترة وكانت ناجحة ولله الحمد ..
لكن واجهت فيها بعض الإشكالات وطورتها لاحقا بعمل وسيط ملف VBS هو اللي يقوم بعملية حذف الإصدار القديم وتنزيل الإصدار الجديد ، بالإضافة جعلت البرنامج تلقائيا يتعرف على مكان واجهات البرنامج ومكان قاعدة الجداول .. 🙂 
وإلى الآن أعمل بهذي الطريقة ومرتاح جدا معها وتشتغل معاي بدون أية مشاكل ولله الحمد 🙂 ..

ولازلت أنوي إنزال موضوع متكامل إن شاء الله يشرح الآلية الجديدة لتحديث البرنامج لدى المستخدمين .. 🙂

 

رابط الآلية القديمة :

 

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

3 ساعات مضت, Moosak said:

 بالإضافة جعلت البرنامج تلقائيا يتعرف على مكان واجهات البرنامج ومكان قاعدة الجداول .. 🙂 

 

نريد هذه فضلا لا امرا .. ربما تكون افضل من طريقتي

طريقتي هي انشاء قرص شبكة على جميع الاجهزة يكون اسمه موحد مثلا :  z 

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

9 ساعات مضت, ابوخليل said:

نريد هذه فضلا لا امرا .. ربما تكون افضل من طريقتي

طريقتي هي انشاء قرص شبكة على جميع الاجهزة يكون اسمه موحد مثلا :  z 

بشكل سريع لتلبية طلبك يا سيدي .. وبدون الغوص في التفاصيل ..
هذه واجهة تحميل التحديث الجديد على الشبكة المحلية :

image.png.599b687dcb43d7493fff1760d6183b98.png

 

وللحصول على موقع نسخة الجداول + الواجهة الحالية للمستخدم ( نفس الموجودة في الصورة أعلاه - الجزء السفلي ) هذين هما الكودين :

موقع نسخة الجداول BE :
=Nz(DLookUp("Database";"MSysObjects";"Type=6");[CurrentProject].[FullName])


موقع نسخة الواجهات FE :
=[CurrentProject].[FullName]

 

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

6 ساعات مضت, hassan123 said:

سوف نطبق افضل الأفكار على المشروع 

نتمنى لك التوفيق أخي حسان .. 🙂🌷

ولو صبرت علي قليلا .. سأقوم بعون الله بإنزال التحديثات الأخيرة حول هذا الموضوع مع الملفات كاملة 🙂👌

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

  • أفضل إجابة

استكمالا لكيفية التحديث بطريقة أخرى بعد الشكر لمساعدتكم في طرح الأفكار

 سوف  أقدم لكم هذه الطريقة

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

image.jpeg.150c8794f1dea4ad764152d3db70b357.jpeg

سوف أشرح الفكرة باختصار 

المتطلبات

1- جدول جديد يضاف في البرنامج مرتبط بقاعدة البيانات مباشرة يحتوي على حقل رقم النسخة

2- تصميم نموذج افتتاحي مصدره الجدول السابق

3- تصميم برنامج مساعد نسميه (Update.accdb ) ونضعه في مجلد البرنامج 

4- مجلد مشاركة موجود على السيرفر نضع فيه البرنامج المحدث

شرح خطوات البرنامج عند التحديث

1- عند اكتمال التحديث يضاف رقم النسخة الجديدة في النموذج على سبيل المثال (002)  في النموذج الافتتاحي و في الجدول رقم النسخة

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

3- يغلق البرنامج (الاصدار القديم)  ويفتح البرنامج المساعد

4- عند فتح البرنامج المساعدة يقوم بحذف النسخة القديمة ويستدعي النسخة الجديدة من مجلد المشاركة على السيرفر ويلصقها في نفس مجلد البرنامج  بدل النسخة القديمة 

التفاصيل

من المعروف أن البرنامج سوف يكون على الهاردسك ( C ) عند جميع المستخدمون في المجلد (Shaoon)  وأيضا البرنامج المساعد (Update.accdb) وملحقات البرنامج مثل أيقونة البرنامج او ملفات التعليمات وغيرها 

👇

image.jpeg.267e35e3df1e01ba931b5a6cb2f0265f.jpeg

 

النموذج الافتتاحي  في البرنامج عند المستخدم ذو الاصدار 001

 👇

image.jpeg.d88dd43cc3c506161c2f8726c68a1d43.jpeg

النموذج الافتتاحي  في البرنامج الوسيط ( Update.accdb )

  👇

image.jpeg.10f0985ed0613563f4f46b2b4eab8655.jpeg

image.jpeg.887861b013516f4296f470435081e991.jpeg

 

انتهى الشرح

في المرفق الشرح العملي

ملاحظة هامة : عند تنزيل الشرح العملي فك الضغط وضع الثلاثة المجلدات في البارتشن (C)  مباشرة ومن ثم الدخول على المجلد (Shaoon) وتشغيل البرنامج (Shaoon.accdb)

Program.rar

 

 

 

 

 

 

 

 

 

تم تعديل بواسطه hassan123
  • Like 2
  • Thanks 2
رابط هذا التعليق
شارك

شكرا لك استاذ حسان على الشرح الوافي الكافي

و هي فكرتك الأولى 

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

'يتأكد هل فيه نسخة مختلفة
If Me.VerNo <> "001" Then ' =====> في كل مرة تقوم بتحدسث النسخة يجب تعديل الاصدار هنا وفي حقل الجدول xVer
MsgBox "يوجد اصدار أحدث", 48 + 524288, "تحديث النسخة"

واذا سمحت لي باضافة صغيرة :

 الجدول xver هذا على قاعدة البيانات في السيرفر وهو من سيحمل الرقم الجديد

و يوجد جدول (محلي) على واجهة المستخدم يحمل الرقم القديم

عند فتح واجهة المستخدم يقارن بين الرقمين في الجدولين .. فإن اختلفا يتم تشغيل التحديث ...... ويتم ايضا تحديث الجدول المحلي بالرقم الجديد /// وبما ان النسخة جديدة يكون المطور هو من وضع الرقم الجديد في الجدول المحلي فلا حاجة للتحديث .

ليصبح كود المقارنة بما يشبه هذا :

If VerNo1 <> VerNo2 Then

 

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

ما شاء الله تبارك الرحمن 🙂 🌹

فكرة رائعة أخي حسان @hassan123 وهذا دليل على أنه لا حدود للإبداع في الأكسس :rol:👌🏼

 

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

هذه الروابط لو تجعل الكود يتعرف على مواقعها بشكل أوتوماتيكي سيسهل عليك بعض الأمور ... منها :

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"
.
.
.
.
...... <<تكملة الكود>>

لاحظت بأنك قمت بربط التحديث الجديد بقاعدة البيانات قبل وضع التحديث موضع التنفيذ وهذا شيء جيد 👍🏻🙂

 

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

10 ساعات مضت, hassan123 said:

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

تمام .. هذا الذي سرت عليه في بعض اعمالي السابقة

انشاء قرص شبكة عام  على جميع الاجهزة ، المشكلة انه يكون ظاهر شأنه شأن الاقراص الأخرى

فأنا استفسر عن كود موحد يقوم مقامه

 

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

أفكار ممتازة جداً ، شكرا لاقتراحاتكم

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

image.jpeg.18f11187d8c5bc5c551f6b5b85c1f054.jpeg

 

رفع الملف سيكون سهل من قاعدة البيانات في السيرفر  ولكن احتاج الى كود برمجي يقوم بتحميل الملف من الجدول ( xVer ) الى مجلد البرنامج عند حذف الاصدار القديم و استبداله بالإصدار الجديد

المرفق التالي يوضح ذلك

 

Saoon_DATAbase.accdb

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

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

استكمالا لاستبدال التحديث عن طريق حقل  Attatchment  في الجدول (xVer)الجدول المضاف للبرنامج والاستغناء عن مجلد المشاركة Share folder ولأهمية موضوع التحديث حيث لا يقل أهمية عن تصميم البرنامج بحد ذاته ، خصوصا اذا كان البرنامج يرتبط بأكثر من مستخدم ومعاناة التحديث اليدوي على كل جهاز مما قد يؤدي الى ارهاق المبرمج وكثرة الأخطاء 

image.jpeg.18f11187d8c5bc5c551f6b5b85c1f054.jpeg

أشكركم جميعا وأشكر الخبراء في المنتدى على طرح الأفكار والأراء الجميلة فقد توقفت في المشاركة السابقة في كيفية تصدير الكائن الى مجلد البرنامج وقد وجدت حل لهذه المشكلة بعد البحث في المنتدى ووجدت مشاركة للأخ @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.

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

×   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