-
Posts
1068 -
تاريخ الانضمام
-
تاريخ اخر زياره
-
Days Won
4
نوع المحتوي
المنتدى
مكتبة الموقع
معرض الصور
المدونات
الوسائط المتعددة
كل منشورات العضو منتصر الانسي
-
معرفة ترتيب كل طالب في نموذج منفرد عن طريق القيام بعملية الفلترة
منتصر الانسي replied to moho58's topic in قسم الأكسيس Access
اعتقد أني عرفت المشكلة جرب المثال الان وأخبرنا إذا ظهرت الرسالة أم لا مع تحياتي baseM11.rar -
ما الخطأ هنا في دالة DlookUp مع التاريخ
منتصر الانسي replied to ابوخليل's topic in قسم الأكسيس Access
الصراحة أن هذه المشكلة مثل المخدر الذي لا يستطيع الشخص الإقلاع عنا إلا بحلها وكلما قلت سأقلع عن التفكير فيها أرجع لها وبقوة توصلت أخيرا لدالة تحويل تشية دوال التحويل المضمنة (CStr أو CDbl أو CDate) ولكنها بإسم CSql تقوم بتحويل جميع أنواع البيانات لتلائم أوامر Sql وللمفاجأة نجحت في العمل كل الذي سويته أني عدلت [date1] الى cSql([dat1]) وأزلت علامتي # لأن الدالة ستقوم بهذا العمل (لم أقم بتطبيقها مع حقل [user_id] لأنها تعرفت عليه كرقم وبالتالي لم تضيف علامة التنصيص له فأبقيت الحال على ماهو عليه) وبالفعل كانت النتيجة كما هو متوقع والسبب في ذلك في إعتقادي أن الدالة قامت بمراعاة الإعدادات الإقليمية عند قراءة التاريخ فالتاريخ #03/06/2025# في بلدات تعني اليوم الثالث من الشهر السادس وفي بلدان اخرى تعني اليوم السادس من الشهر الثالث وهذا هو سبب الإلتباس المنطقي للمشكلة في إعتقادي عموما ارفقت الملف الأصلي بعد تطبيق هذه الدالة ليكون حل من ضمن الحلول الذي قام بها بقية الأساتذة مع تحياتي Public Function cSQL(ByVal varValue As Variant) As String On Error GoTo ERRORHANDLER ' تحقق إذا كانت قيمة فارغة If IsNull(varValue) Then cSQL = "NULL" Exit Function End If Select Case VarType(varValue) ' منطقية Case vbBoolean ' يستخدم أكسس -1 لـ TRUE و 0 لـ FALSE cSQL = IIf(varValue, "-1", "0") ' الأرقام 64 بت Case vbByte, vbInteger, vbLong, vbLongLong ' الأعداد الصحيحة - تحويله لنص مباشرة cSQL = CStr(varValue) ' ' الأرقام 32 بت ' Case vbByte, vbInteger, vbLong ' ' الأعداد الصحيحة - تحويله لنص مباشرة ' cSQL = CStr(varValue) Case vbSingle, vbDouble, vbCurrency ' تحويل إلى تنسيق SQL العشري باستخدام فاصل النقطة cSQL = Replace(Format(varValue, "0.######"), ",", ".") ' التاريخ Case vbDate ' تنسيق التاريخ/الوقت بنمط أكسس If TimeValue(varValue) = 0 Then cSQL = "#" & Format(varValue, "yyyy-mm-dd") & "#" Else cSQL = "#" & Format(varValue, "yyyy-mm-dd hh:nn:ss") & "#" End If ' النص Case vbString Dim str As String Dim dat As Date Dim parts() As String Dim datePart As String, timePart As String str = Trim(varValue) ' 1. سلسلة نصية بتنسيق SQL بالفعل (على سبيل المثال، #2025-04-23#) If Left(str, 1) = "#" And Right(str, 1) = "#" Then cSQL = str Exit Function End If ' 2. رقم وليس تاريخ (على سبيل المثال، "3.14") If IsNumeric(str) And Not IsDate(str) Then cSQL = Replace(Format(CDbl(str), "0.######"), ",", ".") Exit Function End If ' 3. تاريخ قصير وفقاُ الإعدادات المحلية If InStr(str, ".") > 0 Then parts = Split(str, " ") datePart = parts(0) If UBound(parts) > 0 Then timePart = parts(1) Else timePart = "" Dim datePieces() As String datePieces = Split(datePart, ".") If UBound(datePieces) = 2 Then Dim dd As Integer, mm As Integer, yyyy As Integer dd = Val(datePieces(0)) mm = Val(datePieces(1)) yyyy = Val(datePieces(2)) If yyyy < 100 Then yyyy = yyyy + IIf(yyyy < 30, 2000, 1900) End If If IsDate(DateSerial(yyyy, mm, dd)) Then dat = DateSerial(yyyy, mm, dd) If Len(timePart) > 0 And IsDate(timePart) Then dat = dat + TimeValue(timePart) cSQL = "#" & Format(dat, "yyyy-mm-dd hh:nn:ss") & "#" Else cSQL = "#" & Format(dat, "yyyy-mm-dd") & "#" End If Exit Function End If End If End If ' 4. سلسلة نصية للوقت فقط (على سبيل المثال، "23:15") If InStr(str, ":") > 0 And Not InStr(str, ".") > 0 Then If IsDate(str) Then dat = CDate(str) If DateValue(dat) = #12:00:00 AM# Then dat = Date + TimeValue(dat) cSQL = "#" & Format(dat, "yyyy-mm-dd hh:nn:ss") & "#" Exit Function End If End If End If ' 5. سلسلة تصية تمثل التاريخ/الوقت كاملا If IsDate(str) Then dat = CDate(str) If TimeValue(dat) = 0 Then cSQL = "#" & Format(dat, "yyyy-mm-dd") & "#" Else cSQL = "#" & Format(dat, "yyyy-mm-dd hh:nn:ss") & "#" End If Exit Function End If ' 6. البديل الافتراضي: السلسلة النصية الخاصة بالهروب لـ SQL cSQL = "'" & Replace(str, "'", "''") & "'" ' غير معروف Case Else ' البديل الافتراضي للأنواع الغير معروفة If IsNumeric(varValue) Then cSQL = Replace(Format(varValue, "0.######"), ",", ".") Else cSQL = "'" & Replace(CStr(varValue), "'", "''") & "'" End If End Select Exit Function ERRORHANDLER: ' الرجوع إلى الخطأ - إرجاع سلسلة الهروب cSQL = "'" & Replace(CStr(varValue), "'", "''") & "'" End Function d8.rar -
نفضل المثال بعد التعديل مثال.rar
-
أعتقد أني لم أستوعب الفكرة تماما أو أكون قد فهمت منها ماجعلني أستصعبها صراحة 😅 - هل ستكون قاعدة البيانات هذه فارغة تماما أم ستحتوي على أكواد ستقوم بفتح التطبيق الخاص بنا؟ - هل الإختصار سيكون لقاعدة البيانات الفارغة أم للمجلد ؟ - أكثر عبارة لم أفهمها هي (اضافة ملفات برقة بيضاء شكلا ووهم ان هذه هي القاعدة) فياريت لو توضحي الفكرة بمثال عملي أو فيديو مثل كل مرة مع تحياتي
-
مازالت المشكلة قائمة يتم اغلاق التطبيق عند اغلاق نموذج frmStart من زر X حاولي ان تعالجي الأمر ليصبح كود متكامل يعتمد وجاري العمل به 😊 اتمنى ان تقومي بتجميع افكاركهذه الخاصة بالتأمين ووضعها في مثال واحد وترفعيه لمكتبة المنتدى لان الافكار فيه مهمة وسيستفيد منها الكثير مع تحياتي
-
يمكنك ذلك عن طريق القوائم المختصرة قمت بتعديل مثالك حيث قمت بإضافة وحدة نمطية بإسم mdlPrintMenu تقوم بإنشاء قائمة مختصرة بإسم PrintMenu ومن خاصية Shortcut Menu Bar الخاصة بالتقرير (لا أتذكر الإسم بالعربي تماما ولكن يمكن أن يكون شريط قائمة الاختصارات) نقوم بإختيار PrintMenu من القائمة إن شاء الله يكون هذا الحل هذا هو الحل الذي تبحث عنه مع تحياتي LAb.rar
-
اقتراحي ان يتم تحويل الوقت الى ثواني لانها أدنا وحدة للوقت (هذه دالة تقوم بالتحويل) Public Function fncTimeToSec(varTime As Variant) As Double On Error GoTo OnErrors Dim curTime1 As Double If IsNull(varTime) Or varTime = "" Then fncTimeToSec = 0 Else If Len(varTime) > 5 Then curTime1 = CLng(Left(varTime, 2)) * 3600 curTime1 = curTime1 + CLng(Mid(varTime, 4, 2)) * 60 curTime1 = curTime1 + CLng(Mid(varTime, 7, 2)) Else curTime1 = CLng(Left(varTime, 2)) * 60 curTime1 = curTime1 + CLng(Mid(varTime, 4, 2)) End If fncTimeToSec = curTime1 End If ToExit: Exit Function OnErrors: fncTimeToSec = 0 Resume ToExit End Function ثم نقوم باجراء العملية الحسابية ثم نعيد تحويلها الى وقت بإستخدام هذه الدالة Public Function fncSecToTime(dblSeconds As Double) As String On Error GoTo OnErrors Dim curTime1 As Double If IsNull(dblSeconds) Or dblSeconds = 0 Then fncSecToTime = 0 Else curTime1 = Int(dblSeconds) fncSecToTime = Format(Int(curTime1 / 3600), "00") _ & ":" & Format(Int((curTime1 Mod 3600) / 60), "00") _ & ":" & Format((curTime1 Mod 3600) Mod 60, "00") End If ToExit: Exit Function OnErrors: fncSecToTime = 0 Resume ToExit End Function جرب وإن شاء الله تنجح مع تحياتي
-
تم تعديل الكود في مثالك مع تحياتي LAb.rar
-
ما الخطأ هنا في دالة DlookUp مع التاريخ
منتصر الانسي replied to ابوخليل's topic in قسم الأكسيس Access
انا لم اقصد ان ماقلته غير صحيح بل قصدت في حال اذا تطلب الأمر إظهار جميع السجلات وخاصة عندما تكون العلاقات معقدة خصوصا إذا شملت أكثر من حقل واحد ولكن في 90% وأكثر من الحالات فكما تفضلت فإن استخدام صلة بين الجدولين في الاستعلام هي الحل الأفضل تحياتي -
ما الخطأ هنا في دالة DlookUp مع التاريخ
منتصر الانسي replied to ابوخليل's topic in قسم الأكسيس Access
اخي الفاضل @ابوخليل حقول التاريخ أساساً هي حقول رقمية يكون الجزء الصحيح منها هو التاريخ (اليوم يساوي 1 صحيح) والكسور تمثل الوقت (الثانية تساوي 1 من 10000 تقريبا) مثلما ذكر الأخ @شايب هذا صحيح ليس للأسباب المذكورة فقط وإنما لأنك ننفذ دوال VBA مع محرك البيانات ولغة SQL وهذا ايضاً صحيح ولكن النتائج عادة ستقتصر على السجلات التي يوجد مايقابلها في الجدول الأخر الحل الأفضل من وجهة نظري هو إستخدام الإستعلامات الفرعية وهي سهلة جداَ أرفق لكم مثال الأخ ابو خليل وقد قمت بعمل حل له بإستخدام استعلام فرعي وقمت بإضافة بعض الأشياء لتوضيح سبب المشكلة وكذا لمعرفة القيمة الرقمية لأي للتاريخ والوقت مع تحياتي d8.rar -
اخي العزيز إذا كان التقرير يختفي خلف النموذج فعليك تعديل أمر فتح التقرير كالتالي DoCmd.OpenReport "youssef", acViewPreview, , , acDialog ستقوم المعلمة acDialog بفتح التقرير فوق النموذج أما إذا كان يقلق نهائيا فالاحتمالات كثيرة وسندخل في مرحلة التخمين التي قد يكون ضررها أكثر من فائدتها فيفضل ان ترفق مثال أو على الاقل تنسخ لي الكود في وضعه الحالي مع تحياتي
-
مثالك هنا أخت @hanan_ms يخص هذا الموضوع ولكن ورغم أنك قمت بتعديل خارج الموضوع انما الفكرة في حد ذاتها رائعة لتأمين التطبيق وسأعمل بها ولكني وجدت أنه عند إغلاق النموذج frmStart من زر X ييتم تجاوز الكود ويتم الخروج من الاكسس حتى يعد ان أضفت الأمر SetAccessCloseAbility False الى حدث OnLoad للنموذج (وللتأكيد أقصد النموذج frmStart وليس start) مع تحياتي
-
طالما والدمج المطلوب سيكون في اكسل يفضل نشر طلبك في منتدى اكسل
-
هذا في إعتقادي لأنك عامل أمر الإغلاق بعد أمر الفتح جرب حذف سطر إغلاق التقرير وإن شاء الله تنحل المشكلة مع تحياتي
-
اريد زيادة حجم الخط في مربع النص في التقرير اكبر من 127
منتصر الانسي replied to عبد الله قدور's topic in قسم الأكسيس Access
يوجد حل غير مباشر ستجده في المرفق مع تحياتي تكبير حجم الخط.rar -
تعديل على كود حفظ وثائق بجانب قاعدة البيانات
منتصر الانسي replied to moho58's topic in قسم الأكسيس Access
أتفق مع الأستاذ فادي فلا توجد أي طريقة إلا بتمييز إسم الملف بقيمة فريدة لا تتكرر ومن خلال المثال الخاص بك فهذه القيمة هي قيمة الحقل ID عموما قمت بالتعديل على الكود الخاص بمثالك ووضحت ما قمت بتعديله من خلال التعليقات أرجو أن يكون الحل مناسبا لك مع تحياتي baseA.rar -
مطلوب تغيير لون خلفية مقطع تفاصيل النماذج والعناصر دفعة واحدة
منتصر الانسي replied to ابوخليل's topic in قسم الأكسيس Access
صراحة معنا بالمنتدى ثلاثة آباء مبهرين @ابوخليل و @ابو جودي و @ابو البشر ما شاء الله الأفكار رائعة والتنفيذ أروع نتعلم منه الكثير ألف شكر لكم وبالتوفيق إن شاء الله مع تحياتي -
لا أدري إذا كنت قد فهمت ماتقصده بالضبط ولكن قمت بتعديل ملفك وشاهد إذا كان هو المطلوب او لا مجلد جديد (3).rar
-
Private Sub JOS_Click() Dim TaskDialog As cTaskDialog Set TaskDialog = New cTaskDialog With TaskDialog .Init .ParenthWnd = Me.hWnd .Flags = TDF_RTL_LAYOUT .MainInstruction = "طباعة تقرير" .Content = "هل تريد طباعة تقرير المخنبر" 'التعديل الأول إلغاء هذا السطر لأنك لست بحاجته '.CommonButtons = TDCBF_OK_BUTTON .IconMain = TD_SHIELD_OK_ICON .CommonButtons = TDCBF_YES_BUTTON Or TDCBF_NO_BUTTON .Title = "المعمل الطبى" .ShowDialog 'التعديل الثاني إلغاء هذا السطر لأنه كان لغرض توضيح الأمثلة فقط 'Me.lblButton.Caption = .ResultMain 'تعديل الكود كما يلي If .ResultMain = 6 Then 'القيمة المرتجعة من النقر على زر نعم هو الرقم 6 DoCmd.PrintOut DoCmd.close acReport, "External_lab_Mokh" ElseIf .ResultMain = 7 Then 'القيمة المرتجعة من النقر على زر لا هو الرقم 7 DoCmd.close acReport, "External_lab_Mokh" End If End With Set TaskDialog = Nothing End Sub إنسخ الكود بهذا الوضع وجربه
-
تأمين التطبيق ، Taskbar ، اخفاء المجلد ، حفظ علاقات الجدول
منتصر الانسي replied to hanan_ms's topic in قسم الأكسيس Access
هذه طريقة إستخدام نفس المبدأ ولكن للحصول على ساعة تشبه الساعة الحائطية مع تحياتي AnalogClockWithoutTimer.rar