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

Foksh

الخبراء
  • Posts

    2,361
  • تاريخ الانضمام

  • تاريخ اخر زياره

  • Days Won

    85

كل منشورات العضو Foksh

  1. السلام عليكم ورحمة الله وبركاته ، أخواني وأساتذتي ومعلمينا ( دون استثناء ) اليوم جئتكم بفكرة جديدة وأعتقد أنه لم يسبقني أحد بهذا الطريق ؛ وهو إضافة اختيار واجهة اللغة إلى تطبيقات وبرامج ومشاريع الآكسيس بطريقة جديدة وتقدروا تقولوا 2024 في البداية سأقوم بشرح المطلوب داخل القاعدة التي سيتم التطبيق عليها ، أولاً :- جدول واحد فقط يحتوي على حقل واحد فقط أيضاً وسنسميه بـ SettingsTable ، والحقل الذي بداخله هو Language من نوع نصي ( Text ) . ثانياً :- نموذج Settings وهو طبعاً ليس له مصدر سجلات . وبداخله كومبوبوكس Combo box سيكون اسمه cboLanguage نوع مصدر بياناته Value List ؛ ومصدر بياناته القيم التالية ( "العربية";"English" ) . ثالثاً :- بجانب قاعدة البيانات سنقوم بإنشاء مجلد جديد وسيتم تسميته بـ Language . الآن خطوات العمل :- الموديول Module :- قم بإنشاء Module جديد وسمه بـ Set_Language ؛ وهو مفتاح العمل والذي من خلاله سنعتمد على جلب الترجمة من الملفات التي سنقوم بإنشائها لاحقاً . وهذا الكود مع الشرح الكامل له بين السطور . Option Compare Database Option Explicit ' المتغير العام لتخزين اللغة الحالية Public CurrentLanguage As String ' تحديث اللغة الحالية Public Sub UpdateLanguage() On Error Resume Next ' احصل على اللغة المحددة من جدول الإعدادات CurrentLanguage = DLookup("Language", "SettingsTable") ' قم بتحديث العلامات في جميع النماذج UpdateLabelsInAllForms End Sub ' تحديث العلامات في جميع النماذج Private Sub UpdateLabelsInAllForms() Dim frm As AccessObject ' تحديث العلامات في جميع النماذج المحملة For Each frm In CurrentProject.AllForms If frm.IsLoaded Then UpdateLabelsInForm Forms(frm.Name) End If Next frm End Sub ' تحديث العلامات في نموذج محدد Private Sub UpdateLabelsInForm(frm As Object) Dim arFile As String, enFile As String Dim arLabels() As String, enLabels() As String Dim i As Integer ' احصل على ملف اللغة العربية واللغة الإنجليزية arFile = GetLanguageFilePath("Arabic.txt") enFile = GetLanguageFilePath("English.txt") ' اقرأ الملفات واملأ المصفوفات بالنصوص المترجمة arLabels = Split(ReadFile(arFile), vbCrLf, -1) enLabels = Split(ReadFile(enFile), vbCrLf, -1) ' قم بتحديث العلامات في النموذج For i = 0 To UBound(arLabels) UpdateLabel frm, "Label" & CStr(i + 1), arLabels(i), enLabels(i) UpdateLabel frm, "Command" & CStr(i + 1), arLabels(i), enLabels(i) Next i End Sub ' احصل على مسار قاعدة البيانات الحالية Private Function GetDatabasePath() As String Dim dbPath As String dbPath = CurrentDb.Name GetDatabasePath = Left(dbPath, InStrRev(dbPath, "\")) End Function ' احصل على مسار ملف اللغة Private Function GetLanguageFilePath(fileName As String) As String GetLanguageFilePath = GetDatabasePath() & "Language\" & fileName End Function ' اقرأ ملف النص وارجع النص كنص نصي Private Function ReadFile(filePath As String) As String Dim fileNumber As Integer fileNumber = FreeFile Open filePath For Input As fileNumber ReadFile = Input$(LOF(fileNumber), fileNumber) Close fileNumber End Function ' تحديث علامة محددة في النموذج بناءً على اللغة الحالية Private Sub UpdateLabel(frm As Object, labelName As String, arabicText As String, englishText As String) On Error Resume Next ' قم بتحديث العلامة بناءً على اللغة الحالية frm.Controls(labelName).Caption = IIf(CurrentLanguage = "العربية", arabicText, englishText) On Error GoTo 0 End Sub * ملاحظة :- سنعتمد هنا على طريق بسيط جداً وهو المسميات في النماذج ، فمثلاً لو انشأنا زر في نموذج ما وكانت تسميته Caption هي حفظ وكان اسم الزر Command1 ؛ فعند الترجمة سيصبح كل زر في البرنامج باسم Command1 هو بمثابة زر الحفظ وستكون ترجمته Save ؛ لذا سنعتمد طريقة توحيد المسميات في النماذج وهذا سيجعل الأمر سهلاً جداً للصيانة ، وطبعاً لا يمكن أن يكون لعنصرين ( كائنين ) في النموذج لهما نفس الإسم . رابعاً :- العودة إلى نموذج Settings الذي تم التحدث عنه في النقطة ( ثانياً ) ؛ سنقوم بدايةً باستكمال إنشاء الأكواد الخاصة بتغيير اللغة ، قبل الأحداث للـ Combo Box والنموذج . سنقوم بإدراج هذه الأكواد الثلاثة البسيطة :- ' تحديث العناصر في النموذج بناءً على اللغة المختارة Private Sub UpdateLanguageForControls() On Error Resume Next Dim ctrl As AccessObject For Each ctrl In Me.Controls ' يمكنك هنا إضافة العناصر الأخرى التي تريد تحديثها بناءً على اللغة ' مثلا: If TypeOf ctrl Is ComboBox Then Next ctrl End Sub ' حفظ اختيار اللغة في جدول SettingsTable Private Sub SaveLanguageChoice() CurrentDb.Execute "UPDATE SettingsTable SET Language='" & Me.cboLanguage & "'" End Sub ' تغيير اللغة وتحديث العناصر ذات الصلة Private Sub ChangeLanguage(selectedLanguage As String) CurrentDb.Execute "UPDATE SettingsTable SET Language='" & selectedLanguage & "'" UpdateLanguageForControls End Sub وفي حدث عند الفتح للنموذج سنقوم بإدراج هذا الكود :- ' حدث يتم تنفيذه عند فتح النموذج Private Sub Form_Open(Cancel As Integer) UpdateLanguage End Sub وفي حدث عند التحديث للكومبوبوكس سندرج الكود التالي :- ' حدث يتم تنفيذه بعد تحديث اختيار اللغة من ComboBox Private Sub cboLanguage_AfterUpdate() Dim response As VbMsgBoxResult Dim Language As String ' احصل على اللغة المحددة من ComboBox Language = Me.cboLanguage.Value ' قم بتحديد الرسالة بناءً على اللغة المختارة If Language = "العربية" Then response = MsgBox("هل ترغب في تغيير اللغة إلى العربية؟", vbQuestion + vbYesNo, "التأكيد") ElseIf Language = "English" Then response = MsgBox("Do you want to change the language to English?", vbQuestion + vbYesNo, "Confirmation") End If ' قم باتخاذ الإجراء المناسب بناءً على رد المستخدم If response = vbYes Then SaveLanguageChoice Application.Quit Else SaveLanguageChoice DoCmd.Close End If End Sub الآن نأتي لأهم نقطة في هذا الموضوع ، ألا وهي . أين ستكون الترجمة ؟ طبعاً قمنا سابقاً بإنشاء المجلد Language بجانب قاعدة البيانات ، الآن سنذهب إليه وسنقوم بإنشاء ملفين نصيين Text الأول Arabic.txt ، والثاني English.txt . في الأعلى افترضنا انه لدينا في النموذج زر اسمه Command1 والـ Caption له كانت حفظ ، الآن سنقوم بكتابة المسمى بالعربي وهو حفظ في ملف النص Arabic ، وفي الملف الثاني English سنكتب Save وهو أول أمر قمنا به كتجربة ( لاحظ أن Command يتبعها الرقم 1 ) وعليه فأن أي مسمى Command1 في أي نموذج سيكون اسمه حفظ أو Save عند اختيار الإنجليزية . وفي النهاية سأترك مرفق يحتوي تطبيق لما تحدثنا به سابقاً . والمتابعة لأي استفسار أو توضيح Change Language.zip
  2. استخدم الدالة DCount في مصدر اي مربع نص تريد التعداد فيه . =DCount("*", "اسم_الجدول") فقط قم بتغيير اسم الجدول حسب حاجتك .
  3. بسيطة اخوي ، قم بإضافة شرط التاريخ مثل استعلامك الى استعلامي ، وأعطيني النتيجة
  4. سطر أو سطرين ، الله يسامحك 😅 اذا بالسطور تقدر تخليه سطر واحد وهو إنك تحط السطور جنب بعضها وتفصل بينهم بعلامة نقطتين : ، وإذا الفكرة بتغيير المنهج اللي انت متبعه ، فجرب هذا الكود Select Case Me.commanfaz Case "منفذ1" ShowControls True Me.txtID.Enabled = False Me.txtitems.Enabled = False Me.txtmag.Enabled = False Case "منفذ2" ShowControls True Me.txt2.Visible = True Me.txtm2.Visible = True Me.txtID.Enabled = False Me.txtitems.Enabled = False Me.txtmag.Enabled = False Case "منفذ3" ShowControls True Me.txt3.Visible = True Me.txtm3.Visible = True Me.txtID.Enabled = False Me.txtitems.Enabled = False Me.txtmag.Enabled = False Case Else ShowControls False End Select Sub ShowControls(visibility As Boolean) Me.txt1.Visible = visibility Me.txtm1.Visible = visibility Me.txt2.Visible = visibility Me.txtm2.Visible = visibility Me.txt3.Visible = visibility Me.txtm3.Visible = visibility Me.txt4.Visible = visibility Me.txtm4.Visible = visibility Me.txt5.Visible = visibility Me.txtm5.Visible = visibility Me.txt6.Visible = visibility Me.txtm6.Visible = visibility Me.txt7.Visible = visibility Me.txtm7.Visible = visibility Me.txt8.Visible = visibility Me.txtm8.Visible = visibility Me.txtmst.Visible = visibility Me.txtstrorag.Visible = visibility End Sub
  5. انتظرني غداً إن شاء الله بموضوع تغيير اللغة بطريقة جميلة وإن شاء الله تسمح الظروف بذلك 😉
  6. لعلك قمت بحذف جداول النظام المخفية في القاعدة
  7. ولا يهمك أخي الكريم @figo82eg ، في منتدانا إن شاء الله تجد الحل لأي مشكلة قد تواجهك . أهلا وسهلاً بك
  8. اخي الكريم سبب ماذا ؟ مساحة ماذا ؟؟ تحويل ماذا ؟؟
  9. تفضل أخي @salah.sarea . لديك طريقتين للنسخ الإحتياطي لقاعدة البيانات المقسمة ، وتم انشاء كود جديد للإستعادة . بيانات.zip
  10. تفضل محاولتي أخي الكريم @figo82eg . New Microsoft Access Database.accdb
  11. تم التعديل بطريقة أخرى ,, Private Sub Text26_BeforeUpdate(Cancel As Integer) Dim inputValue As String Dim validCharacters As String Dim i As Integer validCharacters = "RAFBDIQ0123456789" inputValue = Nz(Me.Text26.Value, "") For i = 1 To Len(inputValue) If InStr(validCharacters, Mid(inputValue, i, 1)) = 0 Then MsgBox "ÅÏÎÇá ÍÑæÝ ÛíÑ ÕÍíÍ", vbExclamation, "Error" Cancel = True Exit Sub End If Next i End Sub حيث Text26 اسم مربع النص في نموذجك
  12. ممكن التوضيح أكثر 🤔 وإن كنت قد فهمت من حديثك ما تصورته ، فجرب هذا الكود Private Sub YourTextbox_KeyPress(KeyAscii As Integer) ' تحقق من أن الحرف المكتوب هو أحد الأحرف "RAFBDIQ" أو إحدى الأرقام من 0 إلى 9 If Not (KeyAscii >= Asc("0") And KeyAscii <= Asc("9")) And _ Not (KeyAscii >= Asc("A") And KeyAscii <= Asc("Z")) And _ Not (KeyAscii >= Asc("a") And KeyAscii <= Asc("z")) Then ' إلغاء الحرف إذا لم يكن مسموحًا KeyAscii = 0 End If End Sub يقوم هذا الكود بمنع إدخال أي حرف غير مسموح به من قبل المستخدم ، وذلك عن طريق إلغاء الحرف إذا لم يكن أحد الأحرف "RAFBDIQ" أو إحدى الأرقام من 0 إلى 9.
  13. InStr(1, ..., "TYA") تستخدم للبحث عن تواجد السلسلة "TYA" في القيمة المحولة إلى أحرف كبيرة. إذا كانت "TYA" موجودة في النص، ستكون قيمة الدالة غير صفرية، وإذا لم تكن موجودة، ستكون القيمة صفر ارسل مرفق ، او افتح موضوع جديد ان كان على غير صلة بهذا الموضوع 😊
  14. Private Sub manner_BeforeUpdate(Cancel As Integer) ' التحقق مما إذا كانت القيمة المدخلة تحتوي على أحد الرموز المطلوبة If InStr(1, UCase(Me.manner.Value), "TYA") = 0 And InStr(1, UCase(Me.manner.Value), "LKA") = 0 Then ' عرض رسالة تحذيرية للمستخدم MsgBox "يرجى عدم نسيان كتابة الرمز Tya أو Lka", vbExclamation, "تحذير" ' إلغاء التحديث ليظل المستخدم في نفس الحقل Cancel = True End If End Sub في هذا الكود، تم استخدام UCase لتحويل النص إلى أحرف كبيرة للتحقق بغض النظر عن حالة الحروف. والتحقق من وجود "TYA" أو "LKA" في القيمة المدخلة. إذا لم يتم العثور على أي من هذين الرمزين، سيتم عرض رسالة تحذيرية وإلغاء التحديث ليظل المستخدم في نفس الحقل
  15. هل الرمز هذا شرط أن يكون في مربع النص manner ؟ جرب هذا الكود في حدث قبل التحديث Private Sub manner_BeforeUpdate(Cancel As Integer) ' التحقق مما إذا كانت القيمة المدخلة تحتوي على الرمز المطلوب If InStr(Me.manner.Value, "tya") = 0 Then ' عرض رسالة تحذيرية للمستخدم MsgBox "يرجى عدم نسيان كتابة الرمز tya", vbExclamation, "تحذير" ' إلغاء التحديث ليظل المستخدم في نفس الحقل Cancel = True End If End Sub
  16. Private Sub أمر3_Click() On Error GoTo Err_Handler ' يتم استخدام DoCmd.GoToRecord للانتقال إلى سجل جديد في النموذج الحالي DoCmd.GoToRecord , , acNewRec Exit_أمر3_Click: Exit Sub Err_Handler: ' يمكنك إضافة إجراءات للتعامل مع الأخطاء هنا، على سبيل المثال: MsgBox "حدث خطأ: " & Err.Description Resume Exit_أمر3_Click End Sub
  17. كل العذر منك أخي @سامر محمود ، ولكن صدقني لو قلتلك بسبب العمل من بعد منتصف الشهر الماضي للآن ومضغوطين بجولة سنة وتجديد بعض الأمور . لكن تبارك الله الأساتذة وبجهود أستاذنا @kkhalifa1960 أفادوا أفضل مني 😊. ولنا في القريب نشاركات ، ما تخاف 😅
  18. On Error GoTo Err تستخدم لتحديد ملف العناصر التي سيتم تنفيذها عند حدوث خطأ في التنفيذ. هذه البنية تقوم بتوجيه التنفيذ إلى علامة معينة (في هذه الحالة Err) عند حدوث خطأ. عندما يحدث خطأ، سيتم تنفيذ الكود الذي يأتي بعد العلامة المحددة (في هذه الحالة Err). هذا يسمح لك بالتعامل مع الخطأ بشكل مخصص، مثل تسجيل الخطأ، إظهار رسالة توضيحية، أو تنفيذ إجراءات إصلاح . كمثال :- Sub Example() On Error GoTo ErrHandler ' ... الكود هنا Exit Sub ' تجنب تنفيذ ErrHandler بعد الانتهاء بشكل صحيح ErrHandler: ' إجراءات للتعامل مع الخطأ هنا MsgBox "حدث خطأ: " & Err.Description End Sub هنا يتم توجيه التنفيذ إلى ErrHandler عند حدوث أي خطأ، ويمكنك تنفيذ الإجراءات اللازمة للتعامل مع الخطأ في الجزء المحدد.
  19. حتى تتوضح لي الصورة .. تريد ان تستورد جدول في قاعدة بيانات مقفلة بمفتاح Shift فقط وأن تستبدله بجدول آخر بنفس الإسم ؟ 🤔
  20. تباارك الله ، ما شااء الله ، عمل جميل وجهود رائعة منكم معلمنا الفاضل @ابوخليل و أستاذنا الحبيب @kkhalifa1960 . جزاكم الله خيرا على هذا الطرح المتكامل 🥰
×
×
  • اضف...

Important Information