-
Posts
9911 -
تاريخ الانضمام
-
تاريخ اخر زياره
-
Days Won
404
نوع المحتوي
المنتدى
مكتبة الموقع
معرض الصور
المدونات
الوسائط المتعددة
كل منشورات العضو jjafferr
-
مساعدة فى كود عند فتح النموذج المستمر الوقوف دائما على سجل جديد
jjafferr replied to walid7799's topic in قسم الأكسيس Access
اذا كنت تريد "جعل النموذج المستمر دائما وأبدا يقف أو يعمل SetFocus على سجل جديد" في النموذج الرئيسي ، اذن استعمل الكود في النموذج الرئيسي ، وإلا فيمكنك استخدامه في النموذج الفرعي . او استخدام كود اخونا ازهر في النموذج الرئيسي ، اذا اردت السجل الجديد والمؤشر يقف في النوذج الفرعي 🙂 واذا دوخك كلامي ، فاعمل تجربة في النوذج الرئيسي ، واذا ما نفع ، فاعمله في الفرعي 🙂 جعفر -
استاذي الفاضل ، لنا الشرف في التعامل معك 🙂 جعفر
-
السلام عليكم 🙂 هذه الطريقة من نوادر و درر الاكسس التي يعرفها القلة ، وخصوصا انها مخبأة في الجداول ، وحسب فهمنا القديم للجداول انها لا تُبرمج !! في الواقع هناك الكثير من الاستعمالات التي ممكن ان نستفيدها من هذه البرمجة ، وخصوصا بإستخدامها لمناداة دوال ، والتي يمكنها بقية الاوامر دون التقيد بأوامر 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 جعفر
-
اريد من حضرتكم عند ادخال صنف ثاني جديد يفتح سجل جديد (معدل)
jjafferr replied to مهند محسن's topic in قسم الأكسيس Access
في الواقع تقريبا كنت برفع يدي استسلم ، بدون مرفق 🙂 ولكن الفيديو اوضح الخطأ في الكود ، وهو اني لم انتبه للسجل الجديد الفارغ ، فاليك التعديل if me.newrecord=false then if me.Barcode<>me.BarCode.text then docmd.gotorecord,, acnewrec me.Barcode.setfocus exit sub end if end if جعفر -
السلام عليكم 🙂 مايكروسوفت عملت اضافة لجداول الاكسس 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
-
يستاهل ونص (بس الظاهر انت اعطيته 10x ، يعني اكثر مني) 🙂 الحمدلله ، الجميع في النتدى للمساعدة 🙂 جعفر
-
هممم طلبت منك ذاك لان موضوعك الثاني كان مخالف وتم اغلاقه ، فرايت ان اسهل طريقة لك هو الرجوع هنا 🙂 معلش ، اسمح لي على اللخبطة اللي عملتها لك 🙂 جعفر
-
حقل التاريخ في الاكسس بشكل ارقام غير مفهومه
jjafferr replied to sramadah's topic in قسم الأكسيس Access
السلام عليكم 🙂 من قرأتي عن قاعدة البيانات 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 وانما استخدمت مسميات اخرى للتوضيح) . والنتيجة . . جعفر -
اخي الفاضل 🙂 بما ان هذا الموضوع تتمة للموضوع . فرجاء وضع مشاركتك هناك. جعفر
-
السلام عليكم 🙂 وما في كائنات مخفية 🙂 والنتيجة النهائية ، لاحظوا الحقل الاخير على اليمين Change_Delete_Insert ، فهو يخبرنا اذا قمنا بعملة تعديل او حذف او اضافة : . جعفر Access Tables Magic.accdb.zip
- 25 replies
-
- 13
-
-
-
-
حياك الله 🙂 السؤال التالي: على اي اساس تطبع هذه القائمة في هذا اليوم بالذات ، ما هو السبب او المعيار ؟ القصد ، انه ممكن عن طريق احد الحقول او حقل جديد ممكن نجعل جميع الاسماء يتم طباعتها مرة واحد بدل ان تبحث عن الاسم ثم تطبعه ، مثلا: اذا كان عندنا تاريخ الميلاد كاملا بالسنة والشهر واليوم ، فتستطيع ان تخبر الكمبيوتر بطباعة الاسماء في تاريخ الميلاد او قبله باسبوع مثلا ، او الذين وصل عمرهم الى العمر الفلاني هذا اليوم ، او ... ولو اضفنا حقل تاريخ انتهاء الهوية ، فكذلك ممكن طباعة القائمة التي ستنتهي هوياتهم بعد شهر مثلا ... جعفر
-
مساعدة فى كود عند فتح النموذج المستمر الوقوف دائما على سجل جديد
jjafferr replied to walid7799's topic in قسم الأكسيس Access
وعليكم السلام ورحمة الله وبركاته 🙂 في حدث فتح النموذج ، او حدث عند التحميل ، ضع هذا الكود: docmd.gotorecord,, acnewrec جعفر -
حمابة فكرة لحماية البرنامج عند التوزيع و ضمان توافقه مع جهاز العميل
jjafferr replied to Amr Ashraf's topic in قسم الأكسيس Access
السؤال هو ، الشركات المحترفة كيف تتعامل الرقم السري ، اذا كان موجود في برنامج التنصيب ؟ جعفر -
اريد من حضرتكم عند ادخال صنف ثاني جديد يفتح سجل جديد (معدل)
jjafferr replied to مهند محسن's topic in قسم الأكسيس Access
السلام عليكم اخوي مهند 🙂 قبل ان ترسل الملف ، اريدك ترسل لي الكود خلف حقل الباركود وبعد ان تكون قد ادخلت الكود الذي في مشاركتي السابقة (الذي قلت انه لم يتغير شيء)، وجميع الاحداث اللي لها علاقة بهذا الحقل ، الشيء الذي جاء على بالي ، انه بعد ادخال الباركود ، كان يجب ان ينتقل المؤشر الى الحقل التالي ، بينما في وضعك فإنه لم ينتقل ، فهذا معناه انه هناك كود يمنعه من ذلك ، لذا اريد اشوف الكود 🙂 جعفر -
تفضل ، الاكسس يعمل كل شيء وبدون تدخل الوورد 🙂 هذا النموذج ، يمكنك ادخال البيانات ، والطباعة او معاينة التقرير . وهذا التقرير تراه بزر "معاينة التقرير" ويمكنك طباعته ، او تطبعه مباشرة من زر "طباعة التقرير" ، من النموذج . جعفر 1461.accdb.zip
-
اريد من حضرتكم عند ادخال صنف ثاني جديد يفتح سجل جديد (معدل)
jjafferr replied to مهند محسن's topic in قسم الأكسيس Access
اذن لم يبقى إلا ان اشوف هذه الجزئية من برنامجك ، وتقدر يا انك ترفقه هنا ، واذا كنت ما تريد وضعه هنا ، تقدر تحمله في اجد مواقع التحميل ، ثم ترسل الرابط برسالة خاصة لي 🙂 جعفر -
وكان فيه طلب لتقريب الرقم بطريقة خاصة ، زين تقرأه كذلك : جعفر
-
جرب هاي المعادلة في مصدر بيانات حقل مبلغ التقريب: =Round([المبلغ]/1000,0)*1000 المبلغ = 284667 نقسمه على 1000 (عدد الخانات التي تريد تقريبها) = 284.667 نقرب الرقم باستخدان الامر Round ، وعدد الخانات العشرية = 0 ، فتكون النتيجة 285 نضرب الرقم في 1000 لكي يرجع لى نفس حجم الخانات السابقة = 285 * 1000 = 285000 وبما اننا استعملنا امر التقريب ، فاليك مثال للنتيجة اللرقم التالي: 284499 = 284000 284500 = 284000 284501 = 285000 فأي رقم اكبر من 500 سيتم تقريبه الى الرقم الاعلى. جعفر
-
هنا ويجب ان نتوقف !! ما ادري ما الفائدة من هذا التغيير الجديد الذي وضعته ، رجاء تشرح لنا ، لأن الظاهر انه في تشويش في التفكير !! اذا كان هذا النموذج فاتورة : في النموذج الرئيسي تكون عندك رقم الفاتورة والتاريخ واسم المشتري واذا كانت الفاتورة نقدا/على الحساب ، ويمكنك اضافة المزيد من البيانات ، يجب ان يكون عندك نموذج مستمر (الافضل ان يكون نموذج فرعي) تضع فيه المواد المشتراة ، وكميتها وسعرها لا علاقة بالمورّد في الفاتورة. جعفر
-
ماهي البيانات التي تريدها ان تظهر في كل صفحة : يعني هل البيانات موجودة في قاعدة البيانات ، وماهي الحقول ، وكيف تقرر انك تريد تطبع لفلان او فلان ، وهل تطبع الورقة التي بها البيانات ، او تريد ارسال ملف وورد/pdf لمكان ما ؟؟ يمكنك ارفاق صورة من التقرير/ التقارير ، حتى نعرف التنسيق المطلوب. جعفر
-
وعليكم السلام ورحمة الله وبركاته 🙂 اخي يونس ، اطلعت على ملفي الوورد ، ورأيت بأنك ترسل بيانات له من الاكسس. سؤال: لماذا تعمل هذا في الوورد ، لماذا لا تستعمل تقرير الاكسس ليقوم بالعمل كاملا ، واذا اردت النتيجة في ملف وورد ، فيمكنك التصدير لملف rtf. والذي يقرأه وورد !! اما الجواب على سؤالك: لماذا لا ينفتح الملف الثاني ، فكما كتبت انت ، لأن به ماكرو 🙂 جعفر
-
وعليكم السلام 🙂 سيدي الفاضل ، 1. الطريقة الصحيح في الاكسس ، هو عدم حفظ الحقل المحسوب في الجدول ، لأنه متغير وقد يتغير بعد حفظك له في الجدول ، بينما طريقة عرضة سهلة ، وهي ضرب حقل الكمية x السعر ، لذلك فالافضل هو ان تجعل الاستعلام مصدر لبيانات النموذج ، وفي الاستعلام تعمل حقل الاجمالي بضرب الحقلين الكمية x السعر ، 2. صحيح انك طلبت المجموع الكلي للشهر ، ولكن هل هناك معايير اخرى ، مثل: المجموع الاجمالي لنوع المصروفات (القهوة مثلا كما في الصورة اعلاه) ، او المجموع الاجمالي لاسم المورد (كما في الصورة اعلاه) ؟ جعفر
-
عندك محموعة اشياء يحتاج لها تعديل ، والقائمة ليست بترتيب الاولوية : 1. علشان اللون يظهر ، يجب ان تكون خلفية الحقول عادية وليست شفافة . 2. جميع الحقول عندك غير مُمكّنه ، فلا تستطيع ان تضع عليها التركيز ، فيجب ان تعملها مُمكّنه (هذا اذا اردت الاستفادة من تظليل السطر عند النقر على اي حقل ، وإلا فلا داعي لتغييره) . 3. في جميع الاكواد ، يجب استعمال حقل بياناته لا تتكرر ، بينما انت استعملت الحقل toDelete والذي بياناته متكررة ، وبعد النظر في الاستعلام مصدر بيانات النموذج ، اتضح بأنه لدية الحقل Auto_ID ، فوضعته في النموذج وجعلته مخفي ، واستعملته في الاكواد ، 4. عملت تغيير في اسم الحقل tmp_Ticket_No الى tmp_tmp 5. آخذا في الاعتبار جميع النقاط اعلاه ، تم تغيير الكود في التنسيق الشرطي والاكود باسماء الحقول الجديدة 🙂 جعفر DATA1041.zip
-
اريد من حضرتكم عند ادخال صنف ثاني جديد يفتح سجل جديد (معدل)
jjafferr replied to مهند محسن's topic in قسم الأكسيس Access
شكرا 🙂 في حقل الباركود (ولنسمية Barcode) ، على حدث "بعد التحديث" ، اكتب التالي ، ولكن اكتبه في بداية الحدث قبل اي كود آخر عملته انت : if me.Barcode<>me.BarCode.text then docmd.gotorecord,, acnewrec me.Barcode.setfocus exit sub end if جعفر -
حقل التاريخ في الاكسس بشكل ارقام غير مفهومه
jjafferr replied to sramadah's topic in قسم الأكسيس Access
جرب هذه المعادلة في الاستعلام: d: Format(DateAdd("s",[Date_in],#01-01-1970#),"yyyy-mm-dd hh:nn:ss ampm") بس غيّر اسم الحقل من Date_in الى الاسم الحقيقي 🙂 جعفر