-
Posts
4241 -
تاريخ الانضمام
-
Days Won
180
نوع المحتوي
التقويم
المنتدى
مكتبة الموقع
معرض الصور
المدونات
الوسائط المتعددة
كل منشورات العضو Foksh
-
ما عليك سوى استبدال أسماء مربعات النص التي سيتم البحث والفلترة من خلالها ، واسم الحقل المستهدف البحث فيه .. ثم أن الدالة عبارة عن جملتين شرطيتين فقط لا غير 😅 .
-
وعليكم السلام ورحمة الله وبركاته .. لدي دالة تجلب جميع أرقام الهارد ديسك ( القرص الصلب ) حتى لو كان لديك أكثر من هارد موصول على نفس الكمبيوتر .. Public Function GetAllHardDiskSerials() As String On Error GoTo ErrorHandler Dim objWMIService As Object Dim colDisks As Object Dim objDisk As Object Dim result As String Dim i As Integer Set objWMIService = GetObject("winmgmts:\\.\root\cimv2") Set colDisks = objWMIService.ExecQuery("SELECT * FROM Win32_DiskDrive") i = 1 For Each objDisk In colDisks If Not IsNull(objDisk.SerialNumber) Then Dim serial As String serial = Trim(objDisk.SerialNumber) If serial <> "" Then result = result & "Disk " & i & ": " & serial & vbCrLf i = i + 1 End If End If Next If result = "" Then GetAllHardDiskSerials = "No serial numbers found" Else GetAllHardDiskSerials = result End If CleanUp: Set objDisk = Nothing Set colDisks = Nothing Set objWMIService = Nothing Exit Function ErrorHandler: GetAllHardDiskSerials = "Error" Resume CleanUp End Function أو هذه الدالة البسيطة أيضاً التي تجلب رقم الهارد الذي تم تثبيت نظام التشغيل ويندوز عليه :- Public Function GetHardDiskSerial2() As String On Error GoTo ErrorHandler Dim objWMIService As Object Dim colDisks As Object Dim objDisk As Object Dim strSerial As String Set objWMIService = GetObject("winmgmts:\\.\root\cimv2") Set colDisks = objWMIService.ExecQuery("SELECT * FROM Win32_DiskDrive") For Each objDisk In colDisks If Not IsNull(objDisk.SerialNumber) Then strSerial = Trim(objDisk.SerialNumber) If strSerial <> "" Then GetHardDiskSerial2 = strSerial Exit For End If End If Next If GetHardDiskSerial2 = "" Then GetHardDiskSerial2 = "Not Found" End If CleanUp: Set objDisk = Nothing Set colDisks = Nothing Set objWMIService = Nothing Exit Function ErrorHandler: Resume CleanUp End Function والإستدعاء فقط في أي مربع نص = اسم الدالة فقط ، كما في الملف المرفق للتوضيح . HD Serial.zip
-
مشاركة مع تنفيذ فكرة أستاذنا @kkhalifa1960 ، وبدلاً من الإعتماد على نموذج فرعي للقائمة الفرعية ، هذا تعديل على الفكرة التي تم طرحها سابقاً ، بحيث تم تطبيقها وكأنها Navigation Form .. الملف المرفق :- Menu Navigations.zip
-
وعليكم السلام ورحمة الله وبركاته .. بما أنك تريد الفلترة على فلترة أخرى أو بدونها . خطر ببالي فكرة كالآتي ، لمنع التكرار في الحدثين لمربعي النص ، قمت بدمج الفكرة في دالة استعلام بسيط ، واستخدام الدالة Like ليكون البحث والفلترة حتى لو بجزء مطابق من النص :- Private Sub ApplyFilter() Dim filterCondition As String filterCondition = "" If Nz(Me.Combo7, "") <> "" Then filterCondition = "[namee] Like '*" & Me.Combo7 & "*'" End If If Nz(Me.Text9, "") <> "" Then If filterCondition <> "" Then filterCondition = filterCondition & " AND " filterCondition = filterCondition & "[town] Like '*" & Me.Text9 & "*'" End If Me.Filter = filterCondition Me.FilterOn = (filterCondition <> "") Me.Requery End Sub وبالتالي ، للحدثين بعد التحديث لمربعي النص ، استدعيها نفسها بهذا الشكل :- Private Sub Combo7_AfterUpdate() ApplyFilter End Sub Private Sub Text9_AfterUpdate() ApplyFilter End Sub وكإضافة ، قمت بإنشاء زر لإلغاء الفلترة وعرض السجلات كاملة . من خلال الزر :- Private Sub Command20_Click() Me.Combo7 = Null Me.Text9 = Null Me.FilterOn = False Me.Requery End Sub ملفك بعد التطبيق :- Database6.zip
-
لايتم ادراج صفوف مع ترقيم تلقائي في حال كانت الورقة محمية . هل من حل؟
Foksh replied to سك بابك's topic in منتدى الاكسيل Excel
وعليكم السلام ورحمة الله وبركاته.. لم أطلع على المرفق ، ولكن خطر ببالي استخدام التالي للسماح للماكرو او المعادلة بالاستمرار بالترقيم وعدم السماح بالتعديل من خلال:- UserInterfaceOnly:=True -
3 سجلات بناءً على ماذا ؟؟؟؟؟؟؟؟؟ انظر لنتيجة الشرط على سبيل المثال 936/2025 من الجدول الأول :- TAB1 innow oprate note_E Awarding SERR 2025-05-22 9:56:02 AM 936/2025 جارى الدراسة 2025.05.28 7071 سجل واحد . والجدول الثاني لنفس الفلترة :- TAB2 innow nooprat oprate MRNo Date Of Recipt id 2025-05-22 9:56:58 AM 2200021005 936/2025 1264/2025 2025.05.22 8222 2025-05-22 10:06:07 AM 2200021007 936/2025 1265/2025 2025.05.22 8223 سجلين اثنين . والجدول الثالث بنفس الفلترة :- TAB3 inday orderNO elcNO oprate id 2025-05-27 7:29:01 AM 5594/2025 5300221097 936/2025 8629 2025-05-27 7:29:55 AM 5595/2025 5300221100 936/2025 8630 2025-05-27 7:30:25 AM 5596/2025 5300221102 936/2025 8631 3 سجلات . فما هو الشرط الذي سيتم عرض 3 سجلات فقط ( بناءً على معرفتك بالسجلات وماهيتها ) ؟؟؟؟؟؟؟؟ فهم السؤال بالنسبة لي = الجواب كاملاً وليس نصفه . جربت هذا الإستعلام :- SELECT TAB1.innow, TAB1.oprate, TAB1.note_E, TAB1.Awarding, TAB1.SERR, TAB2.innow AS T2_innow, TAB2.nooprat, TAB2.MRNo, TAB2.[Date Of Recipt], TAB2.id AS T2_id, NULL AS inday, NULL AS orderNO, NULL AS elcNO, NULL AS T3_id FROM TAB1 INNER JOIN TAB2 ON TAB1.oprate = TAB2.oprate WHERE TAB1.oprate = '936/2025' UNION ALL SELECT TAB1.innow, TAB1.oprate, TAB1.note_E, TAB1.Awarding, TAB1.SERR, NULL AS T2_innow, NULL AS nooprat, NULL AS MRNo, NULL AS [Date Of Recipt], NULL AS T2_id, TAB3.inday, TAB3.orderNO, TAB3.elcNO, TAB3.id AS T3_id FROM TAB1 INNER JOIN TAB3 ON TAB1.oprate = TAB3.oprate WHERE TAB1.oprate = '936/2025'; والذي كانت نتيجته كمثال على نفس الفلترة = Query2 innow oprate note_E Awarding SERR T2_innow nooprat MRNo Date Of Recipt T2_id inday orderNO elcNO 2025-05-22 9:56:02 AM 936/2025 جارى الدراسة 2025-05-28 7071 2025-05-22 9:56:58 AM 2200021005 1264/2025 2025-05-22 9:56:59 AM 8222 2025-05-22 9:56:02 AM 936/2025 جارى الدراسة 2025-05-28 7071 2025-05-22 10:06:07 AM 2200021007 1265/2025 2025-05-22 10:06:07 AM 8223 2025-05-22 9:56:02 AM 936/2025 جارى الدراسة 2025-05-28 7071 2025-05-27 7:29:01 AM 5594/2025 5300221097 2025-05-22 9:56:02 AM 936/2025 جارى الدراسة 2025-05-28 7071 2025-05-27 7:29:55 AM 5595/2025 5300221100 2025-05-22 9:56:02 AM 936/2025 جارى الدراسة 2025-05-28 7071 2025-05-27 7:30:25 AM 5596/2025 5300221102 ومع ذلك لم أفهم شرطك أو المطلوب .
-
وعليكم السلام ورحمة الله وبركاته .. كمطلب أول :- جرب هذا الإستعلام .. SELECT TAB1.innow, TAB1.oprate, TAB1.note_E, TAB1.Awarding, TAB1.SERR, TAB2.innow AS T2_innow, TAB2.nooprat, TAB2.MRNo, TAB2.[Date Of Recipt], TAB2.id AS T2_id, TAB3.inday, TAB3.orderNO, TAB3.elcNO, TAB3.id AS T3_id FROM (TAB1 LEFT JOIN TAB2 ON TAB1.oprate = TAB2.oprate) LEFT JOIN TAB3 ON TAB1.oprate = TAB3.oprate WHERE (((TAB1.oprate)=[أدخل قيمة للفلترة]));
-
شكراً للمشاركة الخفيفة .. ولي تعليقان ، قد يكون الأول سهواً أو خطأ مطبعي . وهو أن الإستدعاء ليس صحيحاً باسم الدالة المرفقة . ثانياً الدالة ستقوم بفتح التقرير ، ولكن ليس هناك أي أمر طباعة . وأفترض أنه قد يكون التعديل الصحيح للفكرة :- Public Function PrintMultipleCopies(strReportName As String, _ bytNumberOfCopies As Byte) Dim i As Integer For i = 1 To bytNumberOfCopies DoCmd.OpenReport strReportName, acViewNormal Next i End Function والإستدعاء :- Call PrintMultipleCopies("اسم التقرير", 2) حيث هنا عدد النسخ المطلوب طباعتها = 2
-
أخي الكريم بداية ، أهلاً بك مرة أخرى في المنتدى ،، ثانياً لتلافي حذف أي موضوع ، ليس عليك تكرار فتحه بموضوع جديد مستقل ، بل يكفي ان تستخدم اسلوب النداء "للرفع" أو "Up" . ثالثاً ، ولضيق الوقت ، سأرفق لك ملف من مكتبتي ، جربته ولعله تستفيد منه بالشكل الصحيح . Menu-1.zip
-
Private Sub detaché_AfterUpdate() On Error GoTo Err_detaché_Click If IsNull(Me.TxtMonth) Then MsgBox "اختر الشهر" Exit Sub End If Dim Titles1 As Variant Dim Titles2 As Variant Titles1 = Array("مصالح البلدية", "متعاقدين 8 سا", "عمال متعاقدين 5 سا", "حراس متعاقدين 5 سا", "اعوان النظافة والتطهير") Titles2 = Array("للعمال الموظفين", "للعمال المتعاقدين بالتوقيت الكامل", "للعمال المتعاقدين بالتوقيت الجزئي", "للحراس المتعاقدين بالتوقيت الجزئي", "للعمال اعوان النظافة والتطهير") Dim idx As Long idx = Me.detaché.ListIndex If idx < 0 Then Exit Sub Me.Reporte_Title.Visible = False Me.Reporte_Title = Titles1(idx) Me.Report_Title = Titles2(idx) Dim Copies As Long Copies = 3 ' يمكن ربطه بمربع نص في النموذج أو وضع رقم ثابت DoCmd.OpenReport "rptDiscount", acPreview, , , , "qry_rptD|" & Copies Exit Sub Err_detaché_Click: If Err.Number = 2501 Then Resume Next End Sub واعتذر عن المتابعة ، لأسباب صحية
-
هدية .. حضور وانصراف الموظفين .. بسيط مختصر .. وجاهز للعمل
Foksh replied to ابوخليل's topic in قسم الأكسيس Access
فشلت محاولتي في ضبط الوقت والتاريخ الآلي من خلال آكسيس ، فالأفكار التي كانت لدي تعتمد على تشغيل آكسيس كمسؤول . وهذا ما لا يمكن تقييد المستخدم به . سأحاول بطريقة أخرى -
التعليق الموجود بجانب السطر الذي ظهر عنده الخطأ . تركته لك لتمكينك وتخييرك بإدخال قيمة عدد النسخ بشكل يدوي من خلال مربع نص ، أو تستبدل الجزء بقيمة رقمية ثابتة لعدد النسخ . على العموم ، استبدل الجزء بأي رقم تريده ليكون عدد النسخ ، فقط لا غير .
-
لو أنك قرأت التعليق أخي طاهر .. استبدل الجزء :- Nz(Me.txtCopies, 1) برقم يمثل عدد النسخ التي تريد طباعتها .
-
تفضل Prin3.zip
-
جرب هذا التعديل الجذري :- Private Sub detaché_AfterUpdate() On Error GoTo Err_detaché_Click If IsNull(Me.TxtMonth) Then MsgBox "اختر الشهر" Exit Sub End If Dim Titles1 As Variant Dim Titles2 As Variant Titles1 = Array("مصالح البلدية", "متعاقدين 8 سا", "عمال متعاقدين 5 سا", "حراس متعاقدين 5 سا", "اعوان النظافة والتطهير") Titles2 = Array("للعمال الموظفين", "للعمال المتعاقدين بالتوقيت الكامل", "للعمال المتعاقدين بالتوقيت الجزئي", "للحراس المتعاقدين بالتوقيت الجزئي", "للعمال اعوان النظافة والتطهير") Dim idx As Long idx = Me.detaché.ListIndex If idx < 0 Then Exit Sub Me.Reporte_Title.Visible = False Me.Reporte_Title = Titles1(idx) Me.Report_Title = Titles2(idx) Dim Copies As Long Copies = Nz(Me.txtCopies, 1) ' يمكن ربطه بمربع نص في النموذج أو وضع رقم ثابت DoCmd.OpenReport "rptDiscount", acPreview, , , , "qry_rptD|" & Copies Exit Sub Err_detaché_Click: If Err.Number = 2501 Then Resume Next End Sub وداخل التقرير ، في حدث عند الفتح :- Private Sub Report_Open(Cancel As Integer) Dim Args As Variant Dim QryName As String Dim Copies As Long Dim i As Long If Not IsNull(Me.OpenArgs) Then Args = Split(Me.OpenArgs, "|") QryName = Args(0) If UBound(Args) >= 1 Then Copies = Val(Args(1)) Else Copies = 1 End If For i = 2 To Copies DoCmd.PrintOut acPages, 1, 1 Next i End If End Sub
-
هدية .. حضور وانصراف الموظفين .. بسيط مختصر .. وجاهز للعمل
Foksh replied to ابوخليل's topic in قسم الأكسيس Access
امممم ، وجهة نظر سليمة . طيب سنحاول ضبط الأمور بشكل مختلف كلياً غداً إن شاء الله ، بحيث نحاول ضبط وتصحيح الوقت والتاريخ في الكمبيوتر الى الوقت والتاريخ الفعلي من الانترنت عندما يكون غير صحيح ( ما رأيك ؟؟ ) . بحيث يتم اعتماد الوقت من الكمبيوتر بدلاً من جلبه كل عملية توقيع . -
وعليكم السلام ورحمة الله وبركاته .. بدايةً لا تقترف خطأ كبيراً بتسمية المكونات بأسماء محجوزة لآكسيس مثل ، Form أو Group . ثم ان الفكرة بسيطة جداً .. انظر الفكرة التالية في المرفق :- FAST_CA.zip
-
هدية .. حضور وانصراف الموظفين .. بسيط مختصر .. وجاهز للعمل
Foksh replied to ابوخليل's topic in قسم الأكسيس Access
ولهذا قمت بتقسيم الحدث إلى موضعين ، مع الإضافة التي ذكرتها . حيث تم منع الجمود كلياً ، لأننا سنعتمد على التحديث المحلي كل ثانية على الوقت الحقيقي من الانترنت الذي تم جلبه بدايةً . -
هدية .. حضور وانصراف الموظفين .. بسيط مختصر .. وجاهز للعمل
Foksh replied to ابوخليل's topic in قسم الأكسيس Access
وهذا بالضبط ما شعرت به عند تعيين قيمة 1000 في المؤقت بدلاً من 10000 ، وكمحاولة بسيطة للإيجاد حل يمنع حالة الجمود في النموذج عند جلب الوقت الحقيقي في النموذج . وقد خطر ببالي تجزئة الأحداث لموقعين بدلاً من حدث عند الوقت للنموذج ، بحيث يكون التعديل كالتالي .. Private Sub Form_Load() If IsInternetConnected() Then varGeneralDate = InternetTime(1) Else varGeneralDate = Now() End If End Sub Private Sub Form_Timer() Me.TimeLbl.Caption = Format(varGeneralDate + (Now() - Date), "hh:nn:ss AM/PM") End Sub عند السطر :- Me.TimeLbl.Caption = Format(varGeneralDate + (Now() - Date), "hh:nn:ss AM/PM") فأنت تجمع بين الوقت الذي جلبته من الإنترنت والمقدار الذي يمثل الساعات والدقائق والثواني التي مرت منذ منتصف الليل للوقت المحلي ، لأن Now يعطي التاريخ والوقت معاً بينما Date يعطي التاريخ فقط ، والفرق بينهما هو الوقت الحالي على جهازك . بإضافة هذا الفرق إلى الوقت المرجعي القادم من الإنترنت ، يصبح لديك ساعة تتحرك لحظياً باستخدام ساعة النظام ولكن أساسها هو الوقت الحقيقي من الانترنت ، وبذلك يظهر للمستخدم الوقت الصحيح من الإنترنت بشكل مستمر دون الحاجة إلى إعادة الاتصال كل ثانية . -
هدية .. حضور وانصراف الموظفين .. بسيط مختصر .. وجاهز للعمل
Foksh replied to ابوخليل's topic in قسم الأكسيس Access
التايمر = 10000 أي أن تحديث الوقت كل 10 ثواني . هذا ما لاحظته في النموذجين . لا اعلم عن هذه الإشكالية لإني لم أمر بها يوماً 😅 . ولكن ما دمت تفضلها ولم تجد أي تعارض فهي لك . حجزت المتغيرين ( yom , tar ) أحدهما نصي والآخر تاريخ في مديول جلب الوقت من الانترنت مع تعديل المديول ومصدره كاملاً. مع تحديد قيمهما داخل نموذج تسجيل الدخول في حدث زر الدخول . وقد لاحظت فارق كبيراً في جلب القيم لنموذج تسجيل الحضور والانصراف عند فتحه. المديول الثاني ، تمت عليه تعديلات سطحية بسيطة ، لذلك قد تكون غير ملحوظة . دعتني هذه الجزئية الى سؤال .. ماذا إن كان لموظف تغيير ورديته من صباحية الى مسائية !! هل هذا يعني أنه لن يتمكن من تسجيل حضوره في ورديته الجديدة أو البديلة ؟؟؟ -
أنك غير قادر على إضافة الاستعلام لقاعدة البيانات كونها محمية بمفتاح الشيفت + ACCDE . الإخفاء ليس فكرة واردة لعدم نجاحها ، فبطبيعة الحالي يمكن الحصول على مسار قاعدة البيانات الخلفية أينما كانت من خلال قاعدة بيانات أخرى . لكني كنت قد علّقت على موضع الإستعلام ان كانت القاعدة Hide Access + منع مفتاح الشيفت .
-
هدية .. حضور وانصراف الموظفين .. بسيط مختصر .. وجاهز للعمل
Foksh replied to ابوخليل's topic in قسم الأكسيس Access
وبما أن معلوماتي ليست بالمستوى الذي يسمح لي بإبداء الرأي في عمل معلمي .. إلا أنني وبما أني أحد تلاميذك فاسمح لي ببعض النقاط التي اقترحها . في لوحة الأساسيات ، لم تتح إمكانية التحكم التعديل بـ / على أوقات بدء الدوام . بما أنه لدينا سلوكين لتسجيل الحضور والإنصراف في نموذجين منفصلين ( TimeF و TimeFB ) ، فأنا عادة أحاول الدمج في نموذج واحد . خطر ببالي فكرة وهي ، نقل وإنشاء المتغيرات التي تأتي بالوقت الحالي من الانترنت ، من موضعها الحالي إلى نموذج تسجيل الدخول ، مع تغيير مصدر الحصول على الوقت العالمي من الانترنت لمصر أسرع قليلاً . الحدث Id_KeyDown داخل النموذج frmcomIn ليس له لزوم بما أنه مستخدم في حدث النموذج نفسه . ونفس الشيء في النموذج frmcomInB كونه نسخة عن الأول . أما بخصوص جعل كل فترة حرة حتى لو تداخلت الأوقات ، كفكرة جميلة وتعطي ليونة ومرونة بدلاً من ضبط وإلزام النظام بأن الفترات يجب أن تكون منفصلة تماماً . ولكن في التقارير على سبيل المثال ، إذا سمحت بالتداخل ، كيف سيتم حساب الساعات الفعلية ؟ هل ستحسب مرتين إذا تداخلت الفترتان ؟؟؟؟؟ كفكرة عامة ،، تعديلاتي البسيطة التي خطرت ببالي بعد القاء نظرة ليست تقييمية أبداً بقدر ما هي مقترحات ، كانت تتلخص في الملف التالي . ChkInOut_NetUp3.zip -
هدية .. حضور وانصراف الموظفين .. بسيط مختصر .. وجاهز للعمل
Foksh replied to ابوخليل's topic in قسم الأكسيس Access
إذا موضوع التنسيق للناتج يبدو أنه بحاجة للوضوح أكثر بحيث وأعتقد أن الشكل الصحيح للدقيقة = 00:01 * وجهة نظر غير ملزمة طبعاً -
من واقع التجربة ، ودون أي تردد وبلا أي شك ، فأنا ( أعوذ بالله من كلمة أنا ومن شر نفسي ) والكثيرين نتفق مؤيدين لكلام أساتذتنا ومعلمينا ، وحتى تعليمات مايكروسوفت ، أن آكسيس غير قادر على حماية البيانات وتأمينها . ومن خلال التجارب المريرة التي مررت بها وفكرت بها ، فإن الحل والسبيل الوحيد لتأمين البيانات سيكون خارج قاعدة البيانات نفسها . ( أو بحماية قاعدة البيانات الخلفية بكلمة مرور محكمة ) - ومع ذلك فالهندسة العكسية قادرة على الوصول إلى كلمة المرور - وبالتالي النجاح تشوبه بعض الشوائب . ولذا ذكرت في جملتي التالية :- أيضاً كانت لي تجربة بسيطة طبقتها في لعبة كانسة الألغام 2025 . حيث أنني لم اعتمد على أي جداول لتخزين أسماء اللاعبين والمستويات التي وصل لها كل لاعب لإستردادها متى شاء . ومع ذلك - ودون أي جداول - يستطيع اللاعب الإستمرار من المستوى والمرحلة التي وصل لها مع الإحتفاظ بكامل ميزات اللعبة من مساعدات وحمايات اللعبة ... إلخ ، حتى بعد اعادة تشغيل الويندوز . فالفكرة لا تعتمد على متغيرات طويلة المدى .
-
هدية .. حضور وانصراف الموظفين .. بسيط مختصر .. وجاهز للعمل
Foksh replied to ابوخليل's topic in قسم الأكسيس Access
الملف الأصلي يعمل بدون مشاكل .. وحيث أنه بعد التجربة ، كانت لتجربتي ملاحظتان ، إحداهما قديمة لكني لم أتطرق لها مسبقاً . عند فتح نموذج تسجيل الحضور والإنصراف لاحظت بطئاً ملحوظاً عند فتح النموذج . الثانية توضيح لطريقة الحساب لعدد الساعات الظاهرة في الصورة التالية :- هل المقصود بـ 0:1 هو دقيقة أم عشر دقائق ؟؟