اذهب الي المحتوي
أوفيسنا
بحث مخصص من جوجل فى أوفيسنا
Custom Search

jjafferr

أوفيسنا
  • Posts

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

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

  • Days Won

    404

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

  1. وعليكم السلام 🙂 استعمل الامر Nz ، لتحويل الفراغ الى صفر ، ويتم الجمع هكذا: في المثال ، ABC هو اسم الحقل المطلوب جمعه : = Sum(Nz([ABC],0)) جعفر
  2. لاحظت ان الكود يستعمل الامر Right ، فقد يكون هو المشكلة ، استعمل كود آخر ، او جرب : https://www.devhut.net/access-color-picker/ https://www.devhut.net/ms-access-sample-colors/ جعفر
  3. وعليكم السلام 🙂 او تلقائيا من اعدادات الحقل : . ولما تضع المؤشر على الحقل: . جعفر
  4. في الجدول ، تأكد بأنك تستخدم نوع النص Plain Text وفي اعتقادي بأن هذه النصوص اللي تتكلم عنها ، صار لها هذا الشيء بالخطأ بسبب التجارب ، وتم حفظ هذه النتائج الى الجدول مرة اخرى. لذا يجب على المبرمج التأكد من هذه النقطة في البرمجة 🙂 بالنسبة لي ، السببين مرفوضين ، ويجب على البرنامج ان يعمل عليها جميعا ، نقطة وانتهى السطر. للعلم ، المشكلة ليست في برمجة اخي حمدي ، وانما هي في الاكواد اللي حصل عليها من الانترنت واللي تقوم بعمل تغيير قيم الالوان. جعفر
  5. السلام عليكم 🙂 انا طرف ثالث ، شو تريدون اجرب ؟ جعفر
  6. بالبحث والاستكشاف لساعات ، ياما نلتفت ، واذا بعمود الفجر قد ظهر 🙂 جعفر
  7. السلام عليكم 🙂 اخوي ابوخليل ، الله يعطيك الصحة والعافية ، شغل جميل وخفيف 🙂 اخوي سامي ، طبعا هذه ملاحظات عامة ، واهميتها هي لتسريع عمل البرنامج ، وتجنب الاخطاء 🙂 تركت ملاحظتي سابقا والآن الى التفاصيل من واقع مرفقك في مشاركتك الاخيرة اعلاه ، وبدون ترتيب: الكود : 1. كل مكان عندك الامر Dcount ، مثل DCount("aaa","ttt") او DCount("aaa","ttt","ccc="& ddd) ، احذف aaa واستعمل النجمة * ، يعني Dcount("*","ttt") هذا يعطيك نفس النتيجة ، ولكنه اسرع ، لأنه يطلب عدد السجلات دون ان يعمل فرز لإسم الحقل وحساب عدد سجلاته. 2. كل مكان عندك الامر DCount("aaa","ttt","ccc="& ddd) ، الحقل ccc يجب ان يكون مفرس في الجدول (تسمح بالتكرار او لا ، يعتمد على دور الحقل في الجدول) ، وهذا ينطبق على الاوامر Dlookup و Dmax وووو ، فالمثال التالي ، الحقل ename يجب ان يكون مفهرس DCount("ename", "tblUsersName", "[ename]= '" & Trim(Me.ename) & "'") 3. في كل مكان في الكود ، اذا كنت ستستخدم اسم احد حقول النموذج ، فاستخدم كلمة .Me او !Me قبل الاسم ، حتى بعد سنين لما ترجع للكود ، تعرف ان هذا ليس متغير وانما هو اسم حقل. 4. في راس كل صفحة الكود استخدم السطرين Option Compare Database Option Explicit حتى تضطر ان تصرح عن المتغير المستعمل عن طريق Dim ، حتى يعمل الكود بطريقة اسرع ، وانت تعرف نوع المتغير وتعرف مكان الخطأ. 5. عند كتابة الكود ، وبين كل فترة واخرى استعمل Debug>Compile ، حتى ترى اذا كان الكود فيه اخطاء (انا عملت اختصار له في القائمة) ، انظر احد الاخطاء الموجود عندك مثلا: . 6. من الجميل عمل تنسيق الكود ، حتى تعرف من رؤيته ، بداية ونهاية الحلقات ، مثلا ، بدلا عن Private Sub cmdremove_Click() If MsgBox("هل تريد حذف السجل?", _ vbExclamation + vbOKCancel, _ "warning") = vbOK Then Me.deleteBox = True Else Exit Sub End If Me.Requery End Sub اكتب Private Sub cmdremove_Click() If MsgBox("هل تريد حذف السجل?", _ vbExclamation + vbOKCancel, _ "warning") = vbOK Then Me.deleteBox = True Else Exit Sub End If Me.Requery End Sub 7. اختصر الكلمات الطويلة ، حتى تستطيع ان تقرأها بسهولة : فبدلا عن Forms!frmdevDetails!frmDetails!userType.Enabled = False Forms!frmdevDetails!frmDetails!users.Enabled = False Forms!frmdevDetails!frmDetails!receiveDate.Enabled = False Forms!frmdevDetails!frmDetails!idOffice.Enabled = False Forms!frmdevDetails!frmDetails!dateHireEnd.Enabled = False Forms!frmdevDetails!frmDetails!returnDate.Enabled = True استخدم with Forms!frmdevDetails!frmDetails !userType.Enabled = False !users.Enabled = False !receiveDate.Enabled = False !idOffice.Enabled = False !dateHireEnd.Enabled = False !returnDate.Enabled = True end with وبدلا عن Private Sub zerClose_Click() If IsNull(Forms!frmdevDetails!frmDetails!receiveDate) And Not IsNull(Forms!frmdevDetails!frmDetails!users) Then MsgBox "لطفاً أدخل تاريخ التسليم" ElseIf Forms!frmdevDetails!frmDetails!userType = 4 And IsNull(Forms!frmdevDetails!frmDetails!dateHireEnd) Then MsgBox "لطفاً أدخل تاريخ نهايةالإعارة" ElseIf IsNull(Forms!frmdevDetails!frmDetails!userType) And Not IsNull(Forms!frmdevDetails!frmDetails!receiveDate) Then MsgBox "لطفاً أدخل نوع المستخدم" ElseIf IsNull(Forms!frmdevDetails!frmDetails!users) And Not IsNull(Forms!frmdevDetails!frmDetails!receiveDate) Then MsgBox "لطفاً أدخل المستخدم" Exit Sub Else DoCmd.Close End If End Sub استخدم Private Sub zerClose_Click() with Forms!frmdevDetails!frmDetails If IsNull(!receiveDate) And Not IsNull(!users) Then MsgBox "لطفاً أدخل تاريخ التسليم" ElseIf !userType = 4 And IsNull(!dateHireEnd) Then MsgBox "لطفاً أدخل تاريخ نهايةالإعارة" ElseIf IsNull(!userType) And Not IsNull(!receiveDate) Then MsgBox "لطفاً أدخل نوع المستخدم" ElseIf IsNull(!users) And Not IsNull(!receiveDate) Then MsgBox "لطفاً أدخل المستخدم" Exit Sub Else DoCmd.Close End If end with End sub 8. لا تستعمل الكلمات المحجوزة للأكسس في تسمية اي كائنات او متغيرات ، واذا اضطررت ان تستعملها: مثلا: لا تستعمل Me.section ، وانما استعمل Me![section] الاستعلامات : 9. كل مرة نستخدم معيار او فرز ، وفي اي مكان في البرنامج ، يجب فهرست الحقل ، مثل : . وحتى في مربع القائمة المنسدلة : . الحقل UsrType يجب ان يكون مفهرس . 10. لما تربط النموذج الرئيسي بالنموذج الفرعي ، فيجب ان يكون بينهما علاقة ، وكلا الحقلين يجب ان يكونا مفهرسين : . 11. الصور في البرنامج ، ولحفظ حجم البرنامج صغيرا ، يجب ان تكون الصور موجودة في مجلد في الكمبيوتر ، وليست في الجداول ولا مضمنه في النماذج والتقارير ، وانا استعمل المجلدات بهذه الطريقة ، فحتى لما تنقلها لكمبيوتر آخر ، كل شيء يشتغل بدون مشاكل: . وقد عملت نسخة من الصور الثلاث الموجودة في التقارير ، ووضعتها في المجلد images ، وفي التقارير ، تعمل تغيير في الاعدادات ، بدلا عن Embedded ، نعملها Linked : . حجم ملفك الاصل بعد الضغط والاصلاح: . ثم لربط الصور بالتقارير ، انظر الصور موجودة في اي قسم من التقرير ، وهنا نرى انها في رأس التقرير Report Header ، فنستخدم حدث "عند التنسيق" لهذا القسم: انقر على الخط المكتوب عليه Report Header ، ثم استعمل حدث "عند التنسيق" ، والكود سيكون : Private Sub ReportHeaderSection_Format(Cancel As Integer, FormatCount As Integer) On Error GoTo err_ReportHeaderSection_Format Me.img_Ministry_of_Education.Picture = Application.CurrentProject.Path & "\images\Ministry_of_Education.jpg" Me.img_Oman_Vision_2040.Picture = Application.CurrentProject.Path & "\images\Oman_Vision_2040.jpg" Me.img_Quality_Management_System.Picture = Application.CurrentProject.Path & "\images\Quality_Management_System.jpg" Exit_ReportHeaderSection_Format: Exit Sub err_ReportHeaderSection_Format: If Err.Number = 2220 Then 'image not found Resume Next Else MsgBox Err.Number & vbCrLf & Err.Description Resume Exit_ReportHeaderSection_Format End If End Sub . عليه اصبح حجم الملف ، حوالي النصف : . 12. لما تكون عندك علاقة في الاستعلام بين الجداول ، بهذه الطريقة مثلا : . ففعلا انت محتاج الى عمل علاقة بين الجداول (خارج الاستعلام) ، والتي ستجبرك على عمل فهرسة مسبقا لحقل من جانب واحد ، او عمل فهرسة للجانبين ، بمعنى: اذا عملت فهرسة لحقل في جدول واحد ، ثم عملت علاقة بين هذا الحقل A وحقل B في جدول آخر ، فيمكنك ان لا تفهرس الحقل B في الجدول ، لأن العلاقة تلقائيا تجعله مفهرسا ، والاكسس يفهم هذا. بعض الملاحظات اعلاه تقدر تقوم بها مباشرة الآن ، ولكن لا تعمل العلاقات إلا بعد ان يعطيك اخوي ابوخليل الضوء الاخضر 🙂 جعفر
  8. وعليكم السلام 🙂 لاحظ هذا المثال: استعملنا اسم الحقل الذي في النموذج ، ولم نستخدم اسم الحقل "مصدر المعلومات" . . بينما كان يجب ان نستخدم اسم الحقل "مصدر المعلومات" . جعفر
  9. السلام عليكم 🙂 المسألة سهله ، في جدول/نموذج اختيار الالوان ، يجب اختيار اسم الكتاب عند اختيار الالوان ، وبالتالي نكون حصلنا على الحسنيين وحلينا موضوع جميع الكتب 🙂 وما شاءالله طريقتك اخي حمدي في استدعاء الالوان يحتاج لها التغيير البسيط للبحث عن حقل الكتاب (الجديد) 🙂 جعفر
  10. نعم ما يظهر التكرار ، ولكن وحسب الصور من الفيديو ، واضح ان الكود يُنشئ سجلات جديدة ويتم حذفها !! اعمل مثل ما اخبرتك بالنسبة للجدول: جعفر
  11. النواة الواحدة لا تعرف شيء عن النواة الاخرى ، ولكن لطالما اشتغل الكود بدون اخطاء ، فهذا معناه اترك السطر باللون الاحمر لحاله 🙂 انا لاحظت نموذج اختيار الالوان ، وطريقة حفظ رقم اللون في الجدول (الاهم انك لم تحفظه عن طريق RGB ، وإلا لن تستطيع الاستفادة منه مباشرة في الكود ، دون تفكيك الالوان) ، ومناداته من هناك ، وطريقة الاكواد وعمل الوحدة النمطية كان ذكي 🙂 في الواقع عمل نظيف 🙂 وكذلك لاحظت وجود بعض الوحدات التي تحتاج تنظيف وازالة 😁 جعفر
  12. الحمدلله 🙂 عندي ملاحظة على الفيديو الذي الرسلته: هذه الصور توضح الى انك تعمل سجلات جديدة ، ولكن بطريقة ما يتم حذفها (قد يكون بسبب فهرسة وعدم تكرار لحقل الباركود في الجدول) ، مثل : . و . ثم . ولترى اذا ما ذكرته صحيح ، في الجدول الذي فيه بيانات هذا النموذج الفرعي ، شوف حقل "الترقيم التلقائي" (واذا ما عندك ، اعمل واحد) ، ثم شوف التسلسل ، فهل ترى ارقام غير موجودة في التسلسل ، اذا نعم ، فالسبب كما اخبرتك اعلاه. ولا ارى سبب وجود الامر On Error Resume Next في الحدثين ، قبل التحديث وبعد التحديث ، فإذا اردت معرفة ان العملية مافيها مشاكل ، فمؤقتا اوقف عمل السطرين وشوف اذا فيه خطأ ، وشو سطر ورسالة الخطأ. جعفر
  13. طريقة ColumnHistory فعالة وجديرة بالاهتمام لإختزالها الكثير من الخطوات (وحتى مافي داعي نراقب هذا الحقل من جدول آخر 🙂 ) ، اخي الاستاذ ابو إبراهيم ، شكرا على الشرح والتوضيح ، فإمكانياتك على الشرح بأمثلة جدا مميزة 🙂 جعفر
  14. لم اغير في الشفرة ، بل اضفت طريقتي للحصول على بيانات نظيفة كما في المربع الاحمر (ونتائجه) ، وتأكدت ان المكتبات كلها موجودة ، وعملت 3 تعديلات على الحقل ، الكود كان يقف على السطر الذي عليه السهم ، ثم الى سطر End Function دون الدخول في حلقة For الاولى . طبعا كلامنا ليس على الموضوع الذي تفضلت به ، ولكن كلامنا عن نتائج RegExp . جعفر
  15. جميل ، شكرا اخوي ابوابراهيم ، لم اكن اعرف هذه الخاصية🙂 والكود الذي ارفقته ، لم تظهر نتائج RegExp !! جعفر
  16. تفضل 🙂 ولكن يجب ان تختار الجدول الصحيح في الاستعلام ، ثم يجب ان تغير اسم الحقل من Date_in الى اسم الحقل الحقيقي ، يجب تبديله في المعادلة 🙂 اخي حسين ، يجب اضافة الوقت كذلك في معادلتك ، ليس اليوم فقط 🙂 جعفر 1459.unix_tTime_Stamp.accdb.zip
  17. اذا كنت تريد "جعل النموذج المستمر دائما وأبدا يقف أو يعمل SetFocus على سجل جديد" في النموذج الرئيسي ، اذن استعمل الكود في النموذج الرئيسي ، وإلا فيمكنك استخدامه في النموذج الفرعي . او استخدام كود اخونا ازهر في النموذج الرئيسي ، اذا اردت السجل الجديد والمؤشر يقف في النوذج الفرعي 🙂 واذا دوخك كلامي ، فاعمل تجربة في النوذج الرئيسي ، واذا ما نفع ، فاعمله في الفرعي 🙂 جعفر
  18. استاذي الفاضل ، لنا الشرف في التعامل معك 🙂 جعفر
  19. السلام عليكم 🙂 هذه الطريقة من نوادر و درر الاكسس التي يعرفها القلة ، وخصوصا انها مخبأة في الجداول ، وحسب فهمنا القديم للجداول انها لا تُبرمج !! في الواقع هناك الكثير من الاستعمالات التي ممكن ان نستفيدها من هذه البرمجة ، وخصوصا بإستخدامها لمناداة دوال ، والتي يمكنها بقية الاوامر دون التقيد بأوامر DataMacro القليلة 🙂 اخوي ابوخليل ، كان لازم تربط بين اسم الموضوع "سِحر ..." ، وبجنسية أخونا موسى العماني 😄 ولكن هذه النقطة ما فاتت اخوي ابوجودي: تم الاجابة على هذا السؤال في النقطة 5 من مشاركتي اعلاه ، وهذه طريقة عملهم (طبعا من برنامج الواجهة) : Call FormAudit("Salaries", 0, 0, fOSUsername(), fOSMachineName(), "Browse", "", "") --------------- وهذه الدالة اعلاه Public Function FormAudit(FormName, PageName, RecordID, ChangeBy, ChangedOn, Change_Delete_Insert, Full_Name, Employee_ID) 'ChangeID ChangeDate TableName Fieldname RecordID OldValue NewValue ChangeBy ChangedOn Change_Delete_Insert Full_Name Employee_ID Dim db As DAO.Database Dim mySQL As String Dim Path As String Call BE_or_FE Path = Replace(BE_Path, "Personnel_Images", "") & "ABC_BE.accdb" Set db = OpenDatabase(Path) mySQL = "INSERT INTO tbl_x_AuditTrail ( TableName, Fieldname, RecordID, ChangeBy, ChangedOn, Change_Delete_Insert, Full_Name, Employee_ID ) IN '" & Path & "'" mySQL = mySQL & " SELECT '" & FormName & "','" & PageName & "','" & RecordID & "','" & ChangeBy & "','" & ChangedOn & "','" & Change_Delete_Insert & "','" & Full_Name & "'," & Nz(Employee_ID, 0) 'Debug.Print mySQL db.Execute mySQL ', dbFailOnError Set db = Nothing End Function --------------- وهاتان الدالتان لإسم المستخدم واسم الكمبيوتر الذي كان يستخدمه Private Declare PtrSafe Function apiGetUserName Lib "advapi32.dll" Alias _ "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long Private Declare PtrSafe Function apiGetComputerName Lib "kernel32" Alias _ "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long Function fOSUsername() As String ' Returns the network login name 'if the user logged in with his FE password, use it If Len(user_n & "") <> 0 Then fOSUsername = user_n Exit Function End If Dim lngLen As Long, lngX As Long Dim strUserName As String strUserName = String$(254, 0) lngLen = 255 lngX = apiGetUserName(strUserName, lngLen) If (lngX > 0) Then fOSUsername = Left$(strUserName, lngLen - 1) Else fOSUsername = vbNullString End If End Function ' This code was originally written by Dev Ashish. ' It is not to be altered or distributed, ' except as part of an application. ' You are free to use it in any application, ' provided the copyright notice is left unchanged. ' ' Code Courtesy of Dev Ashish Function fOSMachineName() As String 'Returns the computername Dim lngLen As Long, lngX As Long Dim strCompName As String lngLen = 16 strCompName = String$(lngLen, 0) lngX = apiGetComputerName(strCompName, lngLen) If lngX <> 0 Then fOSMachineName = Left$(strCompName, lngLen) Else fOSMachineName = "" End If End Function جعفر
  20. في الواقع تقريبا كنت برفع يدي استسلم ، بدون مرفق 🙂 ولكن الفيديو اوضح الخطأ في الكود ، وهو اني لم انتبه للسجل الجديد الفارغ ، فاليك التعديل if me.newrecord=false then if me.Barcode<>me.BarCode.text then docmd.gotorecord,, acnewrec me.Barcode.setfocus exit sub end if end if جعفر
  21. السلام عليكم 🙂 مايكروسوفت عملت اضافة لجداول الاكسس 2010 (وتم ابقاء هذه الميزة للنسخ التالية) ، عملت الاحداث التالية لكل حقل (حقول النص والتاريخ والرقم (ويشمل الرقم التلقائي و العملة) فقط) وهذه الاحداث (هناك تسمى Trigger) كانت ميزة في جداول SQL Server : للسجلات : حدث بعد ادخال السجل ، حدث بعد حذف السجل ، حدث قبل حذف السجل ، للحقول : حدث بعد تحديث الحقل ، حدث قبل تحديث الحقل ويمكن عمل هذه الاحداث والجدول في وضع التصميم: . او الجدول في وضع . لغة كتابة الاحداث ليست VBA وانما الماكرو المضمن ، والذي يمكنه ان ينادي دالة في وحدة نمطية هكذا (هنا ننادي الدالة fMsgbox) : . هناك طريقتين لكتابة الماكرو المضمن ، ونتيجة الكتابة النهائية هي كما نراها في الصورة التالية : - الطريقة اليدوية (وعيبها انها بطيئة ، وخصوصا اذا عندك حقول كثيرة في الجدول ، وعندك جداول كثيرة ، وعندك برامج كثيرة) 1. اذا لم يستطع الماكرو المضمن تنفيذ احد الاوامر ، فإنه يعمل جدول للاخطاء التي صادفها ، اسمه USysApplicationLog ، وتراه هنا: . او ولأنه جدول نظام ، فيكون مخفي ، الى ان تطلب من الاكسس ان يُظهر جميع جداول النظام ، فترى الجدول . لذا ومن واقع تجربة ، انصح بكتابة هذا السطر الاول (لتلافي اي اخطاء ، مما يؤدي لتوقف عمل الماكرو) ، 2. نكتب السطر كما هو ، بعد تغيير اسم الحقل الفريد/المميز في بياناته والمفرس بلا تكرار (انصح بأن يكون عندك حقل فريد ومميز في بياناته ، وانا دائما استعمل في برامجي حقل الترقيم التلقائي ، والذي نستفيد منه هنا استفادة قصوى ، فهو الدليل على محتويات السجل) ، 3. نظيف سجل جديد في الجدول الأخر ، 4. نبدأ بتعبئة الحقول بالامر SetField ، ثم اسم الحقل ، ثم قيمة الحقل ، ونستمر لعدد الحقول التي نريد اضافة بياناتها للجدول الآخر ، . - طريقة برمجية عن طريق عمل ملف XML نضع فيه الاوامر اعلاه ، ثم نستورده لقاعدة البيانات ، والملف عبارة عن ملف نصي ولكن بصيغة XML ، يجمع فيه جميع الاحداث (مرفق نسخة من الملف لقاعدة البيانات التي تم ارفاقها في مشاركتي الاولى) واليكم الجزء للحدث الذي في الصورة الاعلى . وثم نستخدم الكود التالي لإستيراد هذا الملف: من نفس برنامج الاكسس application.LoadFromText acTableDataMacro, "Table_Name", "D:\xml_File.xml" من برنامج اكسس خارجي 'Insert/Load this DataMacro in the Table Events Dim accApp As Object Set accApp = CreateObject("Access.Application") accApp.OpenCurrentDatabase Me.str_DB_Name 'D:\temp\myDB.accdb accApp.LoadFromText acTableDataMacro, Me.lst_Tables, xml_File accApp.CloseCurrentDatabase accApp.Quit Set accApp = Nothing . والطريقة التي عرفت بها الكود اعلاه ، هي: اعمل كود في احد هذه الاحداث او في جميعها ، وليكن بضعة اسطر حتى لا نضيع في الاكواد ، واحفظ الجدول ، ثم استخدم هذا الكود لتصدير DataMacro الذي عملناه لهذا الجدول ، هكذا : application.SaveAsText acTableDataMacro, "Table_Name", "D:\xml_File.xml" . نصائح: اختار الحقول المهمة ، ولا تستعمل جميع الحقول ، الجدول tbl_x_AuditTrail سيزداد حجمه بسرعة ، ولكن كثرة الجداول وكثرة عدد المستخدمين لا يُبطئ العمل ، في الجدول tbl_x_AuditTrail هناك حقل ChangeBy وهو اسم المستخدم عند دخوله الكمبيوتر ، وحقل ChangedOn وهو اسم الكمبيوتر الذي تم التعديل منه ، هاتان الدالتان تكونان في برنامج الواجهة ، طبعا يمكن استبدالها باسم المستخد حسب الصلاحيات ، وIP الكمبيوتر اذا كان لإسم الكمبيوتر اهمية ، الجدول tbl_x_AuditTrail لا تسمح لأحد ان يراه ، لأنه يمكن حذف وتغيير بياناه ، فيصبح عديم الفائدة ، وبما ان برنامجنا كان ذو بيانات حساسة ، فكنا نراقب من يتصفح البيانات كذلك ، بمناداة دالة عند حدث "الحالي" للنموذج ، ونستعمل "Browse" في حقل عن Change_Delete_Insert . ------------------------------------------ 2024-10-30 قاعدة بيانات وبها نموذج لعمل الجميع اعلاه برمجيا جعفر tbl_info_DataMacro.xml.zip
  22. يستاهل ونص (بس الظاهر انت اعطيته 10x ، يعني اكثر مني) 🙂 الحمدلله ، الجميع في النتدى للمساعدة 🙂 جعفر
  23. هممم طلبت منك ذاك لان موضوعك الثاني كان مخالف وتم اغلاقه ، فرايت ان اسهل طريقة لك هو الرجوع هنا 🙂 معلش ، اسمح لي على اللخبطة اللي عملتها لك 🙂 جعفر
  24. السلام عليكم 🙂 من قرأتي عن قاعدة البيانات MySQL ، فإن التاريخ مع الوقت يتم تخزينهم: نوع التاريخ هو unix_time ، وهنا شرح له بطريقة مبسطة وبما حي : https://unixtime.org/ بالثواني ، على شكل رقم كامل ، على وقت GreenWich ، يعني وقت بريطانيا UTC ، لهذا السبب يجب عليك ان تضيف فارق الوقت "التوقيت العالمي" للمكان اللي انت فيه ، ومثل ما تفضلت في السعودية هو +3 الثواني تبدأ من التاريخ يبدا من 1-1-1970 يعني التاريخ 1643490000 هو حسب المعادلة اعلاه 2022-01-29 09:00:00 PM بينما يجب اضافة +3 ساعات فارق الوقت بين منطقتكم وبريطانيا ، فتصبح المعادلة كالتالي (والوقت يصبح 2022-01-30 12:00:00 AM) : d: Format(DateAdd("s",[Date_in],#01-01-1970 3:00:00#),"yyyy-mm-dd hh:nn:ss ampm") . المعادلة (بإستثناء اول حرفين على اليسار :d) ، يمكن استعمالها في اي مكان في قاعدة البيانات ، والطريقة اللي اعطيتك هي انك تعمل استعلام ، وتستخدم الجدول كمصدر بيانات للاستعلام ، ثم تضع الكود (في الكود لم استعمل :d وانما استخدمت مسميات اخرى للتوضيح) . والنتيجة . . جعفر
×
×
  • اضف...

Important Information