بحث مخصص من جوجل فى أوفيسنا
Custom Search
|
-
Posts
2414 -
تاريخ الانضمام
-
تاريخ اخر زياره
-
Days Won
65
نوع المحتوي
التقويم
المنتدى
مكتبة الموقع
معرض الصور
المدونات
الوسائط المتعددة
كل منشورات العضو Moosak
-
في الحقيقة لا أخفيك أمرا أنني قرأت ردك أكثر من 4 مرات ولم أفهم ما تقصده .. !! ولكن كأنني فهمت أنك تتكلم عن أخذ نسخة احتياطية قبل البدء بالتحديث .. وهذا ممكن طبعا بإضافة تحديث بسيط على الكود .. أما فيما يتعلق بالشبكة .. فياليت لو توضح أكثر بلغة بسيطة .. أو يترجم لنا حبيبنا جعفر 😄 وجزيل الشكر وأعظمه للجميع على المرور 😊🌹
-
بسم الله الرحمن الرحيم السلام عليكم ورحمة الله وبركاته اليوم جئتكم بفكرة جديدة وإبداعية لتحديث نسخة الواجهات 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) فيه حقل تاريخ عبارة عن سجل واحد يكتب فيه تاريخ الإصدار للنسخة الحالية. وهذا شرح مصور مبسط لآلية العمل : الصورة (1) : محتويات الملفات الأساسية المستخدمة في العمل. الصورة (2) : المرحلة الأولى : فحص وجوود تحديثات جديدة من خلال ملف الواجهات FE الصورة (3) : رسالة تأكيد للبدء في التحديث الصورة (4) : الخطوة الثالثة : إغلاق ال(FE) وفتح ال(BE) الصورة (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) الموجود في نسخة الواجهات. والآن يمكنك الانطلاق والبدء في تجربة البرنامج 😉👊 قم بتشغيل البرنامج FE-MyApplication وانتظر لترى النتيجة 😊👌 ملاحظة : لإعادة التجربة مرة أخرى بعد التحديث ، قم بتأخير تاريخ النسخة الأمامية من جدول (FE_Tbl_Version) إلى تاريخ سابق للتاريخ المخزن في قاعدة البيانات . *************************************************************** هذا كل شيء ولا تنسوا أن تنوروني بآرائكم ومقترحاتكم ولا تنسوني من صالح دعواتكم 😊 :: التحميل :: FrontEnd Updator V1.0.rar
-
اعرض الملف 📟 آلة حاسبة 📟 - هدية مميزة مفتوحة المصدر 🎁 السلام عليكم ورحمة الله وبركاته يطيب لي أن أقدم لكم هذا العمل البسيط وهو عبارة عن 🙂 :: آلة حاسبة :: أهديكموها مفتوحة المصدر 😊🎁 ومن مميزاتها : تم إضافة خاصية الحساب عن طريق مفاتيح الكيبورد 😊 ولا تنسونا من صالح دعواتكم 🙂 صاحب الملف Moosak تمت الاضافه 06 يون, 2022 الاقسام قسم الأكسيس
-
-
ابحث عن كود لتاكد من ان الشبكة المحلية متصله
Moosak replied to Mohameddd200300's topic in قسم الأكسيس Access
أهلا بك أخي أبا الحسن .. 🙂 يحتاج تقسم قاعدة البيانات أولا لكي تعمل لديك هذه التقنية .. أما بالنسبة لباقي السؤال .. فيمكن أن يضاف شرط في الكود بأولوية نسخة الجوجل درايف .. أو أن يضاف حقل في الجدول به ترتيب حسب الأولوية ليتعرف عليه الكود .. -
هدية هدايا الأكسس 🎁 | 02| الكاتب الذكي لدوال المجال Dloockup وأخواتها 😊
Moosak replied to Moosak's topic in قسم الأكسيس Access
إذا كنت تشتغل على نسخة أقدم من 2010 شيل رقم 2 وحتشتغل معاك تمام إن شاء الله.. يعني بدل Dim Rs Recordset2 تخليها Dim Rs Recordset وما تحتاج لإضافة أي مكتبات إضافية .. -
ابحث عن كود لتاكد من ان الشبكة المحلية متصله
Moosak replied to Mohameddd200300's topic in قسم الأكسيس Access
حيالله مهندسنا العزيز 😊 هذا الاختصار يشغل لك أداة اسمها snipping tool وهي من ضمن أدوات ويندوز ، ووضيفتها أخذ لقطة لجزء من الشاشة أو شاشة كاملة أو لنافذة معينة ( بمعنى انها تسهل لك الموضوع ) ، وبعدها ممكن تعمل لصق للصور في أي مكان بشكل عادي أو تفتح محرر للصور خاص بويندوز لتحرير الصورة .. 🙂 ولمعرفة المزيد: https://en.m.wikipedia.org/wiki/Snipping_Tool -
قريبا إن شاء الله .. 😊 طريقة إبداعية جديدة وحصرية لتحديث نسخة الواجهات FE لدى المستخدمين بدون برامج أو أدوات خارجية .. أكسس فقط .. 😉👌🏼 :: ترقبوا ::
-
ابحث عن كود لتاكد من ان الشبكة المحلية متصله
Moosak replied to Mohameddd200300's topic in قسم الأكسيس Access
أول شي خليني أخبرك سر خطير لتصوير الشاشة 😏👌🏼 جرب تضغط : شعار الويندوز + S + SHIFT ثانيا : زين تعطينا تعليمات التشغيل 😅 -
تفضل أخي عمر .. 🙂 المشكلة كانت في مصدر القوائم المنسدلة .. كانت مختلفة عن الحقول الرئيسية في النموذج .. application.rar
-
ابحث عن كود لتاكد من ان الشبكة المحلية متصله
Moosak replied to Mohameddd200300's topic in قسم الأكسيس Access
أريدك انت ترفع الملف المعدل .. مثل ما ذكرت سابقا 👍🏼😏 ودعنا نتعلم من خبراتك 😌🌹 -
ابحث عن كود لتاكد من ان الشبكة المحلية متصله
Moosak replied to Mohameddd200300's topic in قسم الأكسيس Access
والموضوع اللي يقصده أخونا @rockjone33 هذا هو : 🙂 -
ابحث عن كود لتاكد من ان الشبكة المحلية متصله
Moosak replied to Mohameddd200300's topic in قسم الأكسيس Access
هات ما عندك .. 😏 وعلى فكرة في المثال اللي تقصده أنا بنيته على هذي الفكرة : 😉 وهو نفس كود المهندس جعفر تقريبا بس محول إلى دالة عامة . 🙂 -
ابحث عن كود لتاكد من ان الشبكة المحلية متصله
Moosak replied to Mohameddd200300's topic in قسم الأكسيس Access
هناك عدة أفكار ممكن تطبقها وخذ منها ما تراه مناسباً حسب خيالك الواسع 🙂 كود دالة تفحص إذا كانت الجداول المرتبطة متصلة أم لا : الشرح : عندما يكون البرنامج مقسم لنسختين FE و BE وضيفة الكود أن تعطيه اسم أحد الجداول المرتبطة فيفحصه إذا كان متصل أم لا ويعطيك النتيجة True / False Private Function TableLinkOkay(strTableName As String) As Boolean 'Function accepts a table name and tests first to determine if linked 'table, then tests link by performing refresh link. 'Error causes TableLinkOkay = False, else TableLinkOkay = True Dim CurDB As dao.Database Dim tdf As TableDef Dim strFieldName As String On Error GoTo TableLinkOkayError Set CurDB = DBEngine.Workspaces(0).Databases(0) Set tdf = CurDB.TableDefs(strTableName) TableLinkOkay = True If tdf.Connect <> "" Then '#BGC updated to be more thorough in checking the link by opening a recordset 'ACS 10/31/2013 Added brackets to support spaces in table and field names strFieldName = CurDB.OpenRecordset("SELECT TOP 1 [" & tdf.Fields(0).Name & "] FROM [" & tdf.Name & "];", dbOpenSnapshot, dbReadOnly).Fields(0).Name 'Do not test if nonlinked table End If TableLinkOkay = True TableLinkOkayExit: Exit Function TableLinkOkayError: TableLinkOkay = False GoTo TableLinkOkayExit End Function وتناديه أو تستدعيه بهذه الصورة : TableLinkOkay("strTableName") كود دالة للتأكد ما إذا كان الملف أو المجلد المعطى موجود أم لا : الشرح : هذه الدالة تعطيها مسار الملف أو المجلد الذي تريد فحص وجوده ، ثم تعطيك نتيجة من نوع : True or False Public Function IsFileExists(txtPath As String) As Boolean ' To check whether a given file or folder exists or not If Len(Dir(txtPath, vbDirectory)) = 0 Then IsFileExists = False Else IsFileExists = True End If End Function وتستدعيه هكذا : IsFileExists(txtPath) كود لفحص حالة الإتصال بالإنترنت ( متصل / غير متصل ) : #If VBA7 Then Private Declare PtrSafe Function InternetGetConnectedState Lib "wininet.dll" _ (ByRef dwFlags As Long, _ ByVal dwReserved As Long) As Boolean #Else Private Declare Function InternetGetConnectedState Lib "wininet.dll" _ (ByRef dwFlags As Long, _ ByVal dwReserved As Long) As Boolean #End If Function Is_Connected() As Boolean Dim IEStat As Long Is_Connected = (InternetGetConnectedState(IEStat, 0&) <> 0) End Function Public Sub TestInternetConnection() If Is_Connected() = True Then MsgBox "Connected" Else MsgBox "Not Connected" End If End Sub طريقة الاستدعاء : Connected() هذه تعطيك نتيجة نعم/ لا على الإتصال TestInternetConnection() وهذه تظهر لك رسالة تخبرك إن كان متصل أم لا -
هدية 📟 آلة حاسبة 📟 - تمرين سريع على البرمجة VBA وهدية مميزة 😊
Moosak replied to Moosak's topic in قسم الأكسيس Access
تم حل مشكلة الأرقام العشرية (ولله الحمد) قبل أن أرى مشاركتك عمي @jjafferr 😅🖐️ والملف أرفقته في المشاركة الأصلية 🙂 عمي @jjafferr طلعلي هذا في الملف مالك 😅 -
هدية 📟 آلة حاسبة 📟 - تمرين سريع على البرمجة VBA وهدية مميزة 😊
Moosak replied to Moosak's topic in قسم الأكسيس Access
فعلا هناك مشكلة في الفاصلة إذا تلاها صفر .. باب الاجتهاد فيها مفتوح 👍🏼😁 تم حل هذا الإشكال 👍🏼 -
هدية 📟 آلة حاسبة 📟 - تمرين سريع على البرمجة VBA وهدية مميزة 😊
Moosak replied to Moosak's topic in قسم الأكسيس Access
هل عرفت السبب ؟ -
هدية 📟 آلة حاسبة 📟 - تمرين سريع على البرمجة VBA وهدية مميزة 😊
Moosak replied to Moosak's topic in قسم الأكسيس Access
لعيونك يا دكتورنا العزيز : -
هدية 📟 آلة حاسبة 📟 - تمرين سريع على البرمجة VBA وهدية مميزة 😊
Moosak replied to Moosak's topic in قسم الأكسيس Access
فكرة جميلة يمكن إضافتها بإذن الله .. 🙂 سرني مرروكم جميعاً 😊🌹 -
وعليكم السلام 🙂 جرب كتابتها هكذا : (أكبر من أو يساوي)----> 0.85
-
إضافة إلى جواب أستاذنا جعفر .. 🙂 ضع القيمة الإفتراضية لهذه الحقول في الجدول تساوي 0 وذلك لتلافي هذه الفراغات في المعاملات المستقبلية
-
أنت الآن جعلتنا نتطمع في رؤية هذه التجربة بعين اليقين 😏 والظاهر أننا لا نعذرك في ذلك ( إلا إن أحيط بكم ودارت عليكم الدوائر فنعذرك حينها ) 😅
-
وعليكم السلام ورحمة الله وبركاته دكتور محمد 🙂🌹 سؤال: هل هناك آلية لحذف الملفات السابقة (ملفات محددة وليس الكل) حسب الأهمية ..؟ بغرض توفير المساحة 🙂
-
ليست لدي الطريقة الآن ولكن أقترح عليك بما أنك لم تغير في الجداول أن تبحث عن طريقة تستورد لك البيانات من النسخ القديمة للنسخة الجديدة .. 🙂