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

AbuuAhmed

الخبراء
  • Posts

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

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

  • Days Won

    17

كل منشورات العضو AbuuAhmed

  1. جربي المرفق الجدول يحتاج إلى تحجيم حقلي الكيوآر واسم المحل أما بقية الحقول أنا قمت بتعديلها. ZatkaQR.a_02.accdb
  2. لا تضيف أي أمر جديد ، فقط قم بزيادة الحرفين لكل أوامر مناداة Sendkeys - تخلص من الأوامر التي لها علاقة بلوحة المفاتيح بالحذف تماما الموجودة في البرنامج SendKeys "{NUMLOCK}" ثم قم بتعديل الأوامر الأخرى بإضافة الحرفين إليها والتي كانت هكذا: SendKeys "{}" إلى هذا الشكل بعد التعديل: mySendKeys "{}" والسبب لأن هذه الأوامر هي سبب المشكلة ونحتاج إلى استئصالها من الأساس ولا داعي أبدا أبدا لاستعمال أمر لوحة المفاتيح.
  3. من تساهل الفجوال قبول تمرير هذه القيم بين الأنواع بدون دوال التحويل مع أنها مع أكثر اللغات أخطاء ومرفوضة حتى قبل التشغيل. Sub TypesTest() Dim L As Long Dim B As Byte Dim S As String L = 255 B = L S = B B = S End Sub
  4. وهذا من تساهل الفيجوال 🙂 فبعض اللغات تجبرك على أن يكون النوع تماما كما المطلوب، في الفجوال لو وضعت قيمة Long في Byte ستقبل ما دامت القيمة لا تزال في حدود نطاق البايت من 0..255 ولكن بمجرد خروج القيمة عن النطاق سوق تصطدم برسالة خطأ. أمور كثيرة تعمل "بالبركة" ولكن لا يؤمن نتائجها ومع كثرة الاستخدام والتجارب تأتي المفاجآت ويضطر المبرمج إلى التصحيح. لا بد من الاحتراز بدراسة النطاق لكل متغير/نوع على مستوى الفيجوال أو الجداول، الآن عرفنا منكم مشكورين أن هناك نوع أكبر من Long وهو Large Number وأعتقد هو مساو للـ LongLong في النطاق، لم أدقق.
  5. اعمل مديول وما عليك إلا إضافة حرفي "my" في بداية استدعاء Sendkeys لتصبح mySendkeys
  6. ماهو أكبر نوع حقل في جداول النسخ 64 بت؟ يفترض أن يكون هناك نوع LongLong أحتاج إلى جواب هذا السؤال. عموما يفترض من يستخدم دوال API أن يبدل النوع من Long إلى LongLong أو يستخدم ما يشبه المحول LongPtr فهو يقوم بالتبديل بين Long و LongLong حسب نواة الأكسس. وشكرا للجميع.
  7. أشكركم على المشاركات الكريمة والساهمة في إثراء الموضوع معلومات التي من حفظي 🙂 ولم أراجعها: rst.Close set rst = Nothing set dbs = Nothing هذا أكثر احترازا وما عليها زود أما هذه: set rst = Nothing set dbs = Nothing أما هذه ففيها الكفاية وتقوم بنفس الخيار السابق تماما، حيث تمرير "Nothing" لمجموعة السجلات تقوم بالإغلاق والإفراع بمعنى 2 في واحد. أما هذه: rst.Close set dbs = Nothing فهي محل شك بالنسبة لي وكنت أمارسها سنين طويلة وكان بخلدي أن لغة الفجوال تتكفل بعملية الإفراع بمجرد الخروج من الإجراء أو الدالة لكل محتواه وإلى الآن لم أتأكد ولكن هو سلوك للغة نفسها بعض اللغات تترك عملية التحكم بالذاكرة للمبرمج كاملة وعليه أن يتعامل معها بكل حذر حتى عند الإعلان عن متغير سوف تراه يحمل قيمة عشوائية ولا بد قبل التعامل معه من "تصفيره" وإلا سترى نتائج غير متوقعة بعكس الفجوال فكل المتغيرات تراها ابتداء "نظيفة" لا تحتاج إلى "تصفير". وقياسا على أن "الحاوية" تشمل المحتويات في عملية الإغلاق والتفريغ فكنت أعتقد أن تمرير "Nothing" إلى قاعدة البيانات سوف يقوم بتفريغ مجموعة السجلات أيضا ولكن بعد التجربة الشخصية تبين خطأي ويمكنكم أن تجربوا فأنا قمت بإفراغ القاعدة وظلت المجموعة نشطة. عليه أرى أن خيار الإغلاق Close خياريا لاحترازية أكبر ويكفي عملية التفريغ ولكن عند إعادة استعمال المجموعة لابد من اغلاقها أولا وقبل فتحها من جديد لمجموعة سجلات جديدة. والخلاصة فأنا سأعتمد هذه: set rst = Nothing set dbs = Nothing وتحياتي لكم.
  8. جرب مثال الأستاذ أكسسنا بعد التصرف بإضافة حدث عند التغيير حسب طلبك كبير وتصغيرمربع النص_02.mdb
  9. ممكن التعديل على كود المثال باستخدام حدث عند التغيير ينادى زر التحجيم. حاول تعملها وإن شاء تنجح معك وإلا سأقوم أنا بالتعديل الليلة في وقت متأخر إن شاء الله
  10. لا يا عزيزي ، هو يعطيك العرض والإرتفاع بعد التحجيم وهي نتيجة إضافية على النتيجة المطلوبة وهو التحجيم، جرب مرة ثانية. بدل حجم الخط وباقي الخصائص مثل ثم اضغط تحجيم مرة أخرى وهكذا، إذا ضغطت 1000 مرة على زر تحجيم وهو على نفس الخصائص فلن تغييرا.
  11. استخدم هذا الإجراء بدلا من الأصل (من جلب الأستاذ جعفر) ولن تشاهد هذه المشكلة مرة أخرى. Sub mySendKeys(String_ As String, Optional Wait As Boolean = False) Dim WshShell As Object Set WshShell = CreateObject("WScript.Shell") WshShell.SendKeys String_, Wait Set WshShell = Nothing End Sub
  12. جرب هذا المثال ، الفكرة الأولى Daynamic Gnrate Date_02.mdb
  13. في بالي حاليا فكرتين: أولهما عمل جدول من حقل واحد نوع بايت ونضع فيه مسلسل من 0 إلى 255 وهذا الجدول يبقى مصاحبا لقاعدة البيانات ويصلح أن يكون متعدد الاستخدامات، فمثلا أنا أستخدم هذه الفكرة في برامج المخازن لعمل فاتورة ثابتة الطول بغض النظر عن عدد سجلاتها. ويمكن مضاعفة العدد باستخدام استعلام التوحيد وأعتقد سيكون كافيا مع ملاحظة أن استعلام التوحيد كذلك محدود في عدد الجداول أو الاستعلامات المطلوب توحيدها. والفكرة الأخرى الاستعانة بالإكسل. أحتاج جوابك حتى أبدأ الليلة ببلورة الفكرة وتطبيقها إن شاء الله.
  14. سأعود للموضوع بعد مضي 24 ساعة من كتابته لترك فرصة للمتداخلين.
  15. سأعود الليلة لأقرأه إن شاء الله
  16. هذه دالة من الزمن القديم من أبي هادي لعد أي يوم من الأسبوع بين تاريخين وإجراء مني لطريقة استخدامها: Function CountWkDay(ByVal Date1 As Date, _ ByVal Date2 As Date, _ WkDay As Byte) As Long 'WeekDay Counter Date1 = Date1 - 1 Date1 = Fix((Date1 + (7 - WkDay)) / 7) Date2 = Fix((Date2 + (7 - WkDay)) / 7) CountWkDay = Date2 - Date1 End Function Sub CountWkDayTest() Dim Date1 As Date Dim Date2 As Date Date1 = DateSerial(2022, 1, 1) Date2 = DateSerial(2022, 1, 20) MsgBox CountWkDay(Date1, Date2, vbFriday) + _ CountWkDay(Date1, Date2, vbSaturday) End Sub هذه الدالة قد تقلل من كتابة الأكواد وخطوات الحسابات للعاملين بشؤون الموظفين أو المحاسبين، وربما تكون سببا في تغيير ما تفكر فيه الآن. 🙂 . ممكن نعرف جدوى هذه الخطوة؟ سأعود لكم الليلة إن شاء الله.
  17. هذه دالة من الزمن القديم لأبي هادي لعد أي يوم من أيام الأسبوع بين تاريخين وإجراء مني لطريقة استخدامها: Function CountWkDay(ByVal Date1 As Date, _ ByVal Date2 As Date, _ WkDay As Byte) As Long 'WeekDay Counter Date1 = Date1 - 1 Date1 = Fix((Date1 + (7 - WkDay)) / 7) Date2 = Fix((Date2 + (7 - WkDay)) / 7) CountWkDay = Date2 - Date1 End Function Sub CountWkDayTest() Dim Date1 As Date Dim Date2 As Date Date1 = DateSerial(2022, 1, 1) Date2 = DateSerial(2022, 1, 20) MsgBox CountWkDay(Date1, Date2, vbFriday) + _ CountWkDay(Date1, Date2, vbSaturday) End Sub
  18. يمكن منع التكرار بدون تدخل الأكواد، فقط قم بجعل الحقل مفهرس لا يقبل التكرار. أنا اطلعت على المثال ولم أرى البحث عن التكرار، ربما كنت مشتتا وقت الفحص. أترك لكم المحاولات وإذا أردتم الفزعة فرعنا والعذر للزملاء.
  19. أمتلك الجواب ولكني أود السماح لمعلوماتكم وخبراتكم كما أو منكم لا يذهب أحدكم للبحث عن المعلومة ، اكتبوا فقط ما هو عالق في ذاكرتكم. والخيارات هي لإقفال الـ Recordset هكذا: rst.Close set rst = Nothing set dbs = Nothing أو هكذا: rst.Close set dbs = Nothing أو هكذا: set rst = Nothing set dbs = Nothing وإذا كانت الخيارات كلها سليمة فأيها الخيار الأمثل؟
  20. شكرا لكم ، لم أنتبه لهذه النقطة. يمكن الكثير لا يعرف الفرق بين النواتين ، ومن حفظي 🙂 الفرق هو فقط نطاق تخزين البيانات ، فأعتقد الـ 32 بت فيها الكفاية للاستخدام الشخصي وللشركات حتى المتوسطة وتترك الـ 64 بت للشركات الكبيرة وللبيانات الضخمة. إن شاء الله تكون معلومتي صحيحة.
  21. ربما هذه المشاركة فيها الحل
  22. ما شاء الله، رد كاف وواف، أشكرك كثيرا على تفضلكم. تحياتي لكم
  23. مساهمة إضافية بعد مساهمة أستاذنا @ابو جودي وبعد إذنه Private Sub AddNewDates() Dim rst As Recordset Dim iDate As Long Set rst = CurrentDb.OpenRecordset("tblDay", dbopendynaset) For iDate = CLng(Me.txtFirstDate) To CLng(Me.txtLastDate) If IsNull(DLookup("DayDate", "tblDay", "Clng(DayDate)=" & iDate)) Then If Weekday(iDate, vbSunday) < vbFriday Then If IsNull(DLookup("HolidayDate", "tblHolidays", "Clng(HolidayDate)=" & iDate)) Then With rst .AddNew !DayDate = iDate .Update End With End If End If End If Next iDate Set rst = Nothing MsgBox "Done" End Sub
  24. السلام عليكم أنا توقف بي الزمن عند نسخة 2007 والبسبب انها لم تعد "لغتي" الأولى كما السابق، فما النسخة البديلة التي تنصحوني بها حسب تجاربكم. علما أن عندي كثير من برامجي الخاصة المصممة بنسخة 2007 وقبلها ولا أريد أن أخسرها ولا أريد أن أشغل نفسي في تحديثها. فهل هناك عوائق غير مسألة اختلاف "النواة" 32 أو 64 بت؟ والسؤال الآخر هل أستطيع تركيب نسخة أخرى مع وجود/بقاء النسخة القديمة كما كنا نفعل سابقا؟ أم أن النسخ الجديدة تستطيع فتح جميع النسخ القديمة بدون تعديل؟.
  25. خلاص .. آخر نسخة 🙂 ، هذه النسخة تم فيها معالجة وضوح/جودة الطابعة فهذا الإعداد كان يؤثر على سمك البراويز، والحمد لله. DrawLines_05.accdb
×
×
  • اضف...

Important Information