اذهب الي المحتوي
أوفيسنا

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

قام بنشر (معدل)

بسم الله الرحمن الرحيم

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

اليوم جئتكم بفكرة جديدة وإبداعية لتحديث نسخة الواجهات FE لدى المستخدمين بدون الاستعانة بملفات وبرامج خارجية 🙂 

وذلك بالاستعانة بملفي الواجهات FE وملف قاعدة البيانات ( الجداول ) BE  فقط 😊

وقد قمت بشرح الفكرة ومحاولة تبسيطها قدر الإمكان من خلال الشرح الآتي مستعيناً بالله وتوفيقه ..

:: أصل المشكلة ::

أولاً : من المعلوم أنه يفضل أن يكون البرنامج مقسم إلى ملفين ( الواجهات FE - وقاعدة الجداول BE ) وذلك لكي يعمل عليه أكثر من مستخدم.

FE: هي اختصار لـ Front End  النهاية الأمامية .. أي ملف الواجهات

و BE: هي اختصار لـ Back End  النهاية الخلفية .. وهو ملف الجداول

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

ويتم توزيع ملفات الـ( FE) على أجهزة المستخدمين ، وهي محور حديثنا لهذا اليوم الرائع الجميل ..  😊

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

الطريقة والفكرة التي سنتحدث عنها اليوم تقوم بحل هذه المعاناة وجعل البرنامج يقوم بتوزيع الـ (FE)  نيابة عنك أوتوماتيكيا وبدون أي جهد يطلب من المستخدمين .. 😉

:: شرح الفكرة وآلية العمل ::

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

حيث أننا سنحتاج إلى :

1 - جدول في قاعدة الـ (BE) ومتصل بنسخة الـ (FE) كذلك،  لتخزين روابط مواقع كل ملف ( FE - BE - New Update ).

2- ماكرو Autoexec  وضيفته تشغيل الكود الذي سيفحص وجود تحديثات جديدة من عدمه عند بدء تشغيل البرنامج ، ويوضع في نسخة الـ (FE).

3- سنحتاج لإضافة نموذج في نسخة الجداول الـ (BE) مهمته تشغيل الكود الذي سيحدث نسخة الـ (FE). والكود يعمل عند حدث (عند التشغيل - ON OPEN ).

4- سنحتاج لجدول (محلي) يبقى في نسخة الواجهات الـ (FE) فيه حقل تاريخ عبارة عن سجل واحد يكتب فيه تاريخ الإصدار للنسخة الحالية.

 

وهذا شرح مصور مبسط لآلية العمل :

Slide1.JPG.d0864d277cf77cc5458b854be08840d8.JPG

الصورة (1) : محتويات الملفات الأساسية المستخدمة في العمل.

Slide2.JPG.ebdfd109548133b346e23fb83e8858f0.JPG

الصورة (2) : المرحلة الأولى فحص وجوود تحديثات جديدة من خلال ملف الواجهات FE

Slide3.JPG.e90c5aef70aafa3aee54ff6464483e22.JPG

الصورة (3) : رسالة تأكيد للبدء في التحديث

Slide4.JPG.4f7d0c5c34f8e10adace012e0d66d22b.JPG 

الصورة (4) : الخطوة الثالثة : إغلاق ال(FE) وفتح ال(BE) 

Slide5.JPG.77cbce756d7f773d5af02bcf3deba365.JPG

الصورة (5) : إستبدال النسخة القديمة بالجديدة وإعادة تشغيل البرنامج 🙂 

هذا كل شيء ببساطة 😅🖐️

:: الأكواد المستخدمة ::

أولاً : الكود المستخدم في ملف الواجهات الـ (FE) :

Public Sub UpdateUsersFE(CurrentVerDate As Date, NewVerDate As Date, _
                        txtOldFEPath As String, txtNewFEPath As String, _
                        txtBEPath As String, txtBEUpdateForm As String, _
                        DoTheUpdaet As Boolean)
On Error Resume Next

' ************************************************** Check If the Manager Send The Update Order
If DoTheUpdaet = True Then
    ' Continue The Code
Else
    MsgBox "لا يوجد تحديث جديد"
    Exit Sub
End If

' ************************************************** Check Version Date
If CurrentVerDate < NewVerDate Then
    ' Continue The Code
'    MsgBox "سوف يتم التحديث إن شاء الله"
'    Exit Sub
Else
'    MsgBox "لديك آخر إصدار"
    Exit Sub
End If

' *************************************************** Confermation Msg.

If MsgBox("لديك تحديث جديد للبرنامج، متابعة؟", vbYesNo, "Apply New Update?") = vbYes Then
Else: Exit Sub
End If


'  ************************************************** Open the BE and the Update Form
Dim objAdb As Object

Set objAdb = CreateObject("Access.Application")
objAdb.OpenCurrentDatabase (txtBEPath)
objAdb.DoCmd.OpenForm txtBEUpdateForm
objAdb.Visible = False

'  ************************************************** Close FE Database
DoCmd.Quit

	Set objAdb = Nothing
End Sub


Public Function testUpdate()
 
 Dim BackEndPath As String, FrontEndPath As String, UpdatePath As String, CurrentVerDate As Date, NewVerDate As Date, StartUpdating As Boolean

CurrentVerDate = DFirst("[VersionDate]", "[FE_Tbl_Version]")
NewVerDate = DFirst("[LastUpdateDate]", "[BE_Tbl_Updates]")
 
BackEndPath = DFirst("[BackEndPath]", "[BE_Tbl_Updates]")
FrontEndPath = DFirst("[FrontEndPath]", "[BE_Tbl_Updates]")
UpdatePath = DFirst("[UpdatePath]", "[BE_Tbl_Updates]")

StartUpdating = DFirst("[StartUpdating]", "[BE_Tbl_Updates]")
    
    Call UpdateUsersFE(CurrentVerDate, NewVerDate, FrontEndPath, UpdatePath, BackEndPath, "BE_Frm_StartUpdating", StartUpdating)

End Function

ثانياً : الكود المستخدم في ملف الجداول  الـ (BE)  :

#If VBA7 Then
   Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#Else
   Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
#End If

Private Sub Form_Open(Cancel As Integer)

    Call UpdateFE

End Sub

Public Sub UpdateFE()

Dim FrontEndPath As String, NewUpdatePath As String

FrontEndPath = DFirst("[FrontEndPath]", "[BE_Tbl_Updates]")
NewUpdatePath = DFirst("[UpdatePath]", "[BE_Tbl_Updates]")

'On Error Resume Next

'********************************************************************(Waite for 3 seconds until FE Closed )
Sleep 3000

'********************************************************************(Copy the New Update to the User PC)
Dim fs As Object
Set fs = CreateObject("Scripting.FileSystemObject")

'Kill FrontEndPath
'Sleep 1000
fs.CopyFile NewUpdatePath, FrontEndPath, True

'********************************************************************(Open the new FE for the user)
'Sleep 1000
Dim objAdb As Object
Set objAdb = CreateObject("Access.Application")
objAdb.OpenCurrentDatabase (FrontEndPath)
objAdb.Visible = True
objAdb.DoCmd.RunCommand acCmdAppMaximize

'*********************************************************************(Close BE)
DoCmd.Quit

Set objAdb = Nothing
End Sub

:: (مهم جدا ) قبل التجربة والتطبيق  ::

ستجدون في المرفقات ثلاثة ملفات:

- ملف الواجهات القديم (FE-MyApplication)

- ملف الجداول (BE-MyApplicationDatabase)

-وملف الواجهات المحدث (FE-NewUpdateV2.0) 

أولاً : يجب إعادة ربط ملفي الواجهات (القديم + التحديث ) بملف الجداول (يدوياً ) .. وهي خطوة مهمة للعمل .. ( يمكنك عملها أوتوماتيكيا بالأكواد في برنامجك لاحقاً ، لم أشأ تعقيد الأمور هنا 😅)

ثانياً : يجب عليك تحديث روابط أماكن الملفات الثلاثة في جدول (BE_Tbl_Updates) وذلك من خلال النموذج (FE_Frm_UpdateInfo) الموجود في نسخة الواجهات.

image.png.1bd0403b7d3ab866d8c4cd78ce4c302a.png

والآن يمكنك الانطلاق والبدء في تجربة البرنامج 😉👊

قم بتشغيل البرنامج FE-MyApplication وانتظر لترى النتيجة 😊👌

ملاحظة :

لإعادة التجربة مرة أخرى بعد التحديث ، قم بتأخير تاريخ النسخة الأمامية من جدول (FE_Tbl_Version) إلى تاريخ سابق للتاريخ المخزن في قاعدة البيانات . 

***************************************************************

هذا كل شيء ولا تنسوا أن تنوروني بآرائكم ومقترحاتكم 

ولا تنسوني من صالح دعواتكم 😊

:: التحميل ::

FrontEnd Updator V1.0.rar

تم تعديل بواسطه Moosak
  • Like 9
  • Thanks 4
قام بنشر
2 ساعات مضت, rockjone33 said:

الله يبارك فيك ما قصرة شرحة متقدم  .. هل يعمل بالانترنت ؟! .. اذا بالامكان اضافة قوقل ادرايف 🙂

هل يمكن العمل بشبكة عن طريق FTP ونقل الملفات بدل  قوقل ادرايف .. 🙂

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

او تهيئة مشروع بالاحاق مع خلو المسؤلية !!؟ عمل باك اب في الاول !! ثم نسخ الى المسار ثم الحاق ثم تحديث .. اهم حاقة هي بيانات .. 🙂

برفع لصاحبنا وحبيبنا اذا سمح الوقت .. 🙂

1- تنشيط البار السفلي بضم المشروعك يكون في محرك اقراص للشبكة وقاعدة البيانات واضافة فحص الانترنت  ..🙂

 يعد الفصل اذا كان 1 او اثنين 10 يحدد الفصل فية في المجموع وتمكين رسالة التنشيط .. وعند التحميل فقط !! وقت العمل ..🙂

2- عمل كشف حسابات انفنتي دات بشوف حبيبنا جعفر SQL  سيرفر! او MYSQL !! ..🙂

3ربط المستقبل والمرسل بالطلب ..🙂

 

في الحقيقة لا أخفيك أمرا أنني قرأت ردك أكثر من 4 مرات ولم أفهم ما تقصده .. !! :blink:

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

 

وجزيل الشكر وأعظمه للجميع على المرور 😊🌹

قام بنشر

السلام عليكم 🙂

قبل كل شيء ، خلوني ابخر المكان عن العين ، علشان ما تصيب الحبايب 😁

tumblr_inline_p4rluxjT9t1vx8kxb_500.gifv

.

شكرا على الفكرة الجديدة ، بأرسال النسخة الجديدة من FE بإستخدام BE ، بدل عن سحبها بواسطة FE 🙂

 

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

مع العلم ان هذه الفكرة اتت على بالي (BE هو الذي يرسل التحديث) ، ولكن ارتأيت عدم استخدامها ، لأسباب التالية:

  1. ضعف الشبكة في موقع العمل ، وفي الواقع هذه تجربة جدا فريدة ، جعلتني اعيد النظر في الكثير من تفاصيل البرمجة ، وقد اُوفق لعمل موضوع خاص به إن شاء الله ،
  2. المستخدم (على الاقل 4 حاليا) ، يجب ان يُلبي طلب الزبائن ، بمعدل 3 زبائن في الدقيقة (والامل ان يكون اكثر) ، وبسبب ضعف الشبكة ، التركيز كان على جعل BE في حالة تأهب لخدمة المستخدم ، ولا نشغل BE بأي شيء آخر ،
  3. يجب ان يتم التحديث بدون تدخل المستخدم ، فهنا يجب ان نعرف مسار برنامج FE المستخدم ، تلقائيا ، وليس مكان البرنامج الاصل ، فربما ولسبب ما ، قام المستخدم بتغيير مكان المجلد الى مكان آخر ،
  4. كانت الفكرة ، ان لا استعمل نموذج في BE ، وانما عن طريق ادخال قيمة في حقل معين في جدول ، وهذا الحقل يقوم بتشغيل وحدة نمطية في BE ويقوم بعمل اللازم ، بهذه الطريقة: 

 

 

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

أولاً : من المعلوم أنه يجب أن يكون البرنامج مقسم إلى ملفين ( الواجهات FE - وقاعدة الجداول BE ) وذلك لكي يعمل عليه أكثر من مستخدم

هذه المعلومة غير دقيقة ، فأول برنامج اكسس عملته لمؤسسة عام 2002 ، وضعت البرنامج كاملا على السيرفر ، وكان يستخدمة بين 5-8 اشخاص في اليوم ، والحمدلله الله ستر وما صارت مشكلة فيه 🙂

 

وحيا الله بالحبايب ، اللي ذكروني ، واللي ما ذكروني 🙂

 

جعفر

  • Like 2
  • Thanks 1
قام بنشر

أهلا أهلا أهلا بكبير المعلمين وحامل المسك 😊

زين بخرت المكان قبل لا نروح فيها 😂

أشكرك على المرور والتعليق أستاذنا @jjafferr

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

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

أنت الآن نورتني لفكرة الحصول على مكان الFE مباشرة قبل التحديث واستخدامه للتبديل ، فكرة عبقرية ولكن ما خطرت في بالي لأن الوضع معي في العمل هو أنني أنصب ال FE بنفسي للمستخدمين وما أخليهم يعبثو بموقعه لأنهم لو تورطوا وما عرفو يربطوه بال BE بيرجعولي في النهاية 😁

لحد الحين النقطتين 1 و 2 الحمدلله ما صارت معي ، الشبكة أمورها طيبة ..

58 دقائق مضت, jjafferr said:

يجب ان يتم التحديث بدون تدخل المستخدم

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

وبإذن الله ممكن أطور الكود ليأخذ عنوان ال FE لكل مستخدم على حده .

منذ ساعه, jjafferr said:

هذه المعلومة غير دقيقة

هو يصلح .. بس تضل الطريقة اللي ذكرتها تحمل في طياتها البلاوي 😅🖐🏼️

  • Like 1
  • Thanks 1
قام بنشر
منذ ساعه, jjafferr said:

هذه المعلومة غير دقيقة ، فأول برنامج اكسس عملته لمؤسسة عام 2002 ، وضعت البرنامج كاملا على السيرفر ، وكان يستخدمة بين 5-8 اشخاص في اليوم ، والحمدلله الله ستر وما صارت مشكلة فيه

يا هلا وغلا اخي @jjafferr

اتفق معك غير دقيقة

ولكن هل تنصح من سيعمل على شبكة ولـ مستخدمين متزامين بعدم التقسيم

اعتقد الاجابة لا

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

اتمنى ما اكون حرجت عن الموضوع الايام هذه احس اني احتاج الى اعادة ضبط مصنع

تحياتي

 

  • Like 2
قام بنشر
18 دقائق مضت, Moosak said:

هو يصلح .. بس تضل الطريقة اللي ذكرتها تحمل في طياتها البلاوي 😅🖐🏼️

 

7 دقائق مضت, مبرمج سابق said:

ولكن هل تنصح من سيعمل على شبكة ولـ مستخدمين متزامين بعدم التقسيم

اعتقد الاجابة لا

عفوا ، انا اتفق معاكم 100% بأن تقسيم البرنامج هو الطريقة الصحيحة لمشاركته ، ولكن تعليقي كان على كلمة "يجب" اخوي موسى 🙂

 

جعفر

قام بنشر (معدل)
7 ساعات مضت, Moosak said:

أولاً : من المعلوم أنه يفضل أن يكون البرنامج مقسم إلى ملفين ( الواجهات FE - وقاعدة الجداول BE ) وذلك لكي يعمل عليه أكثر من مستخدم.

خلاص غيرتها علشان نكون في السليم :biggrin: وعدم الإخلال بالأمن العام 😂

تم تعديل بواسطه Moosak
  • Haha 1
قام بنشر

😅😅😅😂😂

منك السموحة الغالي 😅✋🏻

لها محل ونص ، ووقرت في صميم القلب بعد 😅

بس القصد إيصال المعلومة بشكل صحيح للمتلقي .. خصوصا اللي ما بيقرأ الردود ..  أفكر في المستقبل البعيد 😁.. 

  • Thanks 1
قام بنشر
21 ساعات مضت, jjafferr said:

عفوا ، انا اتفق معاكم 100% بأن تقسيم البرنامج هو الطريقة الصحيحة لمشاركته ، ولكن تعليقي كان على كلمة "يجب" اخوي موسى 🙂

استاذى الحبيب لقلبى استاذ جعفر الكريم 

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

عفوا تقبل احترامى وتقديرى

قام بنشر
3 ساعات مضت, abouelhassan said:

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

نعم ستعمل ، وبدون تعديل ،

اما كيف تقسم قاعدة البيانات ، فالمنتدى مليئ بمثل هذا الموضوع ، واليك بعض الامثلة:

https://www.officena.net/ib/topic/56791-استخدم-ملف-اكسس-من-اكثر-مستخدم-بنفس-الوقت/

https://www.officena.net/ib/topic/82076-طريقة-وضع-كلمة-المرور-بعد-تقسيم-قاعدة-البيانات/

https://www.officena.net/ib/topic/74664-تقسيم-قاعدة-البيانات-وتحويلها-الى-برنامج-تنفيذي/

https://www.officena.net/ib/topic/104953-سؤوال-مهم-في-خاصية-تقسيم-قاعدة-البيانات

 

  • Like 1
قام بنشر
3 ساعات مضت, abouelhassan said:

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

ماشاء الله جعفر ماقصر

مع ذلك للوصول لمعالج التقسيم في التبويب قاعدة بيانات ثم ايقونة قاعدة بيانات اكسس

او ضع الامر التالي في زر امر

DoCmd.RunCommand 520

سوف يفتح معالج التقسيم

تحياتي

  • Like 1
قام بنشر
1 ساعه مضت, jjafferr said:

شكر وتقدير وفائق الاحترام من اخيك استاذى الحبيب وكذلك الشكر موصول للاستاذ مبرمج سابق

قام بنشر
53 دقائق مضت, احمد الفلاحجي said:

بسم الله ماشاء الله عمل رائع اخى واستاذى موسى 🌹 جزاك الله خيرا

قمت بالتجربه على المثال واكثر من رائع

بالتوفيق

 

بارك الله فيك مهندسنا الحبيب .. 😊

سرني جدا أنك جربت ☺️🌹:fff:

  • Thanks 1
قام بنشر
23 ساعات مضت, Moosak said:

بارك الله فيك مهندسنا الحبيب .. 😊

سرني جدا أنك جربت ☺️🌹

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

بل انا المسرور بمشاركتكم تجاربكم والتعلم منها

بالتوفيق اخى موسى

  • Haha 1
  • 4 months later...
قام بنشر

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

اشكرك جدا على الفكره الاكثر من رائعه وجزاك الله كل خير

عندي مشكله عندما نقلت البرنامج الي برنامجي الخاص تظهر لي رساله خطا عند الضغط على زر اختيار المسار  كما يلي

يقول ان المشكله في fd

image.png.6ed6887c3f18af324ac0aeb349cd9797.png

قام بنشر

وعليك السلام ورحمة الله وبركاته أخي محمد 🙂 
إذهب لمحرر الأكود وتأكد من إضافة المكتبة التالية :

image.png.13e6226ddd7b8e105b9ca8ff97880bff.png

image.png.e6bcc0737e4ad913eba876ce0f522104.png

  • Thanks 1
قام بنشر
4 ساعات مضت, ابو فتحى said:

هل يوجد نفس الفكره للقاعده البيانات BE

وضح الفكرة أكثر أخي أبو فتحي ؟

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