-
Posts
3676 -
تاريخ الانضمام
-
تاريخ اخر زياره
-
Days Won
149
نوع المحتوي
المنتدى
مكتبة الموقع
معرض الصور
المدونات
الوسائط المتعددة
كل منشورات العضو Foksh
-
طلب توقف الاستفادة من الخدمة .. مؤقت أي محدد بمدة .. ومفتوح بلا تحديد
Foksh replied to ابوخليل's topic in قسم الأكسيس Access
أهلاً وسهلاً بشيخنا الجليل و والدنا الحبيب .. لدي في أحد مشاريعي فكرة تشابه ما تطلبه ، سأقوم بفصلها عن المشروع وأزودك بفكرتي وطريقتي التي استخدمتها لأحد مراكز اللياقة البدنية مؤخراً .. -
هي فقط أول مرة يجب ان تتأكد منها في هذا الإصدار ، ولكن بناءً على الأفكار الرائعة من قبل معلمينا ومهندسينا فأعتقد أنها قابلة للتطوير والتوسيع ان شاء الله . هذه الرسالة تستطيع الغاء ظهورها من داخل المديول . وموضوع اختصار الكود ، تستطيع استخدام كود معلمنا وشيخنا الجليل ابو خليل وجعلهم في حدث عند الفتح والإغلاق لنموذج محدد . مع العلم أن الكود قابل للتوسع وقد يكون أكبر من هذا الحالي
-
معلمنا يسعدني الحديث حول هذه النقطة .. فكرتي كانت كالآتي ، الآن عند حفظ وتشفير قاعدة البيانات الى ACCDE كمثال ، فلا اعتقد انه من السهل التلاعب بالجدول هذا تحديداً ، إذا كان المبرمج قد قام بإلغاء مفتاح الشيفت !! لذا كان همه ليس بالكبير للقلق حوله . هذا كلام جميل ، ولم يخطر لي ( يبدو أنني كنت جداً على عجالة من أمري ) ، وأكيد نعم، يمكن استخدام متغير رقمي بدلاً من الاعتماد على حقل في جدول كما تم الأمر زهز اقتراح جميل . اهلا مهندسنا الغالي ، بارك الله بك فعلاً في فكرتي لم أتم التوسع بها لهذا الغرض ، ولكنه قد يكون ممكناً في تطويرات وتحديثات قادمة
-
تم انشاء موضوع جديد ، تجده هنا
-
السلام عليكم ورحمة الله وبركاته ، أخواني وأساتذتي ومعلمينا ( دون استثناء ) قمت بتنفيذ فكرة تشفير السجلات في الجداول ، والذي تهدف إلى حماية البيانات من المتطفلين عند محاولتهم استيراد بيانات الجداول . والفكرة تم تطبيقها وإكمالها خلال طرح مشاركة معلمي الفاضل @ابوخليل في رده على أخونا @الحلبي في مشاركة في موضوع سابق . ولكني هنا اعتمدت على الجدول ( EncryptionStatus ) يحتوي حقل واحد ( Status ) من نوع Yes / No لمعرفة حالة التشفير عند تشغيل التطبيق .. ⭐ البرنامج يهدف إلى تنفيذ عملية تشفير و فك تشفير على كافة جداول قاعدة البيانات باستخدام خوارزمية XOR . وتحتوي الأداة على عدة دوال و وظائف تم تقسيمها وتوزيعها بشكل منفصل لتسهيل فهم وصيانة وتعديل الكود حسب الرغبة والحاجة . وبشكل مختصر سأذكر بعض وظائف هذه الدوال تالياً ، ثم ننتقل الى الكود لاحقاً :- الدالة EncryptDecrypt :- هذه الدالة الرئيسية التي تعمل على تشفير أو الغاء التشفير ؛ حيث تستخدم مفتاح التشفير ( المحدد في strKey ) لتطبيق عملية XOR بين البيانات والنص المشفر . الدالة GetAllTables :- هذه الدالة تقوم بإرجاع قائمة بأسماء كل الجداول في قاعدة البيانات الحالية ( طبعاً باستثناء جداول النظام ) . الدالة CheckEncryptionStatus :- هذه الدالة تتحقق من حالة التشفير ، عن طريق التحقق من قيمة الحقل Status في جدول EncryptionStatus . بحيث إذا كانت قيمة الحقل = True ، فإن قاعدة البيانات تكون مشفرة . الدالة EncryptAllTablesIndependently : - تم إضافتها لاستدعائها عند الخلل ( إجراء إحترازي ) .... والعديد من الدوال . كود المديول :- Option Compare Database Public Const EnCodeKey As String = "Officna2024" Public Function EncryptDecrypt(strData As String, strKey As String) As String Dim i As Integer Dim strResult As String Dim keyLen As Integer Dim keyValue As Integer strResult = "" If Len(strKey) = 0 Then MsgBox "مفتاح التشفير غير صحيح", vbCritical, "" Exit Function End If keyLen = Len(strKey) For i = 1 To Len(strData) keyValue = Asc(Mid(strKey, ((i - 1) Mod keyLen) + 1)) strResult = strResult & Chr(Asc(Mid(strData, i, 1)) Xor keyValue) Next i EncryptDecrypt = strResult End Function Public Function GetAllTables() As Collection Dim db As DAO.Database Dim tblDef As DAO.TableDef Dim tblNames As New Collection Set db = CurrentDb For Each tblDef In db.TableDefs If Left(tblDef.Name, 4) <> "MSys" Then tblNames.Add tblDef.Name End If Next tblDef Set GetAllTables = tblNames End Function Public Function CheckEncryptionStatus() As Boolean On Error GoTo ErrorHandler Dim db As DAO.Database Dim rs As DAO.Recordset Dim status As Boolean Set db = CurrentDb Set rs = db.OpenRecordset("EncryptionStatus", dbOpenDynaset) If Not (rs.EOF And rs.BOF) Then rs.MoveFirst status = rs!status Else status = False End If rs.Close Set rs = Nothing Set db = Nothing CheckEncryptionStatus = status Exit Function ErrorHandler: MsgBox "لا يمكنك استخدام هذا المشروع في الوقت الحالي", vbCritical, "" EncryptAllTablesIndependently EnCodeKey DoCmd.Quit Exit Function End Function Public Sub EncryptAllTablesIndependently(ByVal strKey As String) Dim db As DAO.Database Dim tblName As Variant Dim rs As DAO.Recordset Dim fld As DAO.Field Dim tblList As Collection If Len(strKey) = 0 Then MsgBox "مفتاح التشفير غير صحيح", vbCritical, "" Exit Sub End If Set db = CurrentDb Set tblList = GetAllTables() For Each tblName In tblList Set rs = db.OpenRecordset(tblName, dbOpenDynaset) If Not (rs.EOF And rs.BOF) Then rs.MoveFirst Do Until rs.EOF For Each fld In rs.Fields If fld.Type = dbText Then rs.Edit rs(fld.Name).Value = EncryptDecrypt(Nz(rs(fld.Name), ""), strKey) rs.Update End If Next fld rs.MoveNext Loop End If rs.Close Next tblName End Sub Public Sub SetEncryptionStatus(status As Boolean) Dim db As DAO.Database Dim rs As DAO.Recordset Set db = CurrentDb Set rs = db.OpenRecordset("EncryptionStatus", dbOpenDynaset) If Not (rs.EOF And rs.BOF) Then rs.MoveFirst rs.Edit rs!status = status rs.Update Else rs.AddNew rs!status = status rs.Update End If rs.Close End Sub Public Sub EncryptOrDecryptTables(ByVal strKey As String, ByVal isEncrypting As Boolean) Dim db As DAO.Database Dim tblName As Variant Dim rs As DAO.Recordset Dim fld As DAO.Field Dim tblList As Collection Dim action As String Set db = CurrentDb Set tblList = GetAllTables() action = IIf(isEncrypting, "تشفير", "فك التشفير") For Each tblName In tblList Set rs = db.OpenRecordset(tblName, dbOpenDynaset) If Not (rs.EOF And rs.BOF) Then rs.MoveFirst Do Until rs.EOF For Each fld In rs.Fields If fld.Type = dbText Then rs.Edit rs(fld.Name).Value = EncryptDecrypt(Nz(rs(fld.Name), ""), strKey) rs.Update End If Next fld rs.MoveNext Loop End If rs.Close Next tblName MsgBox "تمت عملية " & action & " بنجاح", vbInformation, "" End Sub Public Sub HandleEncryptionOnFormOpen() If CheckEncryptionStatus() = True Then Call EncryptOrDecryptTables(EnCodeKey, False) SetEncryptionStatus False End If End Sub Public Sub HandleEncryptionOnFormClose() If CheckEncryptionStatus() = False Then Call EncryptOrDecryptTables(EnCodeKey, True) SetEncryptionStatus True End If End Sub Public Function GetTotalRecordCount() As Long Dim db As DAO.Database Dim tblDef As DAO.TableDef Dim totalCount As Long Dim rs As DAO.Recordset Set db = CurrentDb totalCount = 0 For Each tblDef In db.TableDefs If Left(tblDef.Name, 4) <> "MSys" Then Set rs = db.OpenRecordset(tblDef.Name, dbOpenSnapshot) If Not (rs.EOF And rs.BOF) Then rs.MoveLast totalCount = totalCount + rs.recordCount End If rs.Close End If Next tblDef Set db = Nothing GetTotalRecordCount = totalCount End Function تم تنفيذ الفكرة بطريقتين ، الأولى من خلال الإعتماد على النموذج الرئيسي الذي يفتح به المشروع ( في حدث عند التحميل يتم الغاء التشفير ) وعند زر إغلاق المشروع يوجد حدث لإعادة التشفير لجميع الجداول مرة واحدة وبسرعة مهما كان عدد السجلات . والثانية من خلال نموذج آخر عند النقر على زر Start يبدأ شريط التحميل والذي يعتمد على عدد السجلات في جميع الجداول التي تم تشفيرها بالتقدم من 0 - 100% . وعند اغلاق النموذج يتم اعادة التشفير مرة أخرى . ✔ خطوات الحصول على النتيجة الصحيحة كالآتي :- ✔ انسخ الجدول (EncryptionStatus ) والمديول ( Encryption ) إلى أي مشروع تريده . ✔ تأكد من أن جميع السجلات غير مشفرة . ✔ تأكد من أن حالة الحقل Status هي No . قمت بكتابة الموضوع على عجالة ، وتركت الباب مفتوح للنقاش . Tashfeer 2024.accdb
-
مداخلة ، وقد سبقني اليها معلمنا @ابوخليل ، كنت اعمل على فكرة تقوم بتشفير جميع سجلات الجداول مرة واحدة بشكل مختلف قليلاً ويتيح للمستخدم تغيير مفتاح التشفير مع الإحاطة بأكثر من أمر أثناء عملية التشفير . واعتقد أنني سأقوم بفتح موضوع مستقل لهذه الأداة . والسبب هو شعوري بأننا خرجنا عن فكرة صاحب الموضوع في موضوعه . وأرجو من صديقنا @الحلبي / نقل الحوار لموضوع جديد . والموضوع الآخر هو أن الملف المرفق في مشاركة معلمي ومشاركتك أخي @الحلبي يعملان بشكل طبيعي عندي . وعليكم السلام ورحمة الله وبركاته أخونا @محمود حموده .
-
العفو أخي الكريم ، الهدف من جملة السجل الجديد هو فقط عند الإضافة ، وتحصيل حاصل أنت عند تعبئة الحقول كسجل جديد وقمت مثلاً بالنقر على زر التالي او السابق على سبيل المثال فسيتم الحفظ التلقائي كما أشار معلمي @ابوخليل . لذا فباعتقادي لست بحاجة لتكرار استعلام التحديث او الإضافة ( لتقليل التكرار ) . هذه كانت وجهة نظري . أما فيما يتعلق في مشكلة الرسالة التي تظهر عند تحديث السجل ، ففي الكود يقوم آكسيس بإضافة سجل وتحديث سجل موجود وهنا كان التعارض وسبب الرسالة بالحفظ للسجل أو الغاء الحفظ ... إلخ وهذه كله وجهة نظر ليس إلا 🤗
-
وعليكم السلام ورحمة الله وبركاته ،، اخي @عذاب الزمان تحقيق الهدف ليس صعباً ، ولكن !! ماذا لو كان الرقم التسلسلي الذي تريد اعادة ترتيبه حقلاً فريداً ومرتبط بعلاقة مع حقل في جدول آخر ❗ هذه من جهة ، ومن جهة أخرى ماذا لو كان هذا الحقل من نوع ترقيم تلقائي ❗❗
-
الآن تجري مباراة كرة قدم بين فريق المنتخب الأردني والمنتخب العراقي ، وأنا لست من متابعي كرة القدم ، ومتفرغ بانتظار انتهاء وقت العمل هل هذه النتيجة المرجوة والمطلوبة ؟ في الإستعلام Query2 فكرة بسيطة باستخدام IIF ، وهذا ما لا تريده . لكن في الاستعلام Query3 فكرة مختلفة باستخدام NZ كما يلي :- SELECT Table1.text1, Nz(Table2.text2,Table1.text2) AS text2 FROM Table1 LEFT JOIN Table2 ON Table1.txt_id = Table2.txt_id2 WHERE (((Table2.id)=(SELECT MAX(T2.id) FROM Table2 AS T2 WHERE T2.txt_id2 = Table1.txt_id) Or (Table2.id) Is Null)); Database2.accdb
-
لا تعلو العين على الحاجب ,, انت معلمنا الأساس ومنكم نستفيد ونتعلم
-
والله أنا خفت أكمل وأرد بعد آخر رد لي من إني أحبطك أو تحس أني قفلتها بإني أرد عليك أنه ممكن يكون في طريقة للإستيراد حتى لو الجداول غير ظاهرة بس الحمد لله ماجتش مني
-
طريقة مقارنة النصوص لمنع تكرار نفس النص فى الجدول
Foksh replied to Hema24's topic in قسم الأكسيس Access
أهلاً بك أخي @Hema24 ، لتحقق الوصول الى طلبك ، نرجو منك الإلتزام بقواعد المنتدى ؛ وذلك بإرفاق ملف يعبر عن معطيات الطلب . -
قمت بإضافة الحقل id من الجدول Table2 في الاستعلام ، و استخدمت المعيار التالي (SELECT MAX(T2.id) FROM Table2 AS T2 WHERE T2.txt_id2 = Table1.txt_id) وقد استخدمت دالة من دوال التجميع المرفق مع الاستعلام الجديد "Query2" للوضوح فقط Database1.accdb
-
وعليكم السلام ورحمة الله وبركاته ،، أهلاً بمعلمنا الحبيب @ابوخليل ، من باب التأكد ؛ هل هذه النتيجة المطلوبة
-
ومشاركة لما أشار إليه والدنا الحبيب ومعلمنا الفاضل @ابوخليل ، تفضل أخي @yazan_2 ، هذا التعديل البسيط تفقد النموذج Main Test_Copy.accdb
-
تلقائياً ، مايكروسوفت ستوقف عمل كائنات ActiveX ، لأسباب امنيه
Foksh replied to jjafferr's topic in قسم الأكسيس Access
ومشاركة مع الأساتذة ، الخبر سليم وأيضاً آكسيس من ضمن التطبيقات التي سيتم ايقاف الـ ActiveX لبعض الوظائف منها :- Microsoft Web Browser Control Microsoft Windows Media Player Control Date and Time Picker Control Microsoft TreeView Control Microsoft ListView Control حيث سيتم تعطيل إعدادات ActiveX في مركز الثقة لجميع البرامج التي شملها الحظر ، بما في ذلك أكسس . وهذه مصادر خارجية :- الموقع الأول الموقع الثاني الموقع الثالث -
حلوة وقوية الحركة دي مهندسنا الغالي ,, اعتقد أن جملة : Exit Sub جعلت من هذا الجزء ErrorHandler: If Err.Number <> 0 Then MsgBox "حدث خطأ أثناء الحفظ: " & Err.Number & " - " & Err.Description, vbCritical Resume Next End If وكأنه غير موجود حتى لو ظهر خطأ ، فسيتم الخروج من الـ Sub قبل الوصوا الى ErrorHandler ، وعليه فإنه في الملف الأصلي لأخونا @yazan_2 لو استخدم Exit Sub قبل جملة ErrorHandler ، فأعتقد أنه لن تظهر عنده رسائل الخطأ بعد الحفظ أو التعديل . هذا من ناحية المشكلة التي تظهر بعد حفظ السجل أو تحديثه . من ناحية أخرى ، ارتأيت هذا التعديل على الكود لإتمام عملية الحفظ كسجل جديد أو تحديث السجل الحالي من خلال :- Private Sub BtnSave_Click() On Error GoTo ErrorHandler If IsNull(Me.NatiID) Or Trim(Me.NatiID) = "" Then MsgBox "يرجى إدخال قيمة في حقل رقم الهوية.", vbExclamation Exit Sub End If Set db = CurrentDb() strSQL = "SELECT * FROM Employees WHERE NatiID = '" & Me.NatiID & "'" Set rs = db.OpenRecordset(strSQL, dbOpenDynaset) If rs.EOF Then rs.AddNew MsgBox "تم إضافة موظف جديد." Else rs.Edit MsgBox "تم تحديث بيانات الموظف." End If rs!NatiID = Me.NatiID rs!FName = Me.FName rs!LName = Me.LName rs!GName = Me.GName rs!FamName = Me.FamName rs!Rank = Me.Rank rs!BirthDate = Me.BirthDate rs!Age = Me.Age rs!BirthPlace = Me.BirthPlace rs.Update rs.Close Set rs = Nothing Set db = Nothing Exit Sub ErrorHandler: MsgBox "حدث خطأ أثناء الحفظ: " & Err.Description, vbCritical Resume Next End Sub طبعاً فيما يخص المتغيرات فلم أعدل عليها شيء وتركتها كما هي في مكان حجزها أول الأكواد Option Compare Database Dim db As DAO.Database Dim rs As DAO.Recordset Dim strSQL As String هذا كله رأيي الشخصي وليس فرضاً
-
دعماً لما أشار إليه الأستاذ @kanory ، راجع هذا الموضوع هنا .
-
بالنسبة لي ، توجهي نحو رمز الاستجابة السريعة الـ QR لقي اهتمامي وحل لمشاكلي جميعها وبشكل مجاني دون الحاجة للخطوطومشاكلها ، مع الدعم للنصوص العربية وبالشكل الذي اريده كمحتوى للـ QR .
-
الذكاء الاصطناعي بين الهاوي والمحترف (معدل)
Foksh replied to غريب طرابلس's topic in قسم الأكسيس Access
اهلا وسهلا بك مرة اخرى وشكراً على مشاركتك لنا افكارك -
تحية لك ولمرورك الكريم
-
متعقب التغييرات ⭐ هدية ~ متعقب التغييرات الذكي 2024⭐
Foksh replied to Foksh's topic in قسم الأكسيس Access
يسعدني مرورك العطر .. ونرجو افادتنا بالتجربة ونتيجتها لغايات التطوير وتحسين الأداء وتلافي الأخطاء وإصلاحها -
متعقب التغييرات ⭐ هدية ~ متعقب التغييرات الذكي 2024⭐
Foksh replied to Foksh's topic in قسم الأكسيس Access
أهلا مهندسنا الغالي .. جزاك الله خيراً على ما أسلفت ، هل الصورة أدناه تكفي !!! أخي جو أسعد الله مسائك ، هل قمت بتوفير المطلوب بشكل عام ، وهو :- وجود جدولين بينهم حقول متشابهة ، فمثلاً اذا اخترت جدول المستخدمين وجدول الطلاب ( فهل بينهم حقول متشابهة ؟؟؟ ) أكيد لا فكيف سيكون هناك مقارنة بين جدولين للإيجاد الفرق . في الصورة السابقة تطبيق على قاعدة بيانات عادية فيها جدولين ولكن جعلنا بينهم اختلاف في البيانات والسجلات وتم تنفيذ المطلوب بشكل كامل كما رأيت . فلا اعلم ما الجداول التي اخترتها ، ولا طبيعة وبنية الجداول والحقول فيهما .