بحث مخصص من جوجل فى أوفيسنا
![]()
Custom Search
|
-
Posts
7034 -
تاريخ الانضمام
-
Days Won
203
نوع المحتوي
المنتدى
مكتبة الموقع
معرض الصور
المدونات
الوسائط المتعددة
كل منشورات العضو ابو جودي
-
pdf عندى زرار عايزاه يعمل تصدير ريبورت الى
ابو جودي replied to safaa salem5's topic in قسم الأكسيس Access
طيب وحتى لا يقال اننى ناقل عن الاستاذ @ناقل لن اقوم بتعديل الاكواد انا معقد و افضل العمل دائما وفق مرونة واحترافية بقدر الامكان وفقا لذلك هذه طريقتى اولا عمل موديول باسم : basExportReportToPDF الاكواد فى الموديول Option Compare Database Option Explicit ' Function to create directories if they do not exist Public Function CreateDirectoryIfNotExists(ByVal path As String) If Dir(path, vbDirectory) = "" Then MkDir path End If End Function ' Function to export report to PDF Public Function ExportReportToPDF(ByVal patientID As String, ByVal patientName As String, ByVal visitCode As String, ByVal reportName As String, ByVal outputFileName As String) Dim baseFolderPath As String Dim resultsFolderPath As String Dim patientFolderPath As String Dim visitFolderPath As String Dim outputFilePath As String ' Get the base folder path of the current database baseFolderPath = CurrentProject.path ' Define the path for the results folder resultsFolderPath = baseFolderPath & "\results" ' Create the results folder if it does not exist CreateDirectoryIfNotExists resultsFolderPath ' Define the path for the patient folder patientFolderPath = resultsFolderPath & "\" & patientID & "_" & patientName ' Create the patient folder if it does not exist CreateDirectoryIfNotExists patientFolderPath ' Define the path for the visit folder visitFolderPath = patientFolderPath & "\" & visitCode ' Create the visit folder if it does not exist CreateDirectoryIfNotExists visitFolderPath ' Define the output file path outputFilePath = visitFolderPath & "\" & outputFileName & ".pdf" ' Export the report to PDF DoCmd.OutputTo acOutputReport, reportName, acFormatPDF, outputFilePath ' Notify the user MsgBox "Report has been exported to: " & outputFilePath, vbInformation End Function ثانيا زر امر فى النموذج على ان يكون الكود داخل زر الامر كالاتى Dim patientID As String Dim patientName As String Dim visitCode As String Dim reportName As String Dim outputFileName As String ' Set the values for the parameters patientID = "12345" patientName = "Moh3sam" visitCode = "2024-06-11" reportName = "rptTest" outputFileName = "YourOutputFileName" ' Call the function to export the report to PDF ExportReportToPDF patientID, patientName, visitCode, reportName, outputFileName وطبعا تحياتى وكل تقدير لاستاذى الجليل ومعلمى القدير الاستاذ @ناقل قطعا بدأت مشاركتى بمداعبة استاذى القدير . وهذه قاعدة البيانات بالتطبيق export report to PDF.accdb -
pdf عندى زرار عايزاه يعمل تصدير ريبورت الى
ابو جودي replied to safaa salem5's topic in قسم الأكسيس Access
ممكن نفكر بصوت عالى انا موافق بعمل الاتى فى المجلد الاساسى الحالى لقاعدة البيانات يتم عمل مجلد باسم results وبداخل المجلد results يتم عمل مجلد ID لكود المريض مع اسم المريض وبداخل مجلد ID يتم عمل مجلد بكود الزيارة او بالتاريخ لسهولة تتبع التقارير مستقبلا من المجلدات حتى وبدون فتح قاعدة البيانات ايه راي حضرتك يا دكتور ؟؟ واعتقد اسم التقرير فقط مجموعة التحاليل يكون افضل -
نصيحتى اليك لا تسعى ان يقدم احد اليكم الحل ولكن اسعى جااهدا لتعلم كيف يتم الحل لا تطلب سمكة بل اطلب ان تتعلم كيف تصطادها بنفسك
-
انظر الى القاعدة الان هذا البناء الافضل اكمل باقى الجداول على هذا المنوال ومن ثم نكمل المراد خطوة بعد خطوة برنامج الحد الادنى (V. 2) .accdb
-
اليك النصائح الاتية وهى مهمه طالما انت فى البدايات 1- اختر للجداول دائما وباقى العناصر والكائنات اسماء مختصرة تدل على وظيفتها 2-استعمل اختصارات البادئات المتعارف عليها قدر الامكان مثل Table=tbl Form=frm Query=qry Module=bas وسوف ارفق لك ملف كنت حاولت جاهدا تجميعه قبل فترة هذه الاختصارات اثناء التعامل مع الاكواد تجعلك على دراية بما تتعامل معه بسهولة وتجعل اى مطور نظم ان كنتم تعملون فى مجموعة عمل سهولة فهم الية الاكواد وتتبع المشروع ومعك انت شخصيا انت الان وقت التصميم تكون على دراية بكل صغيرة وكبيرة ولكن بعد فترة سوف تنسى كل شئ هذه البادئات تجعلك دائما على دراية مع ماذا تتعامل من العناصر والكائنات المختلفة فتسهل عليك مراجعة وتتبع وتذكر الاكواد والية العمل 3- دائما لا تبخل على نفسك فى استخدام الجداول المساعدة التى تغنيك عن فتح التصميم مستقبلا لاضافة شئ او حذف وتعديل شئ على سبيل المثال وليس الحصر الاولى بك فى قاعدتك الحالية عمل جدول للوظائف بدلا من كتابة الوظائف فى حقل واحد بهذه الطريقة مستقبلا لو اردت تغير اسم وظيفه او اضافتها لابد لك من الدخول الى التصميم وناهيك عن المشاكل التى لا حصر لها لو اردت تغير مسمى مثلا وانت تعتمد فى الاكواد على هذا المسمى دعنى اعيد بناء قاعدتك بالشكل الامثل من وجهة نظرى المتواضعة وانت اكمل باقى خطاك فى هذا الدرب بناء على ما اقدمه اليكم اولا اليك الاختصارات المتعارف عليها بين مطورى النظم والمبرمجين فى ملف نصى prefix.zip
-
ممكن تجرب الكود ده Dim ImagePath As String s1 = Str(Me![رقم الجلوس]) s1 = Right(s1, Len(s1) - 1) ImagePath = "D:\صور\" & s1 & ".jpg" On Error Resume Next Me![Image_Std].Picture = ImagePath If Err.Number <> 0 Then MsgBox "لا توجد صورة مطابقة لرقم الجلوس", vbExclamation, "خطأ" Err.Clear End If On Error GoTo 0 End Sub
-
هل تريد مجرد الاجابة للوضع الحالى لقاعدتك ام تريد النصيحة لعمل ذلك بالشكل الصحيح و الاحترافى كما ينبغى ان يكون لاضفاء المرونة والاحترافية فى التعامل ومعالجة البيانات ؟! لن اضع الاجابة قبل ردكم
-
ومشاركة مع اخى الحبيب الأستاذ @Foksh ممكن أيضا مع الحدث "On Key Press" Private Sub Combo4_KeyPress(KeyAscii As Integer) KeyAscii = 0 End Sub وهذا افضل للمصمم ومطور النظم لان ما تفضل بها اخى الحبيب يمنع الدخول الى محرر الاكواد اثناء فتح النموذج من خلال - الضغط على مفتاحى Alt + F11 من لوحة المفاتيح - او من خلال الضغط علىم فتاحى Ctrl +G من لوحة المفاتيح واحيانا نحتاج الى الدخول الى محرر الاكواد بدون اغلاق النموذج لانه احيانا نستخدم امر الطباعة Debug.Print فى الاكواد لتتبع الاكواد وسير الكود لطباعة النتائج فى نافذة Immediate مش قولت لك هافوق لك يا حاج @Foksh كده انا افضل اجابة بالعند فيك
-
زر لحفظ بيانات النموذج ولا يمكن التعديل عليه وزر للتعديل عليه
ابو جودي replied to الحلبي's topic in قسم الأكسيس Access
انا اسف لم انتبه وفقدت التركيز تم التعديل حفظ وتعديل (4).accdb -
قائمة ازرار ديناميكية شخابيط : طى وتوسيع قائمة الازرار
ابو جودي replied to ابو جودي's topic in قسم الأكسيس Access
-
زر لحفظ بيانات النموذج ولا يمكن التعديل عليه وزر للتعديل عليه
ابو جودي replied to الحلبي's topic in قسم الأكسيس Access
لسه دورك جاى با قمر لما افوق بس لبرنامج الصلوات انا الفترة اللى فاتت مكنتش فاضى لك ولا عارف اتابع الموضوع من بدايته ولسه والله مضغوط شويه بين الشغل و والدتى بس صدقنى حفوق لك انت كمان -
ورشة عمل للمرحلة الثانية للفاتورة الإلكترونية (مهم للغاية)
ابو جودي replied to سلمان الشهراني's topic in قسم الأكسيس Access
يا جماعة الخير ممكن نعمل زى الموضوع فى المرحلة الاولى نمشى خطوة بعد خطوة لانى مش فاهم عنه اى شئ مش قادر اساعد حددوا النقاط المطلوب الوضول اليها اجمالا بإيجاز وبعدين نستعين بالله ونحاول نحقق كل نقطة على حدة -
زر لحفظ بيانات النموذج ولا يمكن التعديل عليه وزر للتعديل عليه
ابو جودي replied to الحلبي's topic in قسم الأكسيس Access
طيب لو فاكر يا دكتور انا قلت وبعد ذلك سوف اخبركم برأى فى الاخر وهذا هو رأى عمليا فى المرفق الاتى نموذج غير منضم وحقول غير منضمة ايون زيمبئولك كده فعلا نموذج غير منضم اصلا ومن خلاله نستعرض البيانات ونتحرك بين السجلات ونعدل البيانات ونحذف البيانات ونضيف سجل جديد مش انت عاوز تذاكر كلمة مرور التعديل : 123 كلمة مرور الحذف : 000 حفظ وتعديل (3).accdb -
قائمة ازرار ديناميكية شخابيط : طى وتوسيع قائمة الازرار
ابو جودي replied to ابو جودي's topic in قسم الأكسيس Access
ما هو المشكلة مش انا اللى زعلان ده واحد صاحبى وحبيبى هو اللى زعلان وبيقولى انت في غنى عن هذي السلسلة الطويلة من الأوامر .. مع انى متأكد ان المرفق طار ع المكتبه العامرة فممكن بكود قصير يتعرف على التاج وأيضا تعيد ترتيب مسميات الأزرار بشكل متسلسل ممكن تحقق النتيجة اللي أنت عاوزها اى خدمه سلمكم الله من كل شر ولا حرمنا الله منكم جزاكم الله خيرا -
دا انا هادوس بالجامد
-
يا استاذ @Foksh من النظرة الأولى واعتذر لان اليوم انا عند والدتى كانت نظرة سريعة العمل ماشاء الله تبارك الرحمن تسلم ايدك ولكن هل تسمح بالمراجعة والتعديلات على الاكواد
-
تمام يا استاذ @Foksh تم الان اضافة المرفق النهائى الى رأس الموضوع
-
والشئ بالشئ يذكر يا استاذ @Foksh انظر الى هذه المضوع لانه مهم جدا جدا ان اردت تقديم اى قاعدة بيانات مشفرة فيما بعد
-
يلا ارفع وهات بسرعه انت بطئ كده ليه
-
انت بتستعماني يا هرم لا وبتقول لى صديقى كمان النسخة الأخيرة Salawat 2024.accde والرابط ده بتاع الصوت يا عسل اسأل الله تعالى الرحمة والمغفرة لكم ولوالديكم ولأبى وأمى ولكل المسلمين طبعا انا بهزر معاك يا عسل بلاش شغل التلت ورقات وهات المرفق المفتوح بالتى هى احسن
-
زر لحفظ بيانات النموذج ولا يمكن التعديل عليه وزر للتعديل عليه
ابو جودي replied to الحلبي's topic in قسم الأكسيس Access
على سبيل المثال يا دكتور @الحلبي فى هذا الموضوع شوف المرفق الأول لا يعتمد على الوحدات نمطية بينما قمت بعمل المرفق الثانى والذى يعتمد على وحدات نمطية انظر الفرق فى الاكواد داخل النموذج وكيفية استدعاء الوظائف بسهولة وانظر الى روعة لو اردت تنفيذ نقس الوظيفة فى اكثر من نموذج بدلا من اعادة نسخ الاكواد لكل نموذج فقط سطر يستدعى الدوال ولو لمليون نموذج -
زر لحفظ بيانات النموذج ولا يمكن التعديل عليه وزر للتعديل عليه
ابو جودي replied to الحلبي's topic in قسم الأكسيس Access
اولا اذا حضر الماء بطل التيمم من انا ليتم ذكر اسمى مع وبجوار اساتذتى العظماء الذين اتعلم وانهل من بحور علمهم واهيم فى ربوع افكارهم بارك الله لنا فيهم ورزقهم البركة فى العمر والعلم والعمل والاهل والولد انا عن نفسي افضل التعب في بلورة الأفكار حتى وان اخذت معي وقت وجهد كبيرين لانه لو تلاحظ احاول جاهدا وابدا ان تكون حلولى فى دوال و وظائف عامة حتى وان كان الكود معقد او كبير المهم ان التعب لن يكون الا فى المرة الاولى تخيل انه لا اريد حذف اى سجل او طباعة او فتح اى تقرير مهم الا بكلمة مرور فى كل مرة اكتب الاكود كلما احتجت عمل ذلك بينما الان فقط انقل نموذج كلمة المرور والوحدة النمطية وانفذ كل ما اريد بسطر واحد فى مليون تطبيق ومليون نموذج تحت أمر حضرتك طبعا تأمر وتتدلل -
ازاى اتحكم فى هوامش التقرير عن طريق وضع قيم فى فورم الاعدادات
ابو جودي replied to safaa salem5's topic in قسم الأكسيس Access
ما شاء الله بجد يا باش مهندسة @hanan_ms روعة تسلم ايدك وأفكار قمة في الابداع -
ازاى اتحكم فى هوامش التقرير عن طريق وضع قيم فى فورم الاعدادات
ابو جودي replied to safaa salem5's topic in قسم الأكسيس Access
با نهار ابيض وجالك قلب تعدلى مرفقى بسهولة كده انتى بتهزرى يا باش مهندسة لا وبتقوليها فى وشى كمان تسلم ايدك بجد .. طبعا بهزر كل نرفقاتى ملك لاخوانى واخواتى الا شخص واحد الاستاذ @Moosak صاحب المكتبة العامرة جزاكم الله خيـــــــــرا وشرف لى يا باش مهندسة مشاركة حضرتك بجد والله -
زر لحفظ بيانات النموذج ولا يمكن التعديل عليه وزر للتعديل عليه
ابو جودي replied to الحلبي's topic in قسم الأكسيس Access
على بركة الله وبسم الله ولكن انا سوف اشرح ما تم عمله طبقا للمرفق وبعد ذلك سوف اخبركم برأى فى الاخر اولا الموديول باسم : basFormControlStatus الاكواد بداخلة كالتالى Option Compare Database Option Explicit ' Enum: RecordStatusEnum ' Description: Defines possible control statuses for record status. Public Enum RecordStatusEnum LockedStatus NewRecordStatus EditRecordStatus CurrentRecordStatus SaveRecordStatus End Enum ' Sub: SetRecordStatus ' Description: Sets the status of records in a form. Public Sub SetRecordStatus(frm As Form, status As RecordStatusEnum) ' Disable all editable controls by default SetControlsEnabled frm, False ' Enable or disable controls based on the specified status Select Case status Case NewRecordStatus ' Enable editable controls and move to a new record if applicable SetControlsEnabled frm, True If frm.Recordset.RecordCount > 0 Then DoCmd.GoToRecord , , acNewRec End If Case CurrentRecordStatus ' Enable editable controls if there are no records or it's a new record If frm.Recordset.RecordCount = 0 Or frm.NewRecord Then SetControlsEnabled frm, True Else DoCmd.RunCommand acCmdSaveRecord End If Case EditRecordStatus ' Enable editable controls for editing SetControlsEnabled frm, True Case SaveRecordStatus ' Save the record and disable editable controls DoCmd.RunCommand acCmdSaveRecord End Select End Sub ' Function: SetControlsEnabled ' Description: Enables or disables all editable controls in the form. Private Sub SetControlsEnabled(frm As Form, isEnabled As Boolean) Dim control As control For Each control In frm.Controls If IsEditableControl(control) Then control.Enabled = isEnabled On Error Resume Next ' Ignore errors if control doesn't support Locked property If isEnabled Then control.Locked = False Else control.Locked = True End If On Error GoTo 0 ' Reset error handling End If Next control End Sub ' Function: IsEditableControl ' Description: Determines if a control is editable. Private Function IsEditableControl(ctrl As control) As Boolean Select Case ctrl.ControlType Case acTextBox, acComboBox, acCheckBox, acOptionGroup, acOptionButton, acToggleButton IsEditableControl = True Case Else IsEditableControl = False End Select End Function Option Compare Database: تحدد كيفية مقارنة السلاسل النصية. في هذا الحالة، المقارنة ستكون باستخدام إعدادات قاعدة البيانات Option Explicit: تفرض التصريح الصريح عن المتغيرات قبل استخدامها، مما يساعد على تجنب الأخطاء النحوية في الكود تعريف التعداد (Enum) RecordStatusEnum: تعداد يمثل الحالات المختلفة لسجلات النموذج الحالات هي: LockedStatus: السجل مقفل ولا يمكن تحريره NewRecordStatus: إضافة سجل جديد EditRecordStatus: تعديل سجل موجود CurrentRecordStatus: حالة السجل الحالي، والتي قد تكون جديدة أو قائمة SaveRecordStatus: حفظ السجل ببساطة وبدون تعقيد تمثل الاختيارات المتاحة للمصمم اثناء استدعاء الدالة وكأنها مربع تحرير وسرد الدالة الاولى إعداد حالة السجل (SetRecordStatus) SetRecordStatus: دالة لضبط حالة السجلات في النموذج تقوم بتعطيل جميع عناصر التحكم القابلة للتحرير افتراضيا ثم تمكن أو تعطل عناصر التحكم بناء على الحالة المحددة وفى رأس الدالة يتم التعامل مع براميترات من خلال المتغيرات الاتية frm As Form : لتعريف الدالة عند استدعائها على النموذج الذى سوق يتم التعامل من خلاله status As RecordStatusEnum حالة السجلات بناء على الحالات التى تم كتابتها فى التعداد Enum تم استدعاء دالة فرعية نأتى اليها لاحقا SetControlsEnabled frm, False يتم التعامل مع الحلات كما نريد من خلال الاكواد حسب الرغبة وهنا كانت الرغبة فى عمل الاتى لكل حالة من خلال Select Case NewRecordStatus: تمكين عناصر التحكم القابلة للتحرير الانتقال إلى سجل جديد إذا كانت هناك سجلات موجودة CurrentRecordStatus: تمكين عناصر التحكم إذا لم يكن هناك سجلات أو إذا كان السجل جديدا أو حفظ السجل إذا كان موجودا EditRecordStatus: تمكين عناصر التحكم لتحرير السجل SaveRecordStatus: حفظ السجل وتعطيل عناصر التحكم القابلة للتحرير ---------------------------------------- الان أتى للدالة SetControlsEnabled والتى تم استدعائها فى الدالة السابقة وظيفتها تمكين أو تعطيل جميع عناصر التحكم القابلة للتحرير في النموذج فى هذه الدالة تم عمل حلقة تكرارية للدوران على العناصر لتأمينها ان لم تكن مأمنه ونلاحظ انها تعتمد على دالة اخرى IsEditableControl حيث تقوم بالدوران على كل عنصر تحكم في النموذج وإذا كان عنصر التحكم قابلا للتحرير (بناء على نتيجة دالة IsEditableControl) فإنه يتم تمكينه أو تعطيله حسب الحالة المحددة ---------------------------------------- وهنا ننتقل الى دالة تحديد عناصر التحكم القابلة للتحرير (IsEditableControl) وهى دالة تقوم بتحديد ما إذا كان عنصر التحكم قابلا للتحرير بناء على نوعه فأنها تعيد القيمة True إذا كان نوع عنصر التحكم هو TextBox أو ComboBox أو CheckBox أو OptionGroup أو OptionButton أو ToggleButton وتعيد False لبقية الأنواع الأخرى طبعا تم اختيار العناصر فقط TextBox أو ComboBox أو CheckBox أو OptionGroup أو OptionButton أو ToggleButton دون غيرها لانها هى العناصر المستخدمة فى ادخال البيانات افتراضيا ويمكن للمصمم طبعا تغير ما يريرد وفق اهوائه الان طريقة الاستدعاء SetRecordStatus ثم me لتعريفها على النموذج الحالى , ثم اختيار الحالة وهنا تظهر روعة التعداد (Enum) حيث ان القيم الموجودة فيه تظهر ليتمكن المبرمج بسهولة من اختيار الحالة ------------- ومن تلقاء نفسي قمت باضافة الوحدة النمطية باسم : basPasswordPrompt واكواد هذه الوحدة Option Compare Database Option Explicit Public strPasswordPrompt As String Public boolPasswordPrompt As Boolean ' Enum for different password statuses Public Enum EnumPassword PasswordNull PasswordIncorrect PasswordCancelled Confirmation UnsupportedAction End Enum ' Enum for different actions that can be executed Public Enum RequiredAction OpenForm OpenQuery OpenReport PrintReport DeleteRecords RunSQL CallFunction CallFunctionByForm ' New case for calling functions from the current form End Enum ' Subroutine to execute actions based on input parameters ' Parameters: ' frm - Reference to the current form ' actionType - Type of action to be executed ' itemName - Name of the item (form, query, report, function) to be executed ' CORRECT_PASSWORD - The correct password to validate (optional) Public Sub ExecuteAction(ByVal actionType As RequiredAction, ByVal itemName As String, Optional ByVal CORRECT_PASSWORD As String = "", Optional ByVal frm As Access.Form) ' Loop until password prompt is resolved Do ' Open password prompt form DoCmd.OpenForm "frmPasswordPrompt", , , , , acDialog ' Check if password prompt is entered ' Determine action based on password prompt Select Case True Case boolPasswordPrompt Select Case True Case Nz(strPasswordPrompt, "") = "" MsgPasswordPrompt (PasswordNull) Case strPasswordPrompt <> CORRECT_PASSWORD MsgPasswordPrompt (PasswordIncorrect) Case Else ' Perform selected action based on the action type Select Case actionType Case RequiredAction.OpenForm DoCmd.OpenForm itemName Case RequiredAction.OpenQuery DoCmd.OpenQuery itemName Case RequiredAction.OpenReport DoCmd.OpenReport itemName, acViewNormal Case RequiredAction.PrintReport DoCmd.OpenReport itemName, acViewNormal ' Open report in preview mode DoCmd.PrintOut ' Print report Case RequiredAction.DeleteRecords DoCmd.SetWarnings False DoCmd.RunSQL "DELETE * FROM " & itemName DoCmd.SetWarnings True Case RequiredAction.RunSQL DoCmd.SetWarnings False DoCmd.RunSQL itemName DoCmd.SetWarnings True Case RequiredAction.CallFunction ' Call the function specified in itemName using Application.Run Application.Run itemName Case RequiredAction.CallFunctionByForm ' Call the function specified in itemName using CallByName CallByName frm, itemName, VbMethod Case Else MsgPasswordPrompt (UnsupportedAction) End Select Exit Do End Select Case Else MsgPasswordPrompt (PasswordCancelled) Exit Do End Select Loop Exit Sub ErrorHandler: ' Display error message if any MsgBox "Error: " & Err.Number & vbCrLf & "Description: " & Err.Description, vbCritical Debug.Print Err.Number & vbCrLf & "Description: " & Err.Description On Error GoTo 0 End Sub '' Function to show a message based on password prompt status '' Parameters: '' status - The password status to display the message for 'Public Sub MsgPasswordPrompt(status As EnumPassword) ' Select Case status ' Case PasswordNull ' MsgBox "Password cannot be empty.", vbExclamation ' Case PasswordIncorrect ' MsgBox "Incorrect password.", vbExclamation ' Case PasswordCancelled ' MsgBox "Password entry cancelled.", vbInformation ' Case Confirmation ' MsgBox "Password confirmed.", vbInformation ' Case UnsupportedAction ' MsgBox "Unsupported action type.", vbExclamation ' End Select 'End Sub ' Function to display password prompt messages based on status Sub MsgPasswordPrompt(Optional ByVal ConfirmationStatus As EnumPassword = Confirmation) ' Password prompt messages Dim MSG_ENTER_PASSWORD As String ' "Please enter your password." MSG_ENTER_PASSWORD = ChrW("1575") & ChrW("1604") & ChrW("1585") & ChrW("1580") & ChrW("1575") & ChrW("1569") & ChrW("32") & ChrW("1573") & ChrW("1583") & ChrW("1582") & ChrW("1575") & ChrW("1604") & ChrW("32") & ChrW("1603") & ChrW("1604") & ChrW("1605") & ChrW("1577") & ChrW("32") & ChrW("1575") & ChrW("1604") & ChrW("1587") & ChrW("1585") & ChrW("32") & ChrW("1604") & ChrW("1604") & ChrW("1605") & ChrW("1578") & ChrW("1575") & ChrW("1576") & ChrW("1593") & ChrW("1577") Dim MSG_INCORRECT_PASSWORD As String ' "Incorrect password. Please try again." MSG_INCORRECT_PASSWORD = ChrW("1603") & ChrW("1604") & ChrW("1605") & ChrW("1577") & ChrW("32") & ChrW("1587") & ChrW("1585") & ChrW("32") & ChrW("1582") & ChrW("1575") & ChrW("1591") & ChrW("1574") & ChrW("1577") & ChrW("46") & ChrW("32") & ChrW("1578") & ChrW("1605") & ChrW("32") & ChrW("1571") & ChrW("1604") & ChrW("1594") & ChrW("1575") & ChrW("1569") & ChrW("32") & ChrW("1575") & ChrW("1604") & ChrW("1573") & ChrW("1580") & ChrW("1585") & ChrW("1575") & ChrW("1569") Dim MSG_OPERATION_CANCELED As String ' "Operation canceled" MSG_OPERATION_CANCELED = ChrW("1578") & ChrW("1605") & ChrW("32") & ChrW("1573") & ChrW("1604") & ChrW("1594") & ChrW("1575") & ChrW("1569") & ChrW("32") & ChrW("1575") & ChrW("1604") & ChrW("1573") & ChrW("1580") & ChrW("1585") & ChrW("1575") & ChrW("1569") Dim UNSUPPORTED_ACTION As String ' "Unsupported action type" UNSUPPORTED_ACTION = ChrW("1573") & ChrW("1580") & ChrW("1585") & ChrW("1575") & ChrW("1569") & ChrW("32") & ChrW("1594") & ChrW("1610") & ChrW("1585") & ChrW("32") & ChrW("1605") & ChrW("1583") & ChrW("1593") & ChrW("1608") & ChrW("1605") ' "Password Prompt" Dim MSG_TITLE As String MSG_TITLE = ChrW("1605") & ChrW("1591") & ChrW("1575") & ChrW("1604") & ChrW("1576") & ChrW("1577") & ChrW("32") & ChrW("1603") & ChrW("1604") & ChrW("1605") & ChrW("1577") & ChrW("32") & ChrW("1575") & ChrW("1604") & ChrW("1587") & ChrW("1585") ' Display appropriate message based on status Select Case Nz(ConfirmationStatus, "") Case Is = "": MsgBox MSG_ENTER_PASSWORD, vbExclamation, MSG_TITLE Case EnumPassword.PasswordNull: MsgBox MSG_ENTER_PASSWORD, vbMsgBoxRight + vbExclamation, MSG_TITLE Case EnumPassword.PasswordIncorrect: MsgBox MSG_INCORRECT_PASSWORD, vbMsgBoxRight + vbCritical, MSG_TITLE Case EnumPassword.PasswordCancelled: MsgBox MSG_OPERATION_CANCELED, vbMsgBoxRight, MSG_TITLE Case EnumPassword.UnsupportedAction: MsgBox UNSUPPORTED_ACTION, vbMsgBoxRight + vbExclamation, MSG_TITLE End Select End Sub تعريف المتغ رات العامة strPasswordPrompt: سلسلة نصية لتخزين كلمة المرور المدخلة boolPasswordPrompt: متغير منطقي (Boolean) لتحديد ما إذا تم إدخال كلمة المرور أم لا تعريف التعدادات (Enums) اولا : Enum Password: تعداد يمثل الحالات المختلفة لكلمة المرور PasswordNull: كلمة المرور غير مدخلة PasswordIncorrect: كلمة المرور غير صحيحة PasswordCancelled: تم إلغاء إدخال كلمة المرور Confirmation: تأكيد كلمة المرور UnsupportedAction: الإجراء غير مدعوم ثانيا : Enum RequiredAction: تعداد يمثل الإجراءات المختلفة التي يمكن تنفيذها OpenForm: فتح نموذج OpenQuery: فتح استعلام OpenReport: فتح تقرير PrintReport: طباعة تقرير DeleteRecords: حذف سجلات RunSQL: تنفيذ استعلام SQL CallFunction: استدعاء دالة عامة من موديول ( وحدة نمطية ) CallFunctionByForm: استدعاء دالة من النموذج الحالي الدالة الرئيسية تنفيذ الإجراءا (ExecuteAction) هى دالة تقوم بتنفيذ الإجراءات بناء على نوع الإجراء طبقا للتعداد ( Enum RequiredAction ) المدخل وكلمة المرور الصحيحة تقوم بفتح نموذج إدخال كلمة المرور (frmPasswordPrompt) بناء على إدخال كلمة المرور يتم التحقق من كلمة المرور المدخلة طبقا للتعداد ( Enum EnumPassword ) إذا كانت الكلمة فارغة تعرض رسالة بأن كلمة المرور غير مدخلة إذا كانت الكلمة غير صحيحة تعرض رسالة بأن كلمة المرور غير صحيحة إذا كانت الكلمة صحيحة يتم تنفيذ الإجراء المحدد بناء على نوعه في حالة أي خطأ تعرض رسالة خطأ نلاخظ انه تم استخدام وظيفية الاختيار Optional ByVal CORRECT_PASSWORD As String = "" فى راس الدالة وذلك حتى لا يتم استخدام كلمة مرور واحدة ووحيدة وثابته بذلك يكون هناك مرونة فى استخدام كلمات مرور مختلفة والاستدعاء تتم بالطريقة التالية : 1. فتح نموذج: ExecuteAction RequiredAction.OpenForm, "FormName", "YourPassword" 2. فتح استعلام: ExecuteAction RequiredAction.OpenQuery, "QueryName", "YourPassword" 3. فتح تقرير: ExecuteAction RequiredAction.OpenReport, "ReportName", "YourPassword" 4. طباعة تقرير: ExecuteAction RequiredAction.PrintReport, "ReportName", "YourPassword" 5. حذف سجلات: ExecuteAction RequiredAction.DeleteRecords, "TableName", "YourPassword" 6. تنفيذ استعلام SQL: ExecuteAction RequiredAction.RunSQL, "SQLStatement", "YourPassword" 7. استدعاء دالة عامة من وحدة نمطية: استبدل "FunctionName" باسم الدالة التي تريد استدعاءها ExecuteAction RequiredAction.CallFunction, "FunctionName", "YourPassword" 8. استدعاء دالة او حدث من النموذج الحالي: استبدل "FunctionNameInForm" باسم الدالة التي تريد استدعاءها ExecuteAction RequiredAction.CallFunctionByForm, "FunctionNameInForm", "YourPassword", Me وطبعا مع جميع ما سبق استبدل "YourPassword" بكلمة المرور التى تريد ممكن مثلا تستدعى الدالة لاكثر من نمورذج بالشكل التالى ExecuteAction RequiredAction.OpenForm, "frmA", "123" ExecuteAction RequiredAction.OpenForm, "frmB", "000" ExecuteAction RequiredAction.OpenForm, "frmC", "789" من خلال دالة واحدة تستطيع استكمال اجراء من خلال كلمات مرور مختلفة وليس كلمة واحدة مثل قتح اكثر من نموذج وكل واحد يحتاج الى كلمة مرور غير كلمة المرور المستخدمه مع غيره ملحوظة ثغنونه اثناء الشرح قمت بتعديل دالة كلمة المرور