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

jjafferr

أوفيسنا
  • Posts

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

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

  • Days Won

    404

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

  1. ما كان الاتفاق هكذا 😅 الاتفاق كان انك تجرب الزرين 🙂 وتخبرنا عن نسخة الاكسس ، 32بت او 64بت ، ونظام الوندوز ، وكذلك 32بت او 64بت 🙂 جعفر
  2. السلام عليكم 🙂 وبمناسبة ان اخونا العود ابوخليل مشارك ، ومن زمان ما مشاركين في نفس الموضوع ، سأفضي جعبتي 🙂 انزلت برنامج ، واشتغلت عليه علشان يشتغل بطريقتين مختلفات 🙂 فياريت التجربه تصير على اكثر من جهاز 🙂 جرب الزرين لوسمحت 🙂 . . و . جعفر OnScreenKeyboardDEMO_2.zip
  3. وعليكم السلام 🙂 انا قلت: . طيب اذا استعملت هذه الطريقة في عمل برنامجك ، فلن يكون هناك Toolbar لإسم النموذج وآخر لإسم البرنامج ، وبدون نماذج منبثقة فتستطيع ان تجعل اسم النموذج في المنتصف (رجاء تجرب النموذجين ، وشوف اسم النموذج واسم البرنامج على الشريط) : . جعفر TitleBar.zip
  4. وبعد اذن اخي احمد 🙂 التتمة هنا : جعفر
  5. شكرا جزيلا اخوي احمد 🙂 بالفعل طريقة جديدة على المنتدى 🙂 وفي انتظار ان يقوم الاعضاء بتجربة المرفق ، وموافاتنا بالنتيجة 🙂 جعفر
  6. همممم وحسب المعلومة اللي طرحتها في الرابط اعلاه ، فيكفي هذا الكود : Private Sub Form_Load() Me.Caption = Space(127 - Len(Me.Caption)) & Me.Caption End Sub . جرب واعمل تغيير للرقم ، من 127 الى 129 ، وشوف التسمية كيف تكون متآكلة من النهاية 🙂 جعفر
  7. وعليكم السلام 🙂 عندك 3 اختيارات 🙂 1 و 2 ، يعتمد على نسخة الاكسس التي قمت بتثبيتها : اذا بالانجليزي ، فعنوان النموذج يكون على اليسار ، واذا بالعربي ، فعنوان النموذج يكون على اليمين. 3. في الحالتين ا و 2 ، اذا اردت ان تزحف العنوان بعيد عن الاطراف (بس لا تخلي آمال كبيرة 🙂 ) : جعفر
  8. السلام عليكم 🙂 تفضل ، هذه طريقة جعل Listbox من اليمين الى اليسار: . وقد قمت اليوم بموضوع لجعل الرابط اعلاه يعمل على النواتين 32بت و 64بث: جعفر
  9. نعم ، عند حدث "بعد تحديث" حقل البحث ، اكتب Me.Requery جعفر
  10. السلام عليكم 🙂 لتعم الفائدة ، رجاء قراءة الطريقة السابقة ، والتي يمكن قراءتها من هنا : https://www.officena.net/ib/topic/107637-اجعل-برنامجك-يعمل-على-النواتين-32بت-و-64بت/ ------------------------------------------------------------------------------------------------------------------ اذا عملنا برنامج على الاكسس 32بت ، وفيه مكتبات الوندوز الـ 32بت (لاحظ الرقم 32 في اسم المكتبة: comdlg32.dll) ، ثم شغلنا البرنامج على اكسس 64بت ، فنحصل على هذا الخطأ : . للعمل بهذه الطريقة محتاجين الى: 1. ملف في موقع مايكروسوف (مرفق نسخة Win32API_PtrSafe.zip) ، وفيه طريقة عمل مناداة النواتين : https://www.microsoft.com/en-us/download/details.aspx?id=9970 وعند فك الملف ، سنستعين بالملف Win32API_PtrSafe.TXT ، 2. البرنامج Notepad++ المجاني ، ويمكن انزاله من هنا : https://notepad-plus-plus.org بعد تنصيب البرنامج ++Notepad ، يمكننا فتح الملف Win32API_PtrSafe.TXT به : هذا البرنامج يفهم تنسيق وعمل الكثير من لغات البرمجة ، ومنها VB ، ونستفيد منه حتى في برمجة كود VBE لأنه يفهم تنسيقها: . ------------------------------------------------------------------------------------------------------------------ سنستخدم المرفق في هذ الرابط لنجعله يعمل على النواتين 32بت و 64بت: https://www.officena.net/ib/topic/61106-هدية-من-اليمين-الى-اليسار،-مربع-القائمة-listbox-والشجرة-treeview/ هذه هي مكتبات 32بت الوندوز المستعمله في المرفق: Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Public Declare Function InvalidateRect Lib "user32" (ByVal hwnd As Long, lpRect As Long, ByVal bErase As Long) As Long Public Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long Public Declare Function GetFocus Lib "user32" () As Long Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long . خطوات العمل: A. ننسخ اسم المكتبة GetWindowLong من برنامج الاكسس ، B. ثم في برنامج ++Notepad ، نبحث عن هذه الكلمة عن طريق Ctrl+F ، C. فنضع الكلمة مكان البحث ، وننقر على المربع: Find All in Current Document . D. نرى هذ النافذة تُفتح في اسفل البرنامج ، اهم شيء في هذه النافذه هو ان نفرق بين كلمة البحث التي نريدها ، ونفرقها عن كلمات البحث المشابهه والتي لا علاقة لنا بها (يجب ملاحظة ان بعض البرامج/الامثلة التي ننزلها من الانترنت ، يكون صاحبها عمل تغيير في اسم المكتبة ، مثلا: بدل GetWindowLong يكون apiGetWindowLong ، فيجب ان نعرف انه نفس الاسم ، ونبحث عن الكلمة الاصل ، كما نلاحظ ان تعديل الاسم يتم من بدايته وليس من نهايته) . E. اذن نرى هنا ان آخر سطرين فيهما طلبنا ، F. ندقق في السطر ، ونبحث عن اي كلمة تنتهي بـ Ptr ، مثل LongPtr ، CLngPtr ، VarPtr ، ObjPtr ، StrPtr ، او الكلمات التالية LongLong ، CLngLng ، فاذا وجدناها ، اذن يجب التصريح لهذه المكتبة في الكود في برنامجنا على سطرين مختلفين ، السطر الاول للنواة 64 بت ، ونأخذه من برنرنامج ++Notepad ، والسطر الثاني للنواة 32 بت ، ونأخذه من برنامجنا الاصل ، هكذا : #If VBA7 And Win64 Then '64 bits Public Declare PtrSafe Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As LongPtr, ByVal nIndex As Long) As Long #Else '32 bits Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long #End If . *** الخطوة الاولى والاهم هي اضافة كلمة PtrSafe بعد كلمة Declare ، للنواة 64بت. *** لاحظ اننا اضفنا كلمة Public في اول السطر للنواتين ، *** وبعد كل خطوة نعملها ، يجب ان نعمل Compile :على الاكسس 32 بت والاكسس 64 بت :حتى نتأكد انه لا توجد اخطاء ونتبع نفس الخطوات اعلاه لبقية المكتبات ، المكتبة التاليه: SetWindowLong ، والنتيجة نفسها مثل المكتبة السابقة ، اذن الكود اصبح #If VBA7 And Win64 Then '64 bits Public Declare PtrSafe Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As LongPtr, ByVal nIndex As Long) As Long Public Declare PtrSafe Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As LongPtr, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long #Else '32 bits Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long #End If . وهكذا مع بقية المكتبات ، فيكون الكود النهائي: #If VBA7 And Win64 Then '64 bits Public Declare PtrSafe Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As LongPtr, ByVal nIndex As Long) As Long Public Declare PtrSafe Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As LongPtr, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Public Declare PtrSafe Function InvalidateRect Lib "user32" Alias "InvalidateRect" (ByVal hwnd As LongPtr, lpRect As Long, ByVal bErase As Long) As Long Public Declare PtrSafe Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As LongPtr, ByVal hWnd2 As LongPtr, ByVal lpsz1 As String, ByVal lpsz2 As String) As LongPtr Public Declare PtrSafe Function GetFocus Lib "user32" Alias "GetFocus" () As LongPtr Public Declare PtrSafe Function GetWindow Lib "user32" Alias "GetWindow" (ByVal hwnd As LongPtr, ByVal wCmd As Long) As LongPtr #Else '32 bits Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Public Declare Function InvalidateRect Lib "user32" (ByVal hwnd As Long, lpRect As Long, ByVal bErase As Long) As Long Public Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long Public Declare Function GetFocus Lib "user32" () As Long Public Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long #End If . الآن لنفترض ان لدينا هذه المكتبة كذلك: Public Declare Sub Sleep Lib "kernel32" (ByVal lngMilliSeconds As Long) . نلاحظ في البحث انه لا توجد لدينا اي من كلمات التي ذكرناها في #F اعلاه . اذن نكتب السطر (من برنامجنا ذو 32 بت) نفسه مرتين ، مرة للنواة 64 بت ، ومرة للنواة 32 بت ، فيصبح الكود (الفرق بين السطرين هي كلمة PtrSafe) : #If VBA7 And Win64 Then '64 bits Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal lngMilliSeconds As Long) #Else '32 bits Public Declare Sub Sleep Lib "kernel32" (ByVal lngMilliSeconds As Long) #End If او #If VBA7 And Win64 Then '64 bits Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal lngMilliSeconds As Long) #Else '32 bits Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal lngMilliSeconds As Long) #End If او سطر واحد مستقلا Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal lngMilliSeconds As Long) ------------------------------------------------------------------------------------------------------------------ 2021-11-20 : اخوي @عبدالله المجرب نبهني عند استخدام الاكسس 64بت ، يظهور خطأ في مرفق الرابط: https://www.officena.net/ib/topic/64989-هدية-برنامج-تصدير-بيانات-من-جداولاستعلامات-اكسس-الى-اكسل-،-32بت-و-64بت/ لما نعمل Compile للبرنامج على كمبيوتر به اكسس 64بت ، تظهر هذه الرسالة ، واللي معناها مافي توافق في تعريف المتغير (يعني جزء من سطر الكود تم تعريفه بطريقة ، وجزء آخر من سطر الكود تم تعريفه بطريقة لا تتلائم مع المتغير السابق ، وابسط مثال: متغير تم تعريفه كنص ، ثم تعطي قيمته الى متغير آخر تم تعريفه كرقم) : . من الملاحظة ، نرى انه بما اننا نستخدم اكسس 64بت ، فتعريف المكتبة ShellExecute يكون عن طريق (VB7) ، وتعريفها انها LongPtr ، بينما في الكود ، اعطينا قيمة ShellExecute الى المتغير lRet والذي تم تعريفه على انه Long ، لهذا السبب لا يوجد توافق بين المتغيرين ، وعليه نحصل على الخطأ !! هناك حلين للموضوع: إما ان نعمل if VBA7 then# خاص للمتغير lRet لحالتي 32بت و 64بت ، او نحذف تعريف المتغير lRet من الكود ، ونضعه في الاعلى ، مع تعريف المكتبة ShellExecute ، وهذا ما قمت به: . وبعد عمل Comiple مرة اخرى ، نحصل على خطأ مشابه للخطأ اعلاه ، ولكن لمكتبة اخرى : . والحل ، كما عملته للمشكلة السابقة ، فيصبح الكود : . وبعد عمل Compile مرة اخرى ، نجد ان الكود يعمل بدون اخطاء 🙂 ------------------------------------------------------------------------------------------------------------------ 2021-11-23: اخوي @ابا جودى طلب مساعدة في برنامجه ، ليعمل على النواتين: https://www.officena.net/ib/topic/111963-سؤال-بخصوص-التعديل-على-قاعدة-بيانات-لتعمل-على-32-64-bit/ والشيء الجديد فيه والذي لم يتم شرحه سابقا هو: المتغير hIcon (باللون الاصفر) ، تعريفه يعتمد على النواة : . وعندنا هذه الدالة fSetIcon ومعرفها Long ، وفي الدالة ، نعطي نتيجة hIcon الى fSetIcon . المشكلة لما نواة البرنامج تكون 64بت ، فحينها يكون معرف الحقل hIcon هو LongPtr ، بينما الدالة fSetIcon لا يزال معرفها Long ، وهنا نحصل على رسالة خطأ بعدم تطابق معرف الحقلين !! والطريقة التي استعملتها هي: استعمال الدالة مرتين ، مرة بمعرف LongPtr اذا كانت النواة 64بت ، ومرة بمعرف Long اذا لم تكن النواة 64بت : . وعلشان نعرف ان البرنامج تقبل هذا التغيير ، يجب ان نعمل Compile 🙂 جعفر Win32API_PtrSafe (2).zip
  11. وعليكم السلام 🙂 الشيء الوحيد الذي يأتي على بالي هو: مصدر بيانات النموذج هو استعلام ، وهذا الاستعلام به معيار يأخذ قيمته من حقل بحث النموذج ، ولكنك لم تخبر المعيار كيف يتعامل مع قيمة حقل البحث عندما يكون فارغ !! طبعا ، هذا مجرد مفهومي من شُح البيانات التي وضحت لنا المشكلة 🙂 جعفر
  12. هدئ اعصابك ، الموضوع معقد اكثر مما يظهر 🙂 اليوم ان شاء الله اعرض عليك كود ممكن يحل الموضوع 🙂 لاحظ ، انت قلت بدون كود ، وانا قلت كود 🙂 جعفر
  13. لم الاحظ المسافة الزائدة 🙂 كما لاحظنا في مشاركتي اعلاه ، وبسبب وجود اشارتين/رمزين CR LF ، فالمسافة (واقعا هي ليست مسافة ، وانما الانتقال الى السطر التالي) ، ونحن وقفنا عند الرمز الاول ولم نعير انتباه للرمز الآخر ، فنتجت عنه هذه المسافة 🙂 تفضل هذا التعديل: S: Mid([NASS],1,InStr([NASS],Chr(13))-1) . ومفهمومك صحيح 100% ، وليس عندي جواب لهذه الظاهرة ، غير اننا نستعمل اللغة العربية والتي تعمل بعض الاشكالات 😁 ولكن تم حلها كما في الطريقة السابقة ، بتنقيص نفس الرقم المستخدم في البداية ، هكذا: S2: Mid([NASS],5,InStr([NASS],Chr(13))-5) جعفر 1413.MZ.accdb.zip
  14. تفضل 🙂 اذا كنت تريد هذه النتيجة: . فهذا هو الاستعلام: . وهذه جملة SQL الاستعلام: SELECT tb1.الحقل7 FROM tb1 WHERE (((tb1.الحقل7) Is Not Null)) ORDER BY Int(Mid([الحقل7],InStr([الحقل7],"/")+1)), Int(Mid([الحقل7],1,InStr([الحقل7],"/")-1)); جعفر 1414.2.t1.accdb.zip
  15. ما ادري ، هذا خارج تخصصي 😁 نشوف الشباب اللي لهم باع بهذه البرامج مثل @صالح حمادي و @Elsayed Bn Gemy و @SEMO.Pa3x و @ابوآمنة و @د.كاف يار واكيد نسيت آخرين 🙂 جعفر
  16. وعليكم السلام 🙂 تم الرد على هذا السئال هنا . هل جد جديد ؟ جعفر
  17. وعليكم السلام 🙂 اذا البرنامج بصيغة mdb او mde ، فنعم في برامج لفك كلمة السر ، ولكن لا يوجد برنامج لفك كلمة السر للبرامج بصيغة accdb او accde ، فكل البرامج عندها محاولات لفك كلمة السر 🙂 والحكم الانترنت ، ابحث ، وبتشوف النتائج 🙂 الاكسس بصيغة accdb لا يمكن كسر كلمة سره بسهوله وبالطرق الاعتيادية (يعني مستخدم عادي ويستعمل برامج مساعدة من الانترنت) ، وهنا حاول الاعضاء مساعدة اخوي سلمان . وعلى اساس طول كلمة السر ، وخلط الارقام والرموز فيها ، هنا نرى الوقت الذي يمكن ان تستغرقه (برامج محاولة الكشف عن كلمة السر) لكشف كلمة السر: فام اخونا @kaser906 بعمل نفس اللق تقوله ، بس بالاكسس جعفر
  18. وعليكم السلام 🙂 1. في الاستعلام ، انت استخدمت المعيار Like "*" & "@@$ " & "*" وهذا معناه ابحث في الحقل ، وفي اي مكان منه تجد الجملة "@@$ " ، اعرض السجل ، بينما انت تريد الحقل الذي يبدأ بالجملة "@@$ " ، فيجب ان يصبح المعيار Like "@@$ " & "*" 2. يجب التدقيق في "ماذا يوجد نهاية اول سطر" ، حتى يمكننا اعطاء الامر لتفكيك اول سطر عن بقية بيانات الحقل . الطريقة الاولى هي استعمال الطريقة/الطرق من هذا الرابط . والطريقة الثانية ، هي استعمال برنامج يساعدنا في هذا ، وانا استخدم هذا البرنامج المجاني Notepad++ في جميع كمبيوترات عملي: https://notepad-plus-plus.org وعليه ، نرى هذه النتيجة لما وضعنا هذه الحقول في البرنامج اعلاه: . اذن تم معرفة ماهية نهاية الاسطر ، والاشارة/الرمز CR LF ، يمكن ترجمتها الى احد هاتين الجملتين (في الرابط اعلاه ، هنا جدول ascii وسنرى فيه هذه العلامة وقيمتها) : chr(13) او chr(10) ، او كليهما مع بعض ، ونحتاج الى التجربة للتأكد من استخدام ايهم. في الاستعلام ، في حقل جديد ، نضع : S: Mid([NASS], 1 , InStr([NASS],Chr(13)) ) نستخدم الامر Mid ، نقول فيه ، ابدأ من اول حرف في الحقل NASS ، ثم نستخدم الامر InStr لمعرفة اذا كانت الاشارة/الرمز chr(13) صحيح ، واين موقعه في السطر (او كما قلنا سابقا: CR ) ، هذا معناه ، الامر Mid يُظهر لنا نتائج من الحرف الاول الى المكان الذي نحصل عليه الرمز chr(13) ، وعلى اساس هذه النتيجة نقرر اذا كنا بحاجة الى استعمال chr(10) او لا ، وعند تشغيل الاستعلام ، تظهر لنا هذه النتائج : . اذن تجربتنا صحيحة ، وتم الحصول على السطر الاول ، 3. تحويل هذا الاستعلام الى استعلام الحاقي ، لنلحق هذه البيانات في الجدول TAB_Msaaneed ، في الحقل MS_NAME : . والنتيجة: . جعفر 1413.MZ.accdb.zip
  19. جرب هذا الكود ، ولاحظ ما عندنا me.refresh : Private Sub Form_Timer() On Error GoTo err_Form_Timer Me.[امع1].Form.Requery Me.[امع2].Form.Requery Me.[امع3].Form.Requery Me.[امع4].Form.Requery Me.[امع5].Form.Requery Me.[امع6].Form.Requery Exit_Form_Timer: Exit Sub err_Form_Timer: If Err.Number = 1 Then 'Resume Next Else MsgBox Err.Number & vbCrLf & Err.Description End If Resume Exit_Form_Timer End Sub جعفر
  20. اخي الفاضل ، صدقني ما يحتاج تستخدم التحديث ، وتستطيع حذف التوقيت و me.refresh 🙂 الاكسس يقوم بهذا الشيء عند فتح المستخدم النموذج. جعفر
  21. هذا النموذج لا يحتاج تحديث 🙂 كلما يتم ادخال/تعديل سجل في النموذج ، فيكون هذا السجل تلقائيا جاهز ببياناته الجديدة لأي مستخدم آخر يقوم بفتح النموذج من كمبيوتر آخر 🙂 جعفر
  22. انت تحتاج الى تحديث النموذج فقط اذا كان النموذج يكون مفتوح طوال الوقت ولا يتم اغلاقه ، وتريد ان ترى التغييرات تتم فيه ، كل فترة ، مثال النموذج المفتوح على كمبيوتر المدير !! اما لبقية عمل البرنامج ، فلا حاجة للتحديث، لأن الاكسس تلقائيا يجلب البيانات المحدثة 🙂 جعفر
  23. وعليكم السلام 🙂 يا لطيف !! ليش كود التحديث؟ جعفر
×
×
  • اضف...

Important Information