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

الردود الموصى بها

قام بنشر

السلام عليكم

مرفق مثال مصغر          عند البحث فى المنتدى

يوجد كثير من الاسئلة حول هذا الموضوع ووجد موضوع استاذنا الفاضل / جعفر يشرح كيف تجعل برنامج يعمل على النوايتين ـ ولكن للاسف بعض الامور لم افهمها لانى ضغيف جدا فى الاكسس

ولذلك ارجو ان يعمل المثال المرفق على النواتين 32 -64 مثل برنامج استاذنا الفاضل / جعفر

وانا استخدم 32 بت ولكن عندى لاب به 64 فسوف اجرب على الاثنين

جزاكم الله خير

نسيت ارفق المثال

النواتين 32 و 64.accdb

قام بنشر
50 دقائق مضت, الحلبي said:

يوجد كثير من الاسئلة حول هذا الموضوع ووجد موضوع استاذنا الفاضل / جعفر يشرح كيف تجعل برنامج يعمل على النوايتين ـ ولكن للاسف بعض الامور لم افهمها لانى ضغيف جدا فى الاكسس

اى برامج يتم تصميمها بالشكل الطبيعى تعمل على النواتان يا دكتور بدون اى مشاكل 

 

اما الاكواد والتى تعتمد الربط الديناميكى Dynamic Link Libraries اى التى تعتمد على ما نسميه بملفات DLL
بناء على دوال API  أى Application Programming Interface  يعنى واجهة برمجة التطبيقات

مثلا مثل 

Private Declare Function MessageBox Lib "user32" Alias "MessageBoxA" (ByVal hWnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As Long

هى التى تحتاج الى معاملة من نوع خاص لاعادة صياغتها لتعمل على النواتان

وهذا ما تناوله استاذى القدير و معلمى الجليل الاستاذ @jjafferr  فى موضوعه

 

قام بنشر
29 دقائق مضت, ابو جودي said:

وهذا ما تناوله استاذى القدير و معلمى الجليل الاستاذ @jjafferr  فى موضوعه

استاذنا الفاضل ومعلمى القدير الباشمنهدس ابو جودى 

كنت متوقع حضرتك تدخل او الاستاذ الفاضل / @ابوخليل وانتما كثيرا ماتقدمون المساعدة لامثالى

حضرتك تشرح لى وكانى فى السنة النهائية فى كلية اكسس

استاذى الفاضل ايه الكود الذى اضعة فى البرنامج عشان يشتغل على النواتين

ياريت حضرتك لو تكرمت تضع هذا الكود فى المثال المرفق

قام بنشر

الكود الذي اشار اليه استاذنا محمد عصام @ابو جودي يعمل على النواة 32 بت

اما اذا اردت تحويله الى نظام يعمل على 64 بت ..في رأيي تعمل نسخة ثانية ..فتصبح الدالة كما يلي :

Private Declare ptrsafe Function MessageBox Lib "user32" Alias "MessageBoxA" (ByVal hWnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As Long

'طبعا هناك برامج متقدمة تستطيع فيها ان يعمل نفس البرنامج على 32 بت او 64 بت ..مثل

#If VBA7 And Win64 Then
    'x64 Declarations
    Private Declare PtrSafe Function apiGetUserName Lib "advapi32.dll" Alias _
            "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long
#Else
    'x32 Declaration
    Private Declare Function apiGetUserName Lib "advapi32.dll" Alias _
            "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long
#End If

تحتاج منك الاطلاع والقراءة ..وهناك الكثير في المنتدى مما تطيب لها نفسك 

تحياتي دكتور

قام بنشر
6 ساعات مضت, محمد احمد لطفى said:

مثل ما أشار عليه أستاذى ابو جودى

استاذ / محمد احمد لطفى هذا مثال صغير انا عملته صغير ومختصر لذلك يعمل على النواتين اما البرنامج الذى اعمل عليه كبير جدا ولا يعمل على 64 بت ولكن يعمل على 32 بت

 

4 ساعات مضت, Eng.Qassim said:

اما اذا اردت تحويله الى نظام يعمل على 64 بت ..في رأيي تعمل نسخة ثانية ..فتصبح الدالة كما يلي :

استاذى ومعلمى القدير / قاسم

ان اريد ان يعمل على النواتين بمعنى عندى جهاز 32 بت يعمل بدون مشاكل ولو نقلته على جهاز 64 يعمل بدون مشاكل

هل الكود الذى حضرته ارفقته يعمل على النوايتن ام انه يعمل على 64 فقط

جزاكم الله خير على المدخله والاجابات المفرحة

قام بنشر

دكتور @الحلبي سأحاول تبسيط المسألة لك بأبسط شرح ممكن أن تحصل عليه 🙂 

* لكي يعمل عندك البرنامج على النواتين في نفس الوقت ... في الأغلب أنت ستحتاج تغيير نوع محدد من الأكواد ..

وهي الأكواد التي تأتي كلمة  ......... Declare ............. في سياقها ..

 

لكي يعمل الكود على النواة 32 يكتب الكود هكذا :

 .....................................Private Declare Function

ولكي يعمل الكود على النواة 64 يتم إضافة كلمة واحدة وهي ptrsafe بعد كلمة Declare فيصبح  الكود هكذا :

 ................................... Private Declare ptrsafe Function

ولكي تجمع بين هذين الخيارين من أجل أن يعمل البرنامج على الأجهزة المختلفة مهما كانت النواة يتم كتابتهما معا هكذا :

#If VBA7 And Win64 Then
    'For :64
    Private Declare PtrSafe Function apiGetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long
#Else
    'For :32
    Private Declare Function apiGetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long
#End If

 

وهذا هو مختصر المختصر 🙂 

قام بنشر
2 ساعات مضت, Moosak said:

وهذا هو مختصر المختصر 🙂 

رائع جدا وجميل جدا هذا الشرح اين انت من زمان اشكرك معلمنا الفاضل @Moosak

واين اضع هذا الكود 

جزاك الله كل خير وبارك فيك ورزقك من غير حساب

قام بنشر
24 دقائق مضت, الحلبي said:

واين اضع هذا الكود 

دكتورنا @الحلبي .. هذه العملية التي وضحتها لك تعملها فقط لو أنت مستخدم في برنامجك هذا النوع من الأكواد ..

وإذا كنت مستخدمنها وموجودة في برنامجك فعلا .. إبحث في أكواد البرنامج عن الكلمة Declare  .. وطبق على تلك الدوال نفس الشرح اللي وضحته لك سابقا .. 🙂 

قام بنشر

تمام

جزاك الله كل خير

10 ساعات مضت, Moosak said:

وطبق على تلك الدوال نفس الشرح اللي وضحته لك

 

قام بنشر

اعتذر للتأخير 

يا دكتور اقرأ مقال مايكروسوفت ده الدنيا هتوضح اكثر وهتكون مدرك كمان للتغيرات التى يجب ان تحدث لعمل التوافقية لكل نواة

https://learn.microsoft.com/ar-sa/office/client-developer/shared/compatibility-between-the-32-bit-and-64-bit-versions-of-office

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information