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

منتصر الانسي

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

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

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

  • Days Won

    2

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

  1. ماشاء الله أعتقد أن المداخلات من @ابو جودي و @jjafferr قد أثرت الموضوع وغطت الطرق الأكثر عملية مع توضيح مزايا وعيوب كل طريقة ولكن وتوضيحا لكلام الاخ @ابو جودي انا استخدم طابعة إفتراضية تقوم بإستخراج التقرير كملف PDF وتعمل مثل الطابعة الحقيقة أما كلامك فمعناه أنك تستخدم الأمر DoCmd.OutputTo وهذا لايعتبر أمر طباعة وإنما امر لإستخراج الكائن بصيغة محددة بحالته كيفما تكون ولو لاحظت فإن الرسالة لاتظهر من الأساس فحدث عند عدم وجود بياتات أو On No Data الخاص بالتقرير يتطلب استخدام الأمر DoCmd.OpenReport حتى يتم تفعيله ولكن مثلما أسلفت فهذه المناقشات جميلة لنتعرف كلنا على الطرق المختلفة لحل المشاكل فقد يحتاجها أحدنا يوما ما مع تحياتي
  2. لا المسألة مش مسألة إن الكود فيه مشكلة انما أنا فكرت في الموضوع من منظورين آخرين الأول طالما وتوجد طريقة أسهل وتنفذ المطلوب لما لا نستفيد منها الثاني الطبيعة البشرية فعلى طول مشاوري في العمل مع الأنظمة لم أجد مستخدم واحد يطبع تقرير بدون مايفتحه في وضع المعاينة وطباعته من هناك وكأنه يريد الإطمئنان على شكل ومحتوى التقرير قبل طباعته أنا لم يحدث معي هذا الأمر فبمجرد اغلاق رسالة التنبيه تلغى عملية الطباعة عموما الإختلاف في الرأي لايفسد للود قضية في الأخير كلها أفكار تصب في مصلحة أعضاء المنتدى فمن خلالها يمكنهم التعرف على كل البدائل الممكنة للعمل بما يلائمهم منها أو حتى أنهم قد يخرجون منها بأفكار أخرى جديدة مع تحياتي
  3. مع إحترامي لحل الأخ @ابو جودي فالمسألة أبسط من كذا كل ماعليك فعله هو إضافة الكود التالي لحدث عند عدم وجود بياتات أو On No Data الخاص بالتقرير 'رسالة تنبيه MsgBox "لايوجد أي بيانات في التقرير", vbMsgBoxRight + vbMsgBoxRtlReading, "تنبيه" 'إلغاء الأمر وعدم متابعة فتح التقرير Cancel = -1 ليصبح بهذا الشكل Private Sub Report_NoData(Cancel As Integer) 'رسالة تنبيه MsgBox "لايوجد أي بيانات في التقرير", vbMsgBoxRight + vbMsgBoxRtlReading, "تنبيه" 'إلغاء الأمر وعدم متابعة فتح التقرير Cancel = -1 End Sub مع تحياتي
  4. من إطلاعي على الملف فأنت تريد أن الصور التي بإسم CompanyLogo و StampLogo أن تكون عامة لكل الفروع والصور BranchLogo تكون متغيرة بحسب الفرع أليس كذلك؟ إذا كان الوضع بهذا الشكل فيجب عليك عدم ربط الصورتين CompanyLogo و StampLogo بالحقل لأنه يفترض أن الشركة واحدة عموما قمت بتعدبل الملف جرب فتح التقرير بزر المعاينة للسجلين الاول والثاني وكذا فتحه مباشر بالنقر المزدوج على التقرير هل هذا التعديل هو ماتطلبه أم شيئ آخر لأن شرحك غير واضح مع تحياتي DDCompanyLogos.rar
  5. يجب إضافة المرجع Microsoft Office 16.0 Object Library كما بالصور أدناه من قائمة Tools إختر References انزل إلى أن تصل للمرجع Microsoft Office 16.0 Object Library (القائمة مرتبة أبجديا وسيكون الوصول للمرجع سهل) قم بتحديده واتقر OK تحياتي
  6. كلامك صحيح مع انه شيئ غريب المفروض تتغيير اليا وفق نسخة الأوقيس عموما الف شكر يظل الواحد يتعلم شيئ جديد كل يوم
  7. مثال الاخ @Foksh النموذج Eye1 رائع خصوصا بعد تعديل الأخت @hanan_ms حيث أصبحت حركة العين أكثر سلاسة عند تحريك الماوس أما النموذج الخاص بالأخت @hanan_ms الذي بإسم Eye2 كلما احرك الماوس عليه تظهر لي رسالة الخطأ الموضحة بالصورة فهل تظهر الرسالة عند البقية أم أنها مشكلة خاصة بي فقط تحياتي
  8. ألمهم أن المشكلة حلت لكن لدي تصحيح بسيط أنا قلت تعديل التنسيق إلى هذا الشكل #.00 علامة الهاشتاغ مع نقصة وصفرين وانت قمت بعمل التنسيق بهذا الشكل #,00 علامة الهاشتاغ مع فاصلة وصفرين نظرا ً لأن المشكلة هذه لاتظهر عندنا فلو أمكن تعديل تنسيق الحقل في الجدول بالشكل الذي إقترحته لك وتخبرنا هل ظلت المشكلة نفسها أم ظهر خطأ آخر جديد أم أنها نجحت حتى نستفيد مع تحياتي
  9. طالما نوع الحقل نصي فالحل بسيط أضفت تقرير لمثال الأخ @Foksh تظهر فيه القيم السالبة باللون الاحمر مع تحياتي TimeMin.rar
  10. كما يلاحظ من الصورة رسالة الخطأ ترد الخطأ للفاصلة وتنسيق الرقم يؤكد هذا لذا فأنا أعتقد أن المشكلة سببها هو تنسيق الرقم قمت بتعديل تنسيق الحقل في الجدول بدل أن كان Fixed جعلته #.00 حتى أجبره أن يظهر العلامة العشرية كنقطة وليس فاصلة ان شاء الله تنحل المشكلة اما إذا إستمرت فقد تكرمت أنت بالحل الأخير تحياتي
  11. اعتقد أني عرفت المشكلة جرب المثال الان وأخبرنا إذا ظهرت الرسالة أم لا مع تحياتي baseM11.rar
  12. واجهتني مشكلة واحدة أنه عند إغلاق النماذج من علامة X تتبقى شاشة أكسس بدون أي مجال لإغلاقها إلا عن طريق Task Manager
  13. مرفق لك مثالك بعد التعديل قمت بإضافة جدول tblDates والإستعلام qryDates النتيجة النهائية ستجدها في الاستعلام Query1 أرجو أن يكون هو ماتبحث عنه مع تحياتي Database1.rar
  14. الصراحة أن هذه المشكلة مثل المخدر الذي لا يستطيع الشخص الإقلاع عنا إلا بحلها وكلما قلت سأقلع عن التفكير فيها أرجع لها وبقوة توصلت أخيرا لدالة تحويل تشية دوال التحويل المضمنة (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
  15. نفضل المثال بعد التعديل مثال.rar
  16. أعتقد أني لم أستوعب الفكرة تماما أو أكون قد فهمت منها ماجعلني أستصعبها صراحة 😅 - هل ستكون قاعدة البيانات هذه فارغة تماما أم ستحتوي على أكواد ستقوم بفتح التطبيق الخاص بنا؟ - هل الإختصار سيكون لقاعدة البيانات الفارغة أم للمجلد ؟ - أكثر عبارة لم أفهمها هي (اضافة ملفات برقة بيضاء شكلا ووهم ان هذه هي القاعدة) فياريت لو توضحي الفكرة بمثال عملي أو فيديو مثل كل مرة مع تحياتي
  17. مازالت المشكلة قائمة يتم اغلاق التطبيق عند اغلاق نموذج frmStart من زر X حاولي ان تعالجي الأمر ليصبح كود متكامل يعتمد وجاري العمل به 😊 اتمنى ان تقومي بتجميع افكاركهذه الخاصة بالتأمين ووضعها في مثال واحد وترفعيه لمكتبة المنتدى لان الافكار فيه مهمة وسيستفيد منها الكثير مع تحياتي
  18. يمكنك ذلك عن طريق القوائم المختصرة قمت بتعديل مثالك حيث قمت بإضافة وحدة نمطية بإسم mdlPrintMenu تقوم بإنشاء قائمة مختصرة بإسم PrintMenu ومن خاصية Shortcut Menu Bar الخاصة بالتقرير (لا أتذكر الإسم بالعربي تماما ولكن يمكن أن يكون شريط قائمة الاختصارات) نقوم بإختيار PrintMenu من القائمة إن شاء الله يكون هذا الحل هذا هو الحل الذي تبحث عنه مع تحياتي LAb.rar
  19. اقتراحي ان يتم تحويل الوقت الى ثواني لانها أدنا وحدة للوقت (هذه دالة تقوم بالتحويل) 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 جرب وإن شاء الله تنجح مع تحياتي
  20. تم تعديل الكود في مثالك مع تحياتي LAb.rar
  21. اهلا وسهلا اخي @عبدالله المجرب المنتدى منور بكم أنتم وبقية الأخوان كنت قد لاحظت غيابك لأنك من الأشخاص الذين أعرف عنهم إجتهادهم بالمشاركة والمساهمة في أغلب المواضيع ألف شكر على هذه الكلمات الجميلة
  22. انا لم اقصد ان ماقلته غير صحيح بل قصدت في حال اذا تطلب الأمر إظهار جميع السجلات وخاصة عندما تكون العلاقات معقدة خصوصا إذا شملت أكثر من حقل واحد ولكن في 90% وأكثر من الحالات فكما تفضلت فإن استخدام صلة بين الجدولين في الاستعلام هي الحل الأفضل تحياتي
  23. اخي الفاضل @ابوخليل حقول التاريخ أساساً هي حقول رقمية يكون الجزء الصحيح منها هو التاريخ (اليوم يساوي 1 صحيح) والكسور تمثل الوقت (الثانية تساوي 1 من 10000 تقريبا) مثلما ذكر الأخ @شايب هذا صحيح ليس للأسباب المذكورة فقط وإنما لأنك ننفذ دوال VBA مع محرك البيانات ولغة SQL وهذا ايضاً صحيح ولكن النتائج عادة ستقتصر على السجلات التي يوجد مايقابلها في الجدول الأخر الحل الأفضل من وجهة نظري هو إستخدام الإستعلامات الفرعية وهي سهلة جداَ أرفق لكم مثال الأخ ابو خليل وقد قمت بعمل حل له بإستخدام استعلام فرعي وقمت بإضافة بعض الأشياء لتوضيح سبب المشكلة وكذا لمعرفة القيمة الرقمية لأي للتاريخ والوقت مع تحياتي d8.rar
  24. اخي العزيز إذا كان التقرير يختفي خلف النموذج فعليك تعديل أمر فتح التقرير كالتالي DoCmd.OpenReport "youssef", acViewPreview, , , acDialog ستقوم المعلمة acDialog بفتح التقرير فوق النموذج أما إذا كان يقلق نهائيا فالاحتمالات كثيرة وسندخل في مرحلة التخمين التي قد يكون ضررها أكثر من فائدتها فيفضل ان ترفق مثال أو على الاقل تنسخ لي الكود في وضعه الحالي مع تحياتي
  25. مثالك هنا أخت @hanan_ms يخص هذا الموضوع ولكن ورغم أنك قمت بتعديل خارج الموضوع انما الفكرة في حد ذاتها رائعة لتأمين التطبيق وسأعمل بها ولكني وجدت أنه عند إغلاق النموذج frmStart من زر X ييتم تجاوز الكود ويتم الخروج من الاكسس حتى يعد ان أضفت الأمر SetAccessCloseAbility False الى حدث OnLoad للنموذج (وللتأكيد أقصد النموذج frmStart وليس start) مع تحياتي
×
×
  • اضف...

Important Information