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

ربط الجداول لمسار المبرمج ، ثم اعادة ربطها بمسار المستخدم


jjafferr

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

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

 

نعمل البرنامج ، ثم نقسمه الى قسمين ، FE الواجهة و BE الجداول ، ولما نعطيه للمستخدم ، نربط الجداول بمسار خاص به ، ويعمل البرنامج.

ولما المستخدم يحتاج الى تعديل/اضافات ، ويرسل لنا نسخته بالايميل (انا ممكن اكون مسافر وبعيد عن نسختي) ، فيجب علينا ان نغير مسار الجداول ليتناسب مع مجلدات الكمبيوتر عندنا ،

ولما ننتهي من التعديل ، نرسله بالايميل ، وهناك يجب على المستخدم ان يغير المسار الى ذلك الذي به BE الاصل 🙂

المشكلة انه:

1. بعض الاوقات نكون قد وضعنا الـ BE في مكان لا يجب ان يعرفه المستخدم ، فلا نريد تدخل منه لهذا التغيير ،

2. بعض الاوقات المستخدم لا يعرف مكان الـ BE اصلا ،

3. وبعض الاوقات ، المستخدم لا يكون فني ليعرف كيف يختار مكان الـ BE 🙂

 

صادفتني هذه المشكلة مراراً ، ومرة دفعت الثمن غالي لما ربطوه بالـ BE الغلط ، ربطوه بنسخة الـ Backup بدل عن النسخة الاصل 😁

 

الى ان اهتديت الى هذه الطريقة 🙂

الفكرة هي عبارة عن اضافة جدول tbl_ReLink_To_Original في الـ FE فيه سجلين ، سجل يحتوي على مسار BE المستخدم ، وسجل يحتوي على مسار BE المبرمج ،

وبدل هذا الجدول ، ممكن ان نضع ملف نص txt في مجلد FE ، ونكتب فيهم السجلين ، ثم نقرأهم ، ولكن الجداول في الـ FE تناسبني اكثر ، فإستعملتها 🙂

 

1. لمعرفة مسار BE المستخدم:

Clipboard01.jpg.c6c645402a589c85a090a0a9fa643d0c.jpg

.

Clipboard02.jpg.49fa0f1210605e5ff39e630442dd33d4.jpg

.

ثم ننسخه من (1) جدول MSysObjects الى السجل الاول (Seq = 1) في جدولنا (2) tbl_ReLink_To_Original

Clipboard03.jpg.9e5683f6d59145a8b7ec1af02ee1f873.jpg

.

ثم في السجل الثاني (Seq = 2) ، نكتب مسار الـ BE حسب مجلدات الكمبيوتر عندنا (3) .

 

 

طريقة العمل:

نعمل ماكرو Macro باسم Autoexec ، والذي يقوم الاكسس بفتحه وتنفيذ اوامره اول ما يفتح البرنامج ،

1. نقوم بتشغيل الكود الذي سيربط الـ BE الى المسار الصحيح للمستخدم (اما المبرمج فلا يسنخدم هذا الماكرو ، وانما يدخل في البرنامج بمسك مفتاح الشفت) ،

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

3.4.5.7.8 هذه لإخفاء جميع كائنات البرنامج من جداول واستعلامات ونماذج وماكرو وتقارير ووحدات نمطية ، وتوسيع البرنامج لحجم الشاشة (فلا نحتاج ان نجعل النموذج منبثق ، والذي به الكثير من المشاكل) ،

5. فتح النموذج الاول من البرنامج ،

Clipboard04.jpg.48d4797c357a7aabf2e4c486d4f93f18.jpg

.

 

هذه هي الوحدة النمطية التي تقوم بالعمل (1) اعلاه :


Public Function f_ReLink_To_Original(Optional Seq As Integer = 1)
'On Error GoTo err_f_ReLink_To_Original
On Error GoTo Exit_f_ReLink_To_Original

'
' The client have his own path to the linked BE tables,
' yet for Development when we want to do change and modifications on the FE,
' we want to link this FE to our local BE tables, for testing,
' and we are done, we will send this FE back to the client, which will have our BE path!!
'
' Although the FE have a code on startup, which will prompt for the new BE path, but not all clients know how to use it!!
' So I added a table tbl_ReLink_To_Original to the FE, and the path to the client BE path, as Seq = 1 ,
' and for the Developer BE, the Seq is 2 or other numbers.
'
' for the Development BE path, we call this Function, for the immediate window:
'   ?f_ReLink_To_Original(2)
'
' or from a normal Event:
' Call Call f_ReLink_To_Original(2)
'
' and enter the DB with Shift key,
'
' and when the FE goes to the client, this Function will call Seq = 1 by default, thus returning their correct Path.
'
'
' by jjafferr
'
' v1. 24-Feb-2020
'

    Dim db As dao.Database
    Dim tdf As dao.TableDef
    Dim ConnectionString As String, Linked_Connection As String
    
    
    Set db = CurrentDb
    'which BackEnd the user selected
    ConnectionString = DLookup("[DB_Path]", "tbl_ReLink_To_Original", "[Seq]=" & Seq)
    'the existing BackEnd
    Linked_Connection = DLookup("[Database]", "MSysObjects", "[flags] = 2097152")

    'if the existing BackEnd = User Selected, then No need to connect again, just exit
    If ConnectionString = Linked_Connection Then GoTo Exit_f_ReLink_To_Original
    
    
    For Each tdf In db.TableDefs
        ' Only make a change if the table is a linked table
        If Len(tdf.Connect) Then
            tdf.Connect = ";DATABASE=" & ConnectionString
            tdf.RefreshLink
        End If
    Next
    
Exit_f_ReLink_To_Original:
    
    Exit Function
err_f_ReLink_To_Original:

    If Err.Number = 3170 Then
        'MsgBox "رجاء التاكد من مسار القاعدة الموجوده في الجدول" & vbCrLf & "tbl_ReLink_To_Original"
        'Resume Next
        Resume Exit_f_ReLink_To_Original
    Else
        MsgBox Err.Number & vbCrLf & Err.Description
        Resume Exit_f_ReLink_To_Original
    End If
    
End Function

.

اما للمبرمج ، فيجب عليه ان يدخل الكود ويكتب (لاحظوا اننا استخدمنا الرقم Seq = 2 ، ليشير الى السجل الثاني في الجدول ، المشير الى مسار الـ BE حسب مجلدات الكمبيوتر عندنا (3)  :

من نافذة الكود السفلى: immediate
?f_ReLink_To_Original(2)

او من اي حدث
Call f_ReLink_To_Original(2)

.

 

واذا اردت الاستفادة من هذه الطريقة لبرامجك ، فيجب عليك استيراد هذه الكائنات الى برنامجك (مع الاخذ في الاعتبار تغيير اسم النموذج في ماكرو autoexec ) :

image.png.19a595e3c5e36f5b7884c693614aab66.png

 

جعفر

Relink Tables.zip

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

جزاك الله خيرا اخى واستاذنا الغالى جعفر :fff:

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

تقبل تحياتى وتمنياتى لك وللجميع بالتوفيق

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

  • 2 years later...

ما شاء الله تبارك الله ..

هذا من أهم المواضيع التي تواجهني في التعامل مع برامجي والتغيرات والتعديلات المستمرة عليها 😅

وكانت عندي فكرة عمل شي مشابه لهذي الطريقة ولكن ما محصل وقت أطبقها 😁

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

وإذا وجد الكود أن المسار غير متوفر يعيد العملية من جديد .. 🙂 

 

الكلام سهل بس التطبيق يريدله شغل 😅

 

على العموم تشكر مهندس جعفر على هذا الإثراء الكبير والطرح المتميز 🙂 

ما شاء الله أفكارك كلها خارج الصندوق 🙂 ربي يحفظك 🌹

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

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

ما شاء الله أفكارك كلها خارج الصندوق 🙂

لا وانت الصادق ، اضطر افكر بهذه الطرق لإنجاز عملي 🙂

لهذا السبب ترى انه ما عندي مشاركات في اخفاء خلفية الاكسس ، او طرق الحمايات ، او ... ، بينما تخصصي في التعامل مع البيانات 🙂

 

اخوي موسى ، اليك آخر تحديث للموصوع ، وطريقة عملي:

 

لما استلم برنامج جديد مجزأ الى واجهة وخلفية:

في الواجهة FE ، امسك مفتاح الشفت وافتح الواجهة في وضع التصميم ، ثم اضع الكائنات التالية:

  1. الجدول tbl_ReLink_To_Original (تم عمل تغييرات على الجدول في المرفق) ، مع حذف جميع بياناته ،
  2. الماكرو Autoexec ، مع تغيير اسم اول نموذج يتم فتحه ،
  3. الوحدة النمطية basJStreetAccessRelinker وبدون المساس بها ، 
  4. الوحدة النمطية m_Arc_Subs ، مع مراعاة استخدام النسخة الاحدث من الدالة f_ReLink_To_Original (انظر الكود في الاسفل) ، واضافة الدالة الجديدة f_Original_DB_Path_Append ،
  5. الدالة الجديدة f_Original_DB_Path_Append تقوم بجميع الخطوات اليدوية التي شرحتها في اول مشاركة ، وتقوم بإدخال مسارات الجداول المرتبطة
  6. في VBA في نافذة immediate اكتب (لاحظ ان علامة الاستفهام بالانجيزي) 
    ?f_Original_DB_Path_Append

     

  7. اغلق البرنامج بعد حفظ كل شيء اعلاه ،
  8. افتح البرنامج بدون مسك مفتاح الشفت ، وسيسألني البرنامج عن مسار الجداول ، واخبره عن المسار ، ويشتغل البرنامج بالبيانات ،
  9. اقوم بجميع التعديلات/الزيادة المطلوبة ، وبعد كل تعديل اغلق البرنامج ، ثم استخدم البرنامج في الرابط التالي ، حتى ينظف برنامجي ويعمل لي نسخة احتياطية (وكثر ما اقول ، ما اوفي البرنامج حقه ، فكثير من الاحيان وبعد ايام او اشهر ، اضطر للرجوع الى احد النسخ القديمة والذي كان فيه كود قديم يشتغل ، ولكني استبدلته بكود جديد وظهر به اخطاء) :
  10. وفي النهاية اضغط البرنامج وارسله لصاحبه ،
  11. لما صاحبه يفتحه ، تلقائيا البرنامج يفتح بالطريقة العادية وبدون تدخل المستخدم في اي شيء 🙂

 

هذا هو الكود المعدل:

Public Function f_ReLink_To_Original(Optional Seq As Integer = 1)
On Error GoTo err_f_ReLink_To_Original

'
' this Function runs from startup, from AutoExec Macro.
'
' The client have his own path to the linked BE tables,
' yet for Development when we want to do changes and modifications on the FE,
' we want to link this FE to our local BE tables, for testing,
' and when we are done, we will send this FE back to the client, which will have our BE path, and that is the problem !!
'
' The Developer:
' since this Function runs from startup, but will NOT find the client BE,
' then the startup will run the Function jstCheckTableLinks_Full, which will prompt for the new BE path, and Link the FE to the BE.
'
' So I added a table tbl_ReLink_To_Original to the FE, and the path to the client BE path, as Seq = 1 ,
' and for the Developer BE, the Seq is Not 1.
'
' for the Development BE path, we can run the DB normally,
' and the Function jstCheckTableLinks_Full will prompt asking for the BE path (since the DB will NOT find the BE from this Function),
'
' Or, if entered the DB while holding the Shift key, we can:
' call this Function, from the immediate window:
'   ?f_ReLink_To_Original(2)
'
' or call this Function from any Event:
'   Call f_ReLink_To_Original(2)
'
'
' The Client:
' And when the FE goes to the client, this Function will call Seq = 1 by default, thus returning their correct Path.
'
'
' by jjafferr
'
' v1.0, 24-Feb-2020 , One BE
' v2.0, 10-Jul-2020 , Multiple BEs
' v2.1, 13-Jul-2020 , Multiple BEs, but each table should be connected to it's owen BE !!
'                   , the table might be in different BE, so this way we connect it to the right BE
'

    Dim db As DAO.Database
    Dim tdf As DAO.TableDef
    Dim rst As DAO.Recordset
    
    
    Set db = CurrentDb
    
    'assuming it is the Client, loop through his BE path
    Set rst = CurrentDb.OpenRecordset("Select [tbl_Name], [DB_Path] From tbl_ReLink_To_Original Where [Seq]=" & Seq)
    
    
        For Each tdf In db.TableDefs
            ' Only make a change if the table is a linked table
            If Len(tdf.Connect) Then
            
                rst.FindFirst "[tbl_Name] = '" & tdf.Name & "'"
                
                    tdf.Connect = ";DATABASE=" & rst![DB_Path]
                    tdf.RefreshLink
                    ' if the table is not found in the DB Path, the Function will generate error 3011
                
            End If  'Len
        Next
    

    
Exit_f_ReLink_To_Original:
    
    rst.Close: Set rst = Nothing
    
    Exit Function
err_f_ReLink_To_Original:

    If Err.Number = 3170 Then
        'MsgBox "رجاء التاكد من مسار القاعدة الموجوده في الجدول" & vbCrLf & "tbl_ReLink_To_Original"
        'Resume Next
        Resume Exit_f_ReLink_To_Original
    
    ElseIf Err.Number = 3011 Or Err.Number = 3044 Then
        'this Table belonges to another DB, ignore,
        'as the other DB Path will be checked too
        Resume Next
        
    Else
        MsgBox Err.Number & vbCrLf & Err.Description
        Resume Exit_f_ReLink_To_Original
    End If
    
End Function


Public Function f_Original_DB_Path_Append()

    Dim mySQL As String
    
    DoCmd.SetWarnings False
    
        mySQL = "UPDATE tbl_ReLink_To_Original SET Seq = 5, Remarks = 'A different BE Path was added' WHERE Seq=1"
        DoCmd.RunSQL mySQL
    
        mySQL = "INSERT INTO tbl_ReLink_To_Original ( DB_Path, tbl_Name, Seq, Remarks )"
        mySQL = mySQL & " SELECT Database, Name, 1, 'Client'"
        mySQL = mySQL & " FROM MSysObjects WHERE Flags = 2097152 ORDER BY Database"
        DoCmd.RunSQL mySQL
    
    DoCmd.SetWarnings True
    
End Function


    

 

جعفر

Relink Tables.zip

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

لله درك باش مهندس .. @jjafferr 😊🌺


كنت حاس يقينا أنه لديك إضافات وتحديثات للموضوع 👍😉

ما شاء الله عليك ، ومن وحي التجارب والحاجة تولد عجائب الأمور ... 😊 

 

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

سأحاول تبسيط الأمور أكثر باستخدام نوافذ صديقة للمستخدم إن شاء الله 🤗

مستعينا بالله ثم خلاصة ما طورته أنت في هذا الشأن ..

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

شكرا اخوي جعفر

انت شباب تحب الطريق وان طال واكيد تهوى السفر

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

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

غالبا اجعل قاعدة البيانات الخلفية في مكان محدد واحد في اجهزة العملاء .. 

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

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

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

وحدة نمطية صغيرة استخدمها في جميع برامجي ، اضع فيها مسار BE

ونستدعيها في نموذج البداية .

اذا اردت اشتغل عليها افتحها بالشفت واربط جداولي يدويا

ولكني اذا نسيت وفتحتها مباشرة قبل الربط اليدوي تظهر لي هذه الرسالة

على اعتبار ان ليس لدي BE في المكان الذي عند العملاء

بمعنى : انه ينظر هل الربط صحيح والقاعدة المرتبط بها يدويا .. الآن موجودة فعلا فيفتح

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

 

Untitled.jpg

هل شغلي كذا تمام

او من جنب القائم .. والموضوع يتحدث عن شيء آخر

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

ما شاء الله 

بارك الله فيك استاذي الجليل ابو خليل

ابداااع 

ربنا يجازيك عنا كل خير ويبارك لنا فى عمرك وصحتك وعلمك

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

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

خلينا نشوف الكود لوسمحت علشان اطبق واجرب 🙂

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

ولكني هذبته لغرضي هذا الخاص

هذا هو الكود:

Public Function AutoLinks(ByVal strDBPassword As String) As Boolean
    On Error GoTo AutoLinksErr
    Dim tdf As TableDef
    Dim strNewMDB As String
        For Each tdf In CurrentDb.TableDefs
    If UCase(Left(tdf.name, 6)) <> "COMPAS" Then
        If Len(tdf.Connect) > 0 And tdf.Fields.Count = 0 Then
            strNewMDB = "c:\bader\BData.db"
                If (IsNull(strDBPassword) = True) Or (strDBPassword = "") Then
                 tdf.Connect = ";DATABASE=" & strNewMDB
                 Else
                 tdf.Connect = ";DATABASE=" & strNewMDB & ";PWD=" & strDBPassword
                End If
          tdf.RefreshLink
       End If
    End If
    Next tdf
    AutoLinks = True   '
AutoLinksDone:
    Exit Function
AutoLinksErr:
    MsgBox "لا يوجد قاعدة بيانات فضلا اتصل بالدعم الفني"
    'MsgBox "Error #" & err.Number & ": " & err.Description, vbCritical
    Resume AutoLinksDone
End Function

ويتم مناداته في نموذج البداية على هذا النحو :

If AutoLinks("") = False Then
Call Application.Quit
End If

وهذا مرفق صغير عبارة عن مجلد .. تم اعداده على ان يتم وضع المجلد على قرص C

وللتجربة يمكن اخذ نسخة من القاعدة الخلفية BDAta.db ولصقها في اي مكان آخر وتغيير اللاحقة الى mdb واجراء التجربة

 

bader.rar

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

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

إنتهيت ولله الحمد من تصميم وبرمجة الفكرة التي أشرت إليها سابقا ..

وهذه مجرد تشويقة للموضوع 🙂 وسوف أفرد موضوع خاص بهذا الأمر إن شاء الله 🙂

=======================================================

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

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

 

أول ما نشغل البرنامج ( أو الـ Front End ) في الجهاز وما يلاقي ال BE  ستظهر هذي النافذة :

image.png.7e8f7fcae0830e527d790100976f436e.png

كما هو ملاحظ ..

- عندنا 4 مواقع أو أربع BE مخزنة لنفس هذا البرنامج .

- الروابط الحقيقية غي ظاهرة للمستخدم .. فقط أسم الملف يظهر .

- النقاط الحمراء والخضراء تحت العنوان ( متوفرة؟) .. ( الخضراء ) تخبرنا بالروابط المتاحة حالياً ويمكن الاتصال بها ، ( والحمراء ) تخبرنا بالمواقع الغير متوفرة حاليا  🙂 .

  وذلك باعتبرار أننا نشتغل من جهاز المبرمج حاليا 🙂 

- تاريخ الإضافة يبين لي التاريخ الذي تم إضافة هذا الرابط فيه وذلك للتأكد من تاريخ النسخة التي أريد العمل عليها .

وهذه طريقة الاتصال بالقواعد المخزنة :

Etesal1.gif.fd85ff83c8627525ec06086400d1fa0b.gif

( لا يفوتك شريط التقدم 😉 .. هذا لوحده حكاية .. من إبداعاتي طبعا 😅 )

- طبعا لاحظتوا أنه مباشرة بعد الاتصال بنجاح يفتح لنا صفحة الدخول على طول 🙂 

 

ثانيا : في حال عدم تطابق أي نسخة من النسخ المخزنة الحالية .. :

- يمكن عمل اتصال جديد من خلال الزر [ إنشاء اتصال جديد ] ..

- وسوف البرنامج تلقائيا بحفظ المسار الجديد من ضمن القائمة ( قائمة المسارات المخزنة ) .

NewEtesal.gif.8f0eb27a1429ef532f759e1b0f6c4899.gif

- وعند فتح البرنامج مرة أخرى سنجد أن البرنامج قام بحفظ المسار الجديد من ضمن القائمة 🙂 

image.png.45359d551d1bd101074287c0a0b8f17e.png

ثالثا : خيار تحرير المسارات المخزنة ( إضافة / حذف / تعديل ) :

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

- يمكن إضافة مسارات جديدة هنا بكل سهولة .. مثلا في حال عدم وجودك في موقع الزبون لكي تربط ال FE بال BE لتخزينه في الجدول ، يمكنك نسخ الرابط من هناك أو كتابته يدويا ليكون من ضمن القائمة 🙂 

128473388_EditMsarat.gif.fae5289f5c870ec24291267e60788628.gif

أما بخصوص طريقة فتح البرنامج بدون نوافذ علوية ومع إخفاء نافذة العناصر .. فجمعتها كلها في موديول واحد اسمه Start أناديه من خلال ماكرو البداية المسمى بالـ AutoEXEC  🙂 .. 

- فقط عليك أن ترسل له ثلاثة أشياء ( متغيرات ) :

1- اسم نموذج البداية ( أول نموذج تريده يفتح في البرنامج )

2- هل تريد ظهور النوافذ العلوية ونافذة العناصر ؟ تكتب : ( True / False ).

3- اسم أحد الجداول ( المرتبطة ) ،،،، لاحظ المرتبطة  🙂 وذلك بهدف فحص ما إذا كانت الواجهة مرتبطة بقاعدة البيانات أو لا .

فمن خلال هذا الموديول لن تحتاج للدخول فيه لتغيير الإعدادات .. فقط عليك كتابة المتغيارات هنا في ماكرو ال AutoEXEC .

image.png.7b9f2738081eddfd775b8b178b675359.png

 

هذا والسلام 🙂 

وبانتظار رأيكم واقتراحاتكم أساتذتي الأعزاء للتطوير .. 🙂

وبعدها سأنشر الملفات كلها هنا ليستفيد منها الجميع 🙂 

 

أخوكم ...

موسى الكلباني

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

1 ساعه مضت, Moosak said:

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

إنتهيت ولله الحمد من تصميم وبرمجة الفكرة التي أشرت إليها سابقا ..

وهذه مجرد تشويقة للموضوع 🙂 وسوف أفرد موضوع خاص بهذا الأمر إن شاء الله 🙂

=======================================================

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

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

 

أول ما نشغل البرنامج ( أو الـ Front End ) في الجهاز وما يلاقي ال BE  ستظهر هذي النافذة :

image.png.7e8f7fcae0830e527d790100976f436e.png

كما هو ملاحظ ..

- عندنا 4 مواقع أو أربع BE مخزنة لنفس هذا البرنامج .

- الروابط الحقيقية غي ظاهرة للمستخدم .. فقط أسم الملف يظهر .

- النقاط الحمراء والخضراء تحت العنوان ( متوفرة؟) .. ( الخضراء ) تخبرنا بالروابط المتاحة حالياً ويمكن الاتصال بها ، ( والحمراء ) تخبرنا بالمواقع الغير متوفرة حاليا  🙂 .

  وذلك باعتبرار أننا نشتغل من جهاز المبرمج حاليا 🙂 

- تاريخ الإضافة يبين لي التاريخ الذي تم إضافة هذا الرابط فيه وذلك للتأكد من تاريخ النسخة التي أريد العمل عليها .

وهذه طريقة الاتصال بالقواعد المخزنة :

Etesal1.gif.fd85ff83c8627525ec06086400d1fa0b.gif

( لا يفوتك شريط التقدم 😉 .. هذا لوحده حكاية .. من إبداعاتي طبعا 😅 )

- طبعا لاحظتوا أنه مباشرة بعد الاتصال بنجاح يفتح لنا صفحة الدخول على طول 🙂 

 

ثانيا : في حال عدم تطابق أي نسخة من النسخ المخزنة الحالية .. :

- يمكن عمل اتصال جديد من خلال الزر [ إنشاء اتصال جديد ] ..

- وسوف البرنامج تلقائيا بحفظ المسار الجديد من ضمن القائمة ( قائمة المسارات المخزنة ) .

NewEtesal.gif.8f0eb27a1429ef532f759e1b0f6c4899.gif

- وعند فتح البرنامج مرة أخرى سنجد أن البرنامج قام بحفظ المسار الجديد من ضمن القائمة 🙂 

image.png.45359d551d1bd101074287c0a0b8f17e.png

ثالثا : خيار تحرير المسارات المخزنة ( إضافة / حذف / تعديل ) :

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

- يمكن إضافة مسارات جديدة هنا بكل سهولة .. مثلا في حال عدم وجودك في موقع الزبون لكي تربط ال FE بال BE لتخزينه في الجدول ، يمكنك نسخ الرابط من هناك أو كتابته يدويا ليكون من ضمن القائمة 🙂 

128473388_EditMsarat.gif.fae5289f5c870ec24291267e60788628.gif

أما بخصوص طريقة فتح البرنامج بدون نوافذ علوية ومع إخفاء نافذة العناصر .. فجمعتها كلها في موديول واحد اسمه Start أناديه من خلال ماكرو البداية المسمى بالـ AutoEXEC  🙂 .. 

- فقط عليك أن ترسل له ثلاثة أشياء ( متغيرات ) :

1- اسم نموذج البداية ( أول نموذج تريده يفتح في البرنامج )

2- هل تريد ظهور النوافذ العلوية ونافذة العناصر ؟ تكتب : ( True / False ).

3- اسم أحد الجداول ( المرتبطة ) ،،،، لاحظ المرتبطة  🙂 وذلك بهدف فحص ما إذا كانت الواجهة مرتبطة بقاعدة البيانات أو لا .

فمن خلال هذا الموديول لن تحتاج للدخول فيه لتغيير الإعدادات .. فقط عليك كتابة المتغيارات هنا في ماكرو ال AutoEXEC .

image.png.7b9f2738081eddfd775b8b178b675359.png

 

هذا والسلام 🙂 

وبانتظار رأيكم واقتراحاتكم أساتذتي الأعزاء للتطوير .. 🙂

وبعدها سأنشر الملفات كلها هنا ليستفيد منها الجميع 🙂 

 

أخوكم ...

موسى الكلباني

الأخ موسى الكلباني @

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

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

نرجوا تنزيل الملف مفتوح المصدر نستفيد وجزاك الله خير 

اسأل الله ان يجعلها في ميزان حسناتك

 

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

1 ساعه مضت, معاذ الجماعي said:

الأخ موسى الكلباني @

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

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

نرجوا تنزيل الملف مفتوح المصدر نستفيد وجزاك الله خير 

اسأل الله ان يجعلها في ميزان حسناتك

 

العفو أخي العزيز .. 🙂

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

ولعل الاستماع للتجارب والمواقف المختلفة للأعضاء يفيدنا في تلافي الأخطاء عند التصميم ويسهل علينا العمل مستقبلا . 😊

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

السلام عليكم اخوي ابوخليل 🙂

 

 الهدف من هذا الموضوع:

1. عند عمل المبرمج واجهة برنامجه FE ، فيحتاج الى عمل ربط لجداوله BE في جهازه ،

2. عند ارسال الواجهة للمستخدم ، فيجب ان يعمل البرنامج بدون تدخل المستخدم بإختيار مسار قاعدة البيانات ،

1. عند استلام المبرمج واجهة البرنامج للتعديل/الاضافة ، فيحتاج الى عمل ربط لجداوله BE في جهازه ،

2. عند ارجاع الواجهة للمستخدم ، فيجب ان يعمل البرنامج بدون تدخل المستخدم بإختيار مسار قاعدة البيانات.

 

وهناك تشابه كبير بين طريقتي وطريقتك ،

وهناك نقاط قوة وضعف في الطريقتين 🙂

 

جعفر

 

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

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

السلام عليكم اخوي ابوخليل 🙂

 

وعليكم السلام ورحمة الله وبركاته عمي جعفر 🌹😊

هل الكلام موجه لأبو خليل ؟ أم لكلينا ؟ 😅

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

  • 2 weeks later...

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

رجعت لك من جديد عمي جعفر @jjafferr ( ما نسيت السالفة ) 😅

هذي المرة راجع مع إضافات مميزة 🙂 ..  

أخذت ملاحظاتك للأستاذ أبو خليل بعين الاعتبار 👍😉

في 11‏/3‏/2022 at 19:45, jjafferr said:

1. عند عمل المبرمج واجهة برنامجه FE ، فيحتاج الى عمل ربط لجداوله BE في جهازه ،

2. عند ارسال الواجهة للمستخدم ، فيجب ان يعمل البرنامج بدون تدخل المستخدم بإختيار مسار قاعدة البيانات ،

1. عند استلام المبرمج واجهة البرنامج للتعديل/الاضافة ، فيحتاج الى عمل ربط لجداوله BE في جهازه ،

2. عند ارجاع الواجهة للمستخدم ، فيجب ان يعمل البرنامج بدون تدخل المستخدم بإختيار مسار قاعدة البيانات.

 إليك الجديد في البرنامج :

1925201357_2AutuConnect.png.b3f117a516d9a68da821085b83dee49b.png

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

1 - أضفت خيار الاتصال التلقائي 🙂 : البرنامج يتصل تلقائيا بأول قاعدة جداول يجدها عند توافر 3 شروط  : 1- يكون خيار (اتصال تلقائي )مفعل  2- يكون خيار (عرض المسار )مفعل 3- تكون القاعدة متوفرة.

2 - أضفت خيار عرض المسار : لعرض المسار في قائمة المسارات اللي تظهر أو عدم عرضه وتخزينه فقط لاعتبارات تخدم المبرمج فقط 🙂 

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

----------------------------------------------------------------------------------

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

1809739714_6Files.jpg.b964ee1e6d8601b12dc99807b9b498a9.jpg

هكذا تقوم القاعدة بالإتصال التلقائي لما نكون في جهاز المبرمج : 🙂 

35874909_3AutoConnecting.thumb.gif.252f15f69948e5a8cde4a0771fb53477.gif

 

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

2066353501_4AutoConnectingtoClient.thumb.gif.4b410688868e6d00cf17bfd77f67b659.gif

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

106733695_5NoBEFound.thumb.gif.5095300cf10d25c99594840aa4ee752b.gif

======================================================

الآن لإلغاء موضوع الاتصال التلقائي يحتاج أنك تلغي الخيار (اتصال تلقائي ) بتلك القاعدة .. ويمكنك تحطه لقاعدة معينة وتلغيه من الباقيات ..

1355623507_7CutAutoConnect.jpg.e5f506e1cfb362f0eef7aaecfb5954e7.jpg

بعد كذا عند الفتح ( لما تكون ألغيت الاتصال التلقائي ) ستظهر لك هذي النافذة مباشرة  ( الاتصال اليدوي بقاعدة البيانات ) :

803872079_8ManualConnect.jpg.1508cf6fb6c14d5d461c06ba1359f108.jpg

لاحظ أنه يخبرك في الأسفل بآخر قاعدة كان متصل بها .. أو القاعدة اللي متصل بها الآن 🙂 

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

 

=====1930093585_8NewBe.thumb.gif.343886b2ecd7e2a80e2a5500ddce9834.gif================================================================

 

وبخصوص ماكرو ال Autoexc تم تطويره أيضا 🙂 

181005952_1Autoexec.png.f3cb03df151e79e931b79953fa144dc0.png

وضيفة الماكرو أنه يشغل لنا دالة اسمها Start  .. ولها 4 متغيرات هذي المرة بدل 3 🙂 

1 -  تعطيها اسم أول نموذج أو فورم تريده يشتغل .

2- تكتب ( true / False ) وذلك لتقفيل البرنامج بشكل كامل وإخفاء النوافذ العلوية وتعطيل القوائم الخاصة ووو ... إلخ 😁 ( باختصار تجهيز البرنامج للتسليم النهائي).

3- تكتب ( true / False ) في حالة أنك تريد تفعيل خاصية الاتصال التلقائي لقاعدة الجداول أو تعطيله .

4 - نكتب فيه اسم أحد الجداول المرتبطة وذلك لفحص إذا كان البرنامج متصل بقاعدة البيانات (الجداول) أو لا ..

 

شي أكثر من كذا دلع !! 😄

======================================

والآن مع اللحظة الحاسمة .. ملف التحميل 😊

طبعا الغرض الأساسي من وضع العمل هنا .. لارتباطة بالموضوع الأساسي لأستاذنا @jjafferr

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

والهدف الأكبر خدمة المبرمجين وتسهيل حياتهم 😊

المرفق

 

 

 

Auto Reconnect FE.zip

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

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

فتحت البرنامج ، ورحبت بي رسالة خطأ

يا ساتر 😅 ..

الحين اسم البرنامج انجليزي والقاعدة انجليزي !! ما العمل ؟

أنت حليت المشكلة ولا تختبرني ؟ 😁✋🏻

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

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