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

منتصر الانسي

المشرفين السابقين
  • Posts

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

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

  • Days Won

    4

كل منشورات العضو منتصر الانسي

  1. اعتقد أني عرفت المشكلة جرب المثال الان وأخبرنا إذا ظهرت الرسالة أم لا مع تحياتي baseM11.rar
  2. واجهتني مشكلة واحدة أنه عند إغلاق النماذج من علامة X تتبقى شاشة أكسس بدون أي مجال لإغلاقها إلا عن طريق Task Manager
  3. مرفق لك مثالك بعد التعديل قمت بإضافة جدول tblDates والإستعلام qryDates النتيجة النهائية ستجدها في الاستعلام Query1 أرجو أن يكون هو ماتبحث عنه مع تحياتي Database1.rar
  4. الصراحة أن هذه المشكلة مثل المخدر الذي لا يستطيع الشخص الإقلاع عنا إلا بحلها وكلما قلت سأقلع عن التفكير فيها أرجع لها وبقوة توصلت أخيرا لدالة تحويل تشية دوال التحويل المضمنة (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
  5. نفضل المثال بعد التعديل مثال.rar
  6. أعتقد أني لم أستوعب الفكرة تماما أو أكون قد فهمت منها ماجعلني أستصعبها صراحة 😅 - هل ستكون قاعدة البيانات هذه فارغة تماما أم ستحتوي على أكواد ستقوم بفتح التطبيق الخاص بنا؟ - هل الإختصار سيكون لقاعدة البيانات الفارغة أم للمجلد ؟ - أكثر عبارة لم أفهمها هي (اضافة ملفات برقة بيضاء شكلا ووهم ان هذه هي القاعدة) فياريت لو توضحي الفكرة بمثال عملي أو فيديو مثل كل مرة مع تحياتي
  7. مازالت المشكلة قائمة يتم اغلاق التطبيق عند اغلاق نموذج frmStart من زر X حاولي ان تعالجي الأمر ليصبح كود متكامل يعتمد وجاري العمل به 😊 اتمنى ان تقومي بتجميع افكاركهذه الخاصة بالتأمين ووضعها في مثال واحد وترفعيه لمكتبة المنتدى لان الافكار فيه مهمة وسيستفيد منها الكثير مع تحياتي
  8. يمكنك ذلك عن طريق القوائم المختصرة قمت بتعديل مثالك حيث قمت بإضافة وحدة نمطية بإسم mdlPrintMenu تقوم بإنشاء قائمة مختصرة بإسم PrintMenu ومن خاصية Shortcut Menu Bar الخاصة بالتقرير (لا أتذكر الإسم بالعربي تماما ولكن يمكن أن يكون شريط قائمة الاختصارات) نقوم بإختيار PrintMenu من القائمة إن شاء الله يكون هذا الحل هذا هو الحل الذي تبحث عنه مع تحياتي LAb.rar
  9. اقتراحي ان يتم تحويل الوقت الى ثواني لانها أدنا وحدة للوقت (هذه دالة تقوم بالتحويل) 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 جرب وإن شاء الله تنجح مع تحياتي
  10. تم تعديل الكود في مثالك مع تحياتي LAb.rar
  11. اهلا وسهلا اخي @عبدالله المجرب المنتدى منور بكم أنتم وبقية الأخوان كنت قد لاحظت غيابك لأنك من الأشخاص الذين أعرف عنهم إجتهادهم بالمشاركة والمساهمة في أغلب المواضيع ألف شكر على هذه الكلمات الجميلة
  12. انا لم اقصد ان ماقلته غير صحيح بل قصدت في حال اذا تطلب الأمر إظهار جميع السجلات وخاصة عندما تكون العلاقات معقدة خصوصا إذا شملت أكثر من حقل واحد ولكن في 90% وأكثر من الحالات فكما تفضلت فإن استخدام صلة بين الجدولين في الاستعلام هي الحل الأفضل تحياتي
  13. اخي الفاضل @ابوخليل حقول التاريخ أساساً هي حقول رقمية يكون الجزء الصحيح منها هو التاريخ (اليوم يساوي 1 صحيح) والكسور تمثل الوقت (الثانية تساوي 1 من 10000 تقريبا) مثلما ذكر الأخ @شايب هذا صحيح ليس للأسباب المذكورة فقط وإنما لأنك ننفذ دوال VBA مع محرك البيانات ولغة SQL وهذا ايضاً صحيح ولكن النتائج عادة ستقتصر على السجلات التي يوجد مايقابلها في الجدول الأخر الحل الأفضل من وجهة نظري هو إستخدام الإستعلامات الفرعية وهي سهلة جداَ أرفق لكم مثال الأخ ابو خليل وقد قمت بعمل حل له بإستخدام استعلام فرعي وقمت بإضافة بعض الأشياء لتوضيح سبب المشكلة وكذا لمعرفة القيمة الرقمية لأي للتاريخ والوقت مع تحياتي d8.rar
  14. اخي العزيز إذا كان التقرير يختفي خلف النموذج فعليك تعديل أمر فتح التقرير كالتالي DoCmd.OpenReport "youssef", acViewPreview, , , acDialog ستقوم المعلمة acDialog بفتح التقرير فوق النموذج أما إذا كان يقلق نهائيا فالاحتمالات كثيرة وسندخل في مرحلة التخمين التي قد يكون ضررها أكثر من فائدتها فيفضل ان ترفق مثال أو على الاقل تنسخ لي الكود في وضعه الحالي مع تحياتي
  15. مثالك هنا أخت @hanan_ms يخص هذا الموضوع ولكن ورغم أنك قمت بتعديل خارج الموضوع انما الفكرة في حد ذاتها رائعة لتأمين التطبيق وسأعمل بها ولكني وجدت أنه عند إغلاق النموذج frmStart من زر X ييتم تجاوز الكود ويتم الخروج من الاكسس حتى يعد ان أضفت الأمر SetAccessCloseAbility False الى حدث OnLoad للنموذج (وللتأكيد أقصد النموذج frmStart وليس start) مع تحياتي
  16. طالما والدمج المطلوب سيكون في اكسل يفضل نشر طلبك في منتدى اكسل
  17. هذا في إعتقادي لأنك عامل أمر الإغلاق بعد أمر الفتح جرب حذف سطر إغلاق التقرير وإن شاء الله تنحل المشكلة مع تحياتي
  18. يوجد حل غير مباشر ستجده في المرفق مع تحياتي تكبير حجم الخط.rar
  19. أتفق مع الأستاذ فادي فلا توجد أي طريقة إلا بتمييز إسم الملف بقيمة فريدة لا تتكرر ومن خلال المثال الخاص بك فهذه القيمة هي قيمة الحقل ID عموما قمت بالتعديل على الكود الخاص بمثالك ووضحت ما قمت بتعديله من خلال التعليقات أرجو أن يكون الحل مناسبا لك مع تحياتي baseA.rar
  20. صراحة معنا بالمنتدى ثلاثة آباء مبهرين @ابوخليل و @ابو جودي و @ابو البشر ما شاء الله الأفكار رائعة والتنفيذ أروع نتعلم منه الكثير ألف شكر لكم وبالتوفيق إن شاء الله مع تحياتي
  21. لا أدري إذا كنت قد فهمت ماتقصده بالضبط ولكن قمت بتعديل ملفك وشاهد إذا كان هو المطلوب او لا مجلد جديد (3).rar
  22. سعيد جدا لأنه نال إستحسانكم كلام من جماله أعجز عن الرد بالرد الذي يمكن أن يعبر عن مدى سعادتي وامتناني به والشكر موصول للأخ @SAROOK مع تحياتي
  23. 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 إنسخ الكود بهذا الوضع وجربه
  24. هذه طريقة إستخدام نفس المبدأ ولكن للحصول على ساعة تشبه الساعة الحائطية مع تحياتي AnalogClockWithoutTimer.rar
  25. اتمنى أن يكون مساعدا وملهماً للأفكار الجديدة فهذا أهم الأسباب لقيامي بالعمل على هذه السلسلة بالإضافة لما تكرمت به أعتقد أيضا أنه سيغنينا عن إنشاء نماذج التحكم (النماذج التي لاتستخدم لإدخال البيانات) مثل نماذج تحديد معايير التقارير والإستعلامات وغيرها من النماذج
×
×
  • اضف...

Important Information