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

Foksh

أوفيسنا
  • Posts

    3684
  • تاريخ الانضمام

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

  • Days Won

    149

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

  1. 1️⃣ فيما يخص التبويب Print Options :- الأجزاء المظللة باللون الأصفر ( Top , Bottom , Left , Right ) : وظيفتها التحكم بهوامش الصفحة المراد طباعتها . الأجزاء المظللة باللون الأزرق ( Print Data Only ) : يتم طباعة البيانات فقط دون تنسيقات أو إضافات ( مثل الخطوط ، العناوين ، أو النصوص الثابتة ) . الأجزاء المظللة باللون الأخضر ( Print Form Only ، Print Datasheet Only ) : * Print Form Only : لطباعة جزء النموذج فقط . * Print Datasheet Only : لطباعة جزء الجدول أو ورقة البيانات فقط . باختصار هذا الخيار مخصص للنماذج المنقسمة (Split Form) ، حيث يمكن طباعة عرض واحد فقط من النموذج 2️⃣ أما التبويب Columns :- الأجزاء المظللة باللون الأخضر Grid Settings تتيح لك التحكم بعدد الأعمدة المطبوعة في الورقة . على سبيل المثال كما في ( الكتيبات أو التقارير المصفوفة ) ◀ Number of Columns ( عدد الأعمدة ) :- يحدد عدد الأعمدة التي يتم تقسيم الصفحة إليها عند الطباعة . القيمة الافتراضية هي 1 ، ويمكنك زيادتها لطباعة البيانات في عدة أعمدة ( مثل طباعة قائمة عناوين ) . ◀ Row Spacing ( تباعد الصفوف ) :- يحدد المسافة بين كل صف والصف الذي يليه داخل العمود نفسه . يتم قياسه بوحدات القياس المستخدمة ( عادة بالبوصة أو السنتيمتر ) . ◀ Column Spacing ( تباعد الأعمدة ) :- يحدد المسافة بين الأعمدة . يستخدم عند تعيين أكثر من عمود لضمان وجود فراغات مناسبة بينها . الأجزاء المظللة باللون البنفسجي Column Size : ◀ Width ( العرض ) :- يحدد عرض كل عمود . وهو ما قد يؤثر على حجم البيانات المعروضة في العمود . ◀ Height ( الإرتفاع ) :- يحدد ارتفاع العمود . يستخدم لتحديد مساحة القيمة المعروضة داخل العمود. ◀ Same as Detail ( مطابق للتفاصيل ) :- عند تفعيل هذا الخيار ، يتم ضبط أبعاد الأعمدة ( العرض و الارتفاع ) بحيث تكون متطابقة مع تفاصيل التقرير (التخطيط التفصيلي).الأجزاء في اللون البنفسجي ، تسمح لك بالتحكم بعرض وارتفاع المود الواحد في الورقة أو التقرير . وهنا ليس هناك اي قيم محددة بل هي حسب حاجتك . الأجزاء المظللة باللون البرتقالي Column Layout : ◀ Down , then Across ( الإتجاه من الأعلى للأسفل ، ثم عبر الأعمدة ) : حيث يتم ملء البيانات من الأعلى إلى الأسفل في العمود الأول ، ثم ينتقل إلى العمود التالي . ◀ Across , then Down (عبر الأعمدة أولاً ، ثم الإتجاه من الأعلى للأسفل ) : حيث يتم ملء البيانات في الصف الأول من كل الأعمدة ، ثم ينتقل إلى الصف التالي . يعني باختصار شديد هذا التبويب مفيد عند إنشاء تقارير تحتاج إلى تنسيق متعدد الأعمدة ، مثل طباعة بطاقات الأسماء أو قوائم ... إلخ أما فيما يخص مشكلتك مع الأرقام ، فهي باعتقادي تختلف ولن يستطيع أحد معرفة مقاسات وطبيعة تصميم تقاريرك غيرك ؛ فبعد تجربتك المتكررة من التعديل على هذه الارقام ( حسب حاجتك طبعاً ) ستتوصل الى ارقام صحيحة تناسب تصميم تقريرك أو ما تريد طباعته .
  2. هل جربت الكود يا صديقي أولا ... الذي تم هو فقط تعريف المتغير db كما يلي Dim db As DAO.Database Set db = CurrentDb() لم اقم بتجربته ، ولكن هذا ما توضح لي ، وانت صاحب التجربة للعودة لنا بالنتيجة .
  3. انشئ استعلام جديد ، والصق هذا الاستعلام SQL وجرب النتيجة SELECT [Tbl_Tests 2025].Tcode, [Tbl_Tests 2025].Tname, [Tbl_Tests 2025].Out_Lab, IIf([Out_Lab]<50,75,IIf([Out_Lab] Between 51 And 100,100,IIf([Out_Lab] Between 101 And 150,125,Null))) AS NewField FROM [Tbl_Tests 2025];
  4. هل تقصد في حقل مستقل ؟؟؟؟ وضح هذه النقطة اذا سمحت
  5. باعتقادي انك لم تقم بتعريف قاعدة البيانات db .. Public Function relinksqltables() As Boolean On Error GoTo relinksqltablesErr Dim db As DAO.Database Dim tdef As TableDef Dim constr As String Dim cnn As ADODB.Connection Dim strserver As String, strdb As String, struser As String, strpass As String Set db = CurrentDb() constr = "drive={ODBC;DRIVER=ODBC Driver 17 for SQL Server;SERVER=WIN-9V6JHD626P3\SQLEXPRESS;id = administrator;PASSWOR= ;database=tarikbase;Trusted_Connection=yes;APP=SSMA;DATABASE=tarikbase;" DoCmd.SetWarnings False For Each tdef In db.TableDefs Debug.Print tdef.Name If InStr(tdef.Connect, "odbc") And Left(tdef.Name, 3) = "dbo" Then If tdef.Connect <> conster Then tdef.Connect = constr tdef.RefreshLink End If End If Next DoCmd.SetWarnings True Exit Function relinksqltablesErr: relinksqltables = False MsgBox "Error in relinksqltables: " & Err.Description End Function انظر لهذا السطر For Each tdef In db.TableDefs هنا قام الكود باستدعاء db ولكنك لم تقم بتعريفها في الكود الخاص بك
  6. أخي الكريم اهلاً وسهلاً بك معنا .. من وجهة نظري اعتقد أن اعدادات الطباعة قد تختلف بحسب التقرير الذي تريد طباعته ، فعادةً اكسيس يقوم بانشاء تقرير مع افتراض حجم الورق = Letter كما في الصورة أدناه ، في النقطة 2 . وحتى أنه يفترض اتجاه الورقة = بشكل طولي كما في النقطة 1 . أيضاً يقوم باختيار الطابعة الإفتراضية بشكل تلقائي للتقارير كما في النقطة 3 ,, وعليه فإنه وحسب حاجتك في تقريرك ( اختيار اتجاه الورقة = " طولي " أو " عرضي " ) وحجم الورقة = A4 أو A3 ... إلخ . وتحديد الطابعة لكل تقرير . فمثلاً لو كان التقرير هذا يطبع ملصق باركود مثلاً ويوجد طابعة لهذا النوع من الملصقات فيتم اختيارها لهذا التقرير . وإذا كنت في تقرير آخر تريد طباعة معلومات بحجم الورقة العادية = A4 فتختار نوع الطابعة لهذا التقرير بشكل منفصل . وطبعاً هنا في هذه النقطة سيكون الأمر أكثر توسعاً من مجرد اختيار طابعة لكل تقرير دون تحديد اسمها في كود الطباعة ( إن لم تخني معلومتي ) هذا بالنسبة لما تفضلت به في استفسارك .. والله اعلم هي فقط وجهة نظر
  7. وعليكم السلام ورحمة الله وبركاته ,, زودنا بملف مصغر من مشروعك حتى نرى اسماء الحقول والجداول والنموذج الذي سيتم فتح السجل عليه ... إلخ
  8. أهلاً وسهلاً بشيخنا الجليل و والدنا الحبيب .. لدي في أحد مشاريعي فكرة تشابه ما تطلبه ، سأقوم بفصلها عن المشروع وأزودك بفكرتي وطريقتي التي استخدمتها لأحد مراكز اللياقة البدنية مؤخراً ..
  9. هي فقط أول مرة يجب ان تتأكد منها في هذا الإصدار ، ولكن بناءً على الأفكار الرائعة من قبل معلمينا ومهندسينا فأعتقد أنها قابلة للتطوير والتوسيع ان شاء الله . هذه الرسالة تستطيع الغاء ظهورها من داخل المديول . وموضوع اختصار الكود ، تستطيع استخدام كود معلمنا وشيخنا الجليل ابو خليل وجعلهم في حدث عند الفتح والإغلاق لنموذج محدد . مع العلم أن الكود قابل للتوسع وقد يكون أكبر من هذا الحالي
  10. معلمنا يسعدني الحديث حول هذه النقطة .. فكرتي كانت كالآتي ، الآن عند حفظ وتشفير قاعدة البيانات الى ACCDE كمثال ، فلا اعتقد انه من السهل التلاعب بالجدول هذا تحديداً ، إذا كان المبرمج قد قام بإلغاء مفتاح الشيفت !! لذا كان همه ليس بالكبير للقلق حوله . هذا كلام جميل ، ولم يخطر لي ( يبدو أنني كنت جداً على عجالة من أمري ) ، وأكيد نعم، يمكن استخدام متغير رقمي بدلاً من الاعتماد على حقل في جدول كما تم الأمر زهز اقتراح جميل . اهلا مهندسنا الغالي ، بارك الله بك فعلاً في فكرتي لم أتم التوسع بها لهذا الغرض ، ولكنه قد يكون ممكناً في تطويرات وتحديثات قادمة
  11. هنا كانت مشكلتك تأكد من أن حالة الحقل Status هي No . هذا ملفك بعد التطبيق مشتريات ومبيعات.accdb
  12. تم انشاء موضوع جديد ، تجده هنا
  13. السلام عليكم ورحمة الله وبركاته ، أخواني وأساتذتي ومعلمينا ( دون استثناء ) قمت بتنفيذ فكرة تشفير السجلات في الجداول ، والذي تهدف إلى حماية البيانات من المتطفلين عند محاولتهم استيراد بيانات الجداول . والفكرة تم تطبيقها وإكمالها خلال طرح مشاركة معلمي الفاضل @ابوخليل في رده على أخونا @الحلبي في مشاركة في موضوع سابق . ولكني هنا اعتمدت على الجدول ( 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
  14. مداخلة ، وقد سبقني اليها معلمنا @ابوخليل ، كنت اعمل على فكرة تقوم بتشفير جميع سجلات الجداول مرة واحدة بشكل مختلف قليلاً ويتيح للمستخدم تغيير مفتاح التشفير مع الإحاطة بأكثر من أمر أثناء عملية التشفير . واعتقد أنني سأقوم بفتح موضوع مستقل لهذه الأداة . والسبب هو شعوري بأننا خرجنا عن فكرة صاحب الموضوع في موضوعه . وأرجو من صديقنا @الحلبي / نقل الحوار لموضوع جديد . والموضوع الآخر هو أن الملف المرفق في مشاركة معلمي ومشاركتك أخي @الحلبي يعملان بشكل طبيعي عندي . وعليكم السلام ورحمة الله وبركاته أخونا @محمود حموده .
  15. العفو أخي الكريم ، الهدف من جملة السجل الجديد هو فقط عند الإضافة ، وتحصيل حاصل أنت عند تعبئة الحقول كسجل جديد وقمت مثلاً بالنقر على زر التالي او السابق على سبيل المثال فسيتم الحفظ التلقائي كما أشار معلمي @ابوخليل . لذا فباعتقادي لست بحاجة لتكرار استعلام التحديث او الإضافة ( لتقليل التكرار ) . هذه كانت وجهة نظري . أما فيما يتعلق في مشكلة الرسالة التي تظهر عند تحديث السجل ، ففي الكود يقوم آكسيس بإضافة سجل وتحديث سجل موجود وهنا كان التعارض وسبب الرسالة بالحفظ للسجل أو الغاء الحفظ ... إلخ وهذه كله وجهة نظر ليس إلا 🤗
  16. وعليكم السلام ورحمة الله وبركاته ،، اخي @عذاب الزمان تحقيق الهدف ليس صعباً ، ولكن !! ماذا لو كان الرقم التسلسلي الذي تريد اعادة ترتيبه حقلاً فريداً ومرتبط بعلاقة مع حقل في جدول آخر ❗ هذه من جهة ، ومن جهة أخرى ماذا لو كان هذا الحقل من نوع ترقيم تلقائي ❗❗
  17. شهادة أعتز بها معلمي الفاضل أشكرك على كلماتك ولكن صدقني بعض ما عندكم وبارك الله فيك وزادك من علمه وفضله وكرمه ولطفه وعفوه
  18. الآن تجري مباراة كرة قدم بين فريق المنتخب الأردني والمنتخب العراقي ، وأنا لست من متابعي كرة القدم ، ومتفرغ بانتظار انتهاء وقت العمل هل هذه النتيجة المرجوة والمطلوبة ؟ في الإستعلام 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
  19. لا تعلو العين على الحاجب ,, انت معلمنا الأساس ومنكم نستفيد ونتعلم
  20. والله أنا خفت أكمل وأرد بعد آخر رد لي من إني أحبطك أو تحس أني قفلتها بإني أرد عليك أنه ممكن يكون في طريقة للإستيراد حتى لو الجداول غير ظاهرة بس الحمد لله ماجتش مني
  21. أهلاً بك أخي @Hema24 ، لتحقق الوصول الى طلبك ، نرجو منك الإلتزام بقواعد المنتدى ؛ وذلك بإرفاق ملف يعبر عن معطيات الطلب .
  22. قمت بإضافة الحقل id من الجدول Table2 في الاستعلام ، و استخدمت المعيار التالي (SELECT MAX(T2.id) FROM Table2 AS T2 WHERE T2.txt_id2 = Table1.txt_id) وقد استخدمت دالة من دوال التجميع المرفق مع الاستعلام الجديد "Query2" للوضوح فقط Database1.accdb
  23. وعليكم السلام ورحمة الله وبركاته ،، أهلاً بمعلمنا الحبيب @ابوخليل ، من باب التأكد ؛ هل هذه النتيجة المطلوبة
  24. ومشاركة لما أشار إليه والدنا الحبيب ومعلمنا الفاضل @ابوخليل ، تفضل أخي @yazan_2 ، هذا التعديل البسيط تفقد النموذج Main Test_Copy.accdb
  25. ومشاركة مع الأساتذة ، الخبر سليم وأيضاً آكسيس من ضمن التطبيقات التي سيتم ايقاف الـ ActiveX لبعض الوظائف منها :- Microsoft Web Browser Control Microsoft Windows Media Player Control Date and Time Picker Control Microsoft TreeView Control Microsoft ListView Control حيث سيتم تعطيل إعدادات ActiveX في مركز الثقة لجميع البرامج التي شملها الحظر ، بما في ذلك أكسس . وهذه مصادر خارجية :- الموقع الأول الموقع الثاني الموقع الثالث
×
×
  • اضف...

Important Information