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

jjafferr

أوفيسنا
  • Posts

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

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

  • Days Won

    404

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

  1. اذا كنت تريد "جعل النموذج المستمر دائما وأبدا يقف أو يعمل SetFocus على سجل جديد" في النموذج الرئيسي ، اذن استعمل الكود في النموذج الرئيسي ، وإلا فيمكنك استخدامه في النموذج الفرعي . او استخدام كود اخونا ازهر في النموذج الرئيسي ، اذا اردت السجل الجديد والمؤشر يقف في النوذج الفرعي 🙂 واذا دوخك كلامي ، فاعمل تجربة في النوذج الرئيسي ، واذا ما نفع ، فاعمله في الفرعي 🙂 جعفر
  2. استاذي الفاضل ، لنا الشرف في التعامل معك 🙂 جعفر
  3. السلام عليكم 🙂 هذه الطريقة من نوادر و درر الاكسس التي يعرفها القلة ، وخصوصا انها مخبأة في الجداول ، وحسب فهمنا القديم للجداول انها لا تُبرمج !! في الواقع هناك الكثير من الاستعمالات التي ممكن ان نستفيدها من هذه البرمجة ، وخصوصا بإستخدامها لمناداة دوال ، والتي يمكنها بقية الاوامر دون التقيد بأوامر 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 جعفر
  4. في الواقع تقريبا كنت برفع يدي استسلم ، بدون مرفق 🙂 ولكن الفيديو اوضح الخطأ في الكود ، وهو اني لم انتبه للسجل الجديد الفارغ ، فاليك التعديل if me.newrecord=false then if me.Barcode<>me.BarCode.text then docmd.gotorecord,, acnewrec me.Barcode.setfocus exit sub end if end if جعفر
  5. السلام عليكم 🙂 مايكروسوفت عملت اضافة لجداول الاكسس 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
  6. يستاهل ونص (بس الظاهر انت اعطيته 10x ، يعني اكثر مني) 🙂 الحمدلله ، الجميع في النتدى للمساعدة 🙂 جعفر
  7. هممم طلبت منك ذاك لان موضوعك الثاني كان مخالف وتم اغلاقه ، فرايت ان اسهل طريقة لك هو الرجوع هنا 🙂 معلش ، اسمح لي على اللخبطة اللي عملتها لك 🙂 جعفر
  8. السلام عليكم 🙂 من قرأتي عن قاعدة البيانات 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 وانما استخدمت مسميات اخرى للتوضيح) . والنتيجة . . جعفر
  9. اخي الفاضل 🙂 بما ان هذا الموضوع تتمة للموضوع . فرجاء وضع مشاركتك هناك. جعفر
  10. السلام عليكم 🙂 وما في كائنات مخفية 🙂 والنتيجة النهائية ، لاحظوا الحقل الاخير على اليمين Change_Delete_Insert ، فهو يخبرنا اذا قمنا بعملة تعديل او حذف او اضافة : . جعفر Access Tables Magic.accdb.zip
  11. حياك الله 🙂 السؤال التالي: على اي اساس تطبع هذه القائمة في هذا اليوم بالذات ، ما هو السبب او المعيار ؟ القصد ، انه ممكن عن طريق احد الحقول او حقل جديد ممكن نجعل جميع الاسماء يتم طباعتها مرة واحد بدل ان تبحث عن الاسم ثم تطبعه ، مثلا: اذا كان عندنا تاريخ الميلاد كاملا بالسنة والشهر واليوم ، فتستطيع ان تخبر الكمبيوتر بطباعة الاسماء في تاريخ الميلاد او قبله باسبوع مثلا ، او الذين وصل عمرهم الى العمر الفلاني هذا اليوم ، او ... ولو اضفنا حقل تاريخ انتهاء الهوية ، فكذلك ممكن طباعة القائمة التي ستنتهي هوياتهم بعد شهر مثلا ... جعفر
  12. وعليكم السلام ورحمة الله وبركاته 🙂 في حدث فتح النموذج ، او حدث عند التحميل ، ضع هذا الكود: docmd.gotorecord,, acnewrec جعفر
  13. السؤال هو ، الشركات المحترفة كيف تتعامل الرقم السري ، اذا كان موجود في برنامج التنصيب ؟ جعفر
  14. السلام عليكم اخوي مهند 🙂 قبل ان ترسل الملف ، اريدك ترسل لي الكود خلف حقل الباركود وبعد ان تكون قد ادخلت الكود الذي في مشاركتي السابقة (الذي قلت انه لم يتغير شيء)، وجميع الاحداث اللي لها علاقة بهذا الحقل ، الشيء الذي جاء على بالي ، انه بعد ادخال الباركود ، كان يجب ان ينتقل المؤشر الى الحقل التالي ، بينما في وضعك فإنه لم ينتقل ، فهذا معناه انه هناك كود يمنعه من ذلك ، لذا اريد اشوف الكود 🙂 جعفر
  15. تفضل ، الاكسس يعمل كل شيء وبدون تدخل الوورد 🙂 هذا النموذج ، يمكنك ادخال البيانات ، والطباعة او معاينة التقرير . وهذا التقرير تراه بزر "معاينة التقرير" ويمكنك طباعته ، او تطبعه مباشرة من زر "طباعة التقرير" ، من النموذج . جعفر 1461.accdb.zip
  16. اذن لم يبقى إلا ان اشوف هذه الجزئية من برنامجك ، وتقدر يا انك ترفقه هنا ، واذا كنت ما تريد وضعه هنا ، تقدر تحمله في اجد مواقع التحميل ، ثم ترسل الرابط برسالة خاصة لي 🙂 جعفر
  17. وكان فيه طلب لتقريب الرقم بطريقة خاصة ، زين تقرأه كذلك : جعفر
  18. جرب هاي المعادلة في مصدر بيانات حقل مبلغ التقريب: =Round([المبلغ]/1000,0)*1000 المبلغ = 284667 نقسمه على 1000 (عدد الخانات التي تريد تقريبها) = 284.667 نقرب الرقم باستخدان الامر Round ، وعدد الخانات العشرية = 0 ، فتكون النتيجة 285 نضرب الرقم في 1000 لكي يرجع لى نفس حجم الخانات السابقة = 285 * 1000 = 285000 وبما اننا استعملنا امر التقريب ، فاليك مثال للنتيجة اللرقم التالي: 284499 = 284000 284500 = 284000 284501 = 285000 فأي رقم اكبر من 500 سيتم تقريبه الى الرقم الاعلى. جعفر
  19. هنا ويجب ان نتوقف !! ما ادري ما الفائدة من هذا التغيير الجديد الذي وضعته ، رجاء تشرح لنا ، لأن الظاهر انه في تشويش في التفكير !! اذا كان هذا النموذج فاتورة : في النموذج الرئيسي تكون عندك رقم الفاتورة والتاريخ واسم المشتري واذا كانت الفاتورة نقدا/على الحساب ، ويمكنك اضافة المزيد من البيانات ، يجب ان يكون عندك نموذج مستمر (الافضل ان يكون نموذج فرعي) تضع فيه المواد المشتراة ، وكميتها وسعرها لا علاقة بالمورّد في الفاتورة. جعفر
  20. ماهي البيانات التي تريدها ان تظهر في كل صفحة : يعني هل البيانات موجودة في قاعدة البيانات ، وماهي الحقول ، وكيف تقرر انك تريد تطبع لفلان او فلان ، وهل تطبع الورقة التي بها البيانات ، او تريد ارسال ملف وورد/pdf لمكان ما ؟؟ يمكنك ارفاق صورة من التقرير/ التقارير ، حتى نعرف التنسيق المطلوب. جعفر
  21. وعليكم السلام ورحمة الله وبركاته 🙂 اخي يونس ، اطلعت على ملفي الوورد ، ورأيت بأنك ترسل بيانات له من الاكسس. سؤال: لماذا تعمل هذا في الوورد ، لماذا لا تستعمل تقرير الاكسس ليقوم بالعمل كاملا ، واذا اردت النتيجة في ملف وورد ، فيمكنك التصدير لملف rtf. والذي يقرأه وورد !! اما الجواب على سؤالك: لماذا لا ينفتح الملف الثاني ، فكما كتبت انت ، لأن به ماكرو 🙂 جعفر
  22. وعليكم السلام 🙂 سيدي الفاضل ، 1. الطريقة الصحيح في الاكسس ، هو عدم حفظ الحقل المحسوب في الجدول ، لأنه متغير وقد يتغير بعد حفظك له في الجدول ، بينما طريقة عرضة سهلة ، وهي ضرب حقل الكمية x السعر ، لذلك فالافضل هو ان تجعل الاستعلام مصدر لبيانات النموذج ، وفي الاستعلام تعمل حقل الاجمالي بضرب الحقلين الكمية x السعر ، 2. صحيح انك طلبت المجموع الكلي للشهر ، ولكن هل هناك معايير اخرى ، مثل: المجموع الاجمالي لنوع المصروفات (القهوة مثلا كما في الصورة اعلاه) ، او المجموع الاجمالي لاسم المورد (كما في الصورة اعلاه) ؟ جعفر
  23. عندك محموعة اشياء يحتاج لها تعديل ، والقائمة ليست بترتيب الاولوية : 1. علشان اللون يظهر ، يجب ان تكون خلفية الحقول عادية وليست شفافة . 2. جميع الحقول عندك غير مُمكّنه ، فلا تستطيع ان تضع عليها التركيز ، فيجب ان تعملها مُمكّنه (هذا اذا اردت الاستفادة من تظليل السطر عند النقر على اي حقل ، وإلا فلا داعي لتغييره) . 3. في جميع الاكواد ، يجب استعمال حقل بياناته لا تتكرر ، بينما انت استعملت الحقل toDelete والذي بياناته متكررة ، وبعد النظر في الاستعلام مصدر بيانات النموذج ، اتضح بأنه لدية الحقل Auto_ID ، فوضعته في النموذج وجعلته مخفي ، واستعملته في الاكواد ، 4. عملت تغيير في اسم الحقل tmp_Ticket_No الى tmp_tmp 5. آخذا في الاعتبار جميع النقاط اعلاه ، تم تغيير الكود في التنسيق الشرطي والاكود باسماء الحقول الجديدة 🙂 جعفر DATA1041.zip
  24. شكرا 🙂 في حقل الباركود (ولنسمية Barcode) ، على حدث "بعد التحديث" ، اكتب التالي ، ولكن اكتبه في بداية الحدث قبل اي كود آخر عملته انت : if me.Barcode<>me.BarCode.text then docmd.gotorecord,, acnewrec me.Barcode.setfocus exit sub end if جعفر
  25. جرب هذه المعادلة في الاستعلام: d: Format(DateAdd("s",[Date_in],#01-01-1970#),"yyyy-mm-dd hh:nn:ss ampm") بس غيّر اسم الحقل من Date_in الى الاسم الحقيقي 🙂 جعفر
×
×
  • اضف...

Important Information