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

AbuuAhmed

الخبراء
  • Posts

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

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

  • Days Won

    17

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

  1. راجعت الكود ولاحظت أن اسم المحل قد يتسبب في فشل عملية البحث لو احتوى على الداش "-" فأقترح تبديل سطر واحد في الكود كالتالي: 'pos = InStr(1, QR, "-") pos = InStrRev(QR, "-", -1) - 3
  2. أقترح باستخدام DMax بدلا من DLast تفاديا لأخطاء ادخالات الموظفين، فـ DLast تأخذ القيم حسب ترتيب اضافتها للجداول. والمعذرة لكم.
  3. هذا إجراء للزر في حدث عند النقر Private Sub cmdDelet_Click() Dim Records As Long Dim Msg As String Dim ctl As Control Dim TableName As String On Error Resume Next TableName = "tblTable1" Set ctl = Me.n If Trim(Nz(ctl, "")) = "" Then MsgBox "الحقل فارغ .. يجب أن يحتوي على قيمة ما", , "عفوًا" ctl.SetFocus GoTo ExitSub End If Records = DCount("*", TableName, "n=" & ctl) If Records = 0 Then MsgBox "لا يوجد سجلات بنفس القيمة لحذفها", , "عفوًا" GoTo ExitSub End If Msg = "سوف يتم حذف " & Records & " سجلات نهائيا الآن" If vbOK = MsgBox(Msg, vbOKCancel + vbDefaultButton2, "تأكيد") Then Err.Clear DoCmd.RunSQL "Delete * from [" & TableName & "] where n=" & ctl & ";" If Err.Number = 0 Then MsgBox "تم الحذف" Else MsgBox Err.Description, , Err.Number End If End If ExitSub: Set ctl = Nothing End Sub Database32_02.accdb
  4. جربي المرفق الجدول يحتاج إلى تحجيم حقلي الكيوآر واسم المحل أما بقية الحقول أنا قمت بتعديلها. ZatkaQR.a_02.accdb
  5. لا تضيف أي أمر جديد ، فقط قم بزيادة الحرفين لكل أوامر مناداة Sendkeys - تخلص من الأوامر التي لها علاقة بلوحة المفاتيح بالحذف تماما الموجودة في البرنامج SendKeys "{NUMLOCK}" ثم قم بتعديل الأوامر الأخرى بإضافة الحرفين إليها والتي كانت هكذا: SendKeys "{}" إلى هذا الشكل بعد التعديل: mySendKeys "{}" والسبب لأن هذه الأوامر هي سبب المشكلة ونحتاج إلى استئصالها من الأساس ولا داعي أبدا أبدا لاستعمال أمر لوحة المفاتيح.
  6. من تساهل الفجوال قبول تمرير هذه القيم بين الأنواع بدون دوال التحويل مع أنها مع أكثر اللغات أخطاء ومرفوضة حتى قبل التشغيل. Sub TypesTest() Dim L As Long Dim B As Byte Dim S As String L = 255 B = L S = B B = S End Sub
  7. وهذا من تساهل الفيجوال 🙂 فبعض اللغات تجبرك على أن يكون النوع تماما كما المطلوب، في الفجوال لو وضعت قيمة Long في Byte ستقبل ما دامت القيمة لا تزال في حدود نطاق البايت من 0..255 ولكن بمجرد خروج القيمة عن النطاق سوق تصطدم برسالة خطأ. أمور كثيرة تعمل "بالبركة" ولكن لا يؤمن نتائجها ومع كثرة الاستخدام والتجارب تأتي المفاجآت ويضطر المبرمج إلى التصحيح. لا بد من الاحتراز بدراسة النطاق لكل متغير/نوع على مستوى الفيجوال أو الجداول، الآن عرفنا منكم مشكورين أن هناك نوع أكبر من Long وهو Large Number وأعتقد هو مساو للـ LongLong في النطاق، لم أدقق.
  8. اعمل مديول وما عليك إلا إضافة حرفي "my" في بداية استدعاء Sendkeys لتصبح mySendkeys
  9. ماهو أكبر نوع حقل في جداول النسخ 64 بت؟ يفترض أن يكون هناك نوع LongLong أحتاج إلى جواب هذا السؤال. عموما يفترض من يستخدم دوال API أن يبدل النوع من Long إلى LongLong أو يستخدم ما يشبه المحول LongPtr فهو يقوم بالتبديل بين Long و LongLong حسب نواة الأكسس. وشكرا للجميع.
  10. أشكركم على المشاركات الكريمة والساهمة في إثراء الموضوع معلومات التي من حفظي 🙂 ولم أراجعها: 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 وتحياتي لكم.
  11. جرب مثال الأستاذ أكسسنا بعد التصرف بإضافة حدث عند التغيير حسب طلبك كبير وتصغيرمربع النص_02.mdb
  12. ممكن التعديل على كود المثال باستخدام حدث عند التغيير ينادى زر التحجيم. حاول تعملها وإن شاء تنجح معك وإلا سأقوم أنا بالتعديل الليلة في وقت متأخر إن شاء الله
  13. لا يا عزيزي ، هو يعطيك العرض والإرتفاع بعد التحجيم وهي نتيجة إضافية على النتيجة المطلوبة وهو التحجيم، جرب مرة ثانية. بدل حجم الخط وباقي الخصائص مثل ثم اضغط تحجيم مرة أخرى وهكذا، إذا ضغطت 1000 مرة على زر تحجيم وهو على نفس الخصائص فلن تغييرا.
  14. استخدم هذا الإجراء بدلا من الأصل (من جلب الأستاذ جعفر) ولن تشاهد هذه المشكلة مرة أخرى. 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
  15. جرب هذا المثال ، الفكرة الأولى Daynamic Gnrate Date_02.mdb
  16. في بالي حاليا فكرتين: أولهما عمل جدول من حقل واحد نوع بايت ونضع فيه مسلسل من 0 إلى 255 وهذا الجدول يبقى مصاحبا لقاعدة البيانات ويصلح أن يكون متعدد الاستخدامات، فمثلا أنا أستخدم هذه الفكرة في برامج المخازن لعمل فاتورة ثابتة الطول بغض النظر عن عدد سجلاتها. ويمكن مضاعفة العدد باستخدام استعلام التوحيد وأعتقد سيكون كافيا مع ملاحظة أن استعلام التوحيد كذلك محدود في عدد الجداول أو الاستعلامات المطلوب توحيدها. والفكرة الأخرى الاستعانة بالإكسل. أحتاج جوابك حتى أبدأ الليلة ببلورة الفكرة وتطبيقها إن شاء الله.
  17. سأعود للموضوع بعد مضي 24 ساعة من كتابته لترك فرصة للمتداخلين.
  18. سأعود الليلة لأقرأه إن شاء الله
  19. هذه دالة من الزمن القديم من أبي هادي لعد أي يوم من الأسبوع بين تاريخين وإجراء مني لطريقة استخدامها: 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 هذه الدالة قد تقلل من كتابة الأكواد وخطوات الحسابات للعاملين بشؤون الموظفين أو المحاسبين، وربما تكون سببا في تغيير ما تفكر فيه الآن. 🙂 . ممكن نعرف جدوى هذه الخطوة؟ سأعود لكم الليلة إن شاء الله.
  20. هذه دالة من الزمن القديم لأبي هادي لعد أي يوم من أيام الأسبوع بين تاريخين وإجراء مني لطريقة استخدامها: 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
  21. يمكن منع التكرار بدون تدخل الأكواد، فقط قم بجعل الحقل مفهرس لا يقبل التكرار. أنا اطلعت على المثال ولم أرى البحث عن التكرار، ربما كنت مشتتا وقت الفحص. أترك لكم المحاولات وإذا أردتم الفزعة فرعنا والعذر للزملاء.
  22. أمتلك الجواب ولكني أود السماح لمعلوماتكم وخبراتكم كما أو منكم لا يذهب أحدكم للبحث عن المعلومة ، اكتبوا فقط ما هو عالق في ذاكرتكم. والخيارات هي لإقفال الـ Recordset هكذا: rst.Close set rst = Nothing set dbs = Nothing أو هكذا: rst.Close set dbs = Nothing أو هكذا: set rst = Nothing set dbs = Nothing وإذا كانت الخيارات كلها سليمة فأيها الخيار الأمثل؟
  23. شكرا لكم ، لم أنتبه لهذه النقطة. يمكن الكثير لا يعرف الفرق بين النواتين ، ومن حفظي 🙂 الفرق هو فقط نطاق تخزين البيانات ، فأعتقد الـ 32 بت فيها الكفاية للاستخدام الشخصي وللشركات حتى المتوسطة وتترك الـ 64 بت للشركات الكبيرة وللبيانات الضخمة. إن شاء الله تكون معلومتي صحيحة.
  24. ربما هذه المشاركة فيها الحل
  25. ما شاء الله، رد كاف وواف، أشكرك كثيرا على تفضلكم. تحياتي لكم
×
×
  • اضف...

Important Information