jjafferr قام بنشر أكتوبر 19, 2015 قام بنشر أكتوبر 19, 2015 السلام عليكم ورحمة الله وبركاته هذا الموضوع اُثير اكثر من مرة في الآونة الاخيرة ، ورأيت من الافضل ان اضع مثال ليقتدي به الجميع وقبل ان نبدأ ، اود ان اشير الى انني اعمل على اكسس 32 بت ، ولا املك نسخة من اكسس 64 بت احب ان اشير الى الرابط الذي شرحت فيه ان مايكروسوفت توصي بتنصيب الاوفيس / اكسس 32 بت ، بغض النظر عن نوع الوندوز المنصّب على الكمبيوتر ، سواء كان 32 بت او 64 بت: http://www.officena.net/ib/topic/64036-هل-استخدم-اوفيس-32-بت-او-64-بت/ ولكن ، ماذا نفعل اذا عملنا برنامجنا على اكسس 32 بت ، واتضح ان الزبون عنده جهاز فيه اكسس 64 بت المثال التالي يشتغل على 32 بت و 64 بت ، ونستطيع ان نستفيد منه لعمل برنامجنا البرنامج المرفق ، بعد فك الضغط ، سيحتوي على 3 برامج: . هذا برنامج No_Password_BE.accdb ، وبه جدول واحد ، ولا يحتاج الى كلمة سر لفتحه: . هذا برنامج Password_is_jj_BE.accdb ، وبه جدول واحد ، وكلمة السر لفتحه هي jj: . البرنامج: JStreetAccessRelinker2.accdb من الرابط http://www.jstreettech.com/downloads.aspx ، وبه ماكرو ووحدات نمطية تعمل على 32 بت و 64 بت (فالفضل في هذا المثال يعود للبرنامج وليس لي ) ، وقد قمت بإضافة نموذج لربطه مع احد برنامج الجداول اعلاه ، ومبدئيا فهو مرتبط مع البرنامج No_Password_BE.accdb ، . وعند فتح البرنامج لأول مرة ، سوف يفتح نافذة تطلب معرفة مكان برنامج الجداول No_Password_BE.accdb ، وتستطيع ان تنقر على الزر Link Another BE ، وستفتح لك نافذة تطلب منك معرفة مكان برنامج الجداول الجديد الذي تريد ان تربطه (بدل البرنامج No_Password_BE.accdb) : . وبما ان البرنامج هذا محمي بكلمة سر ، فسوف تظهر لك نافذة لإدخال كلمة السر (لاحظ ان الادخال مشفر) : . وعندما يتم الربط ، سترى رسالة التاكيد: . الرجاء من الشباب الذين لديهم نسخة من الاكسس 64 بت ، التاكد من ان البرنامج يشتغل على كمبيوترهم بدون اخطاء. عندما نريد ان نعمل برنامج يشتغل على النسختين 32 و 64 بت ، فكود النماذج هو نفسه بين نسختي 32 بت و 64 بت ، والشئ الوحيد الذي يتغير هو دوال الوحدات النمطية API ، والكود الذي ينادي هذه الوحدات (بغض النظر سواء كان في نموذج او في وحدة نمطية مستقلة) ، هنا سوف اعطي مثال واحد من الكود عن طريقة العمل للنسختين 32 و 64 بت: الكود التالي يستعمل دالة API فتح نافذة اختيار ملف ، والدالة هي 32 بت (لاحظ comdlg32.dll ) : Private Declare Function GetOpenFileName Lib "comdlg32.dll" _ Alias "GetOpenFileNameA" (OPENFILENAME As tagOPENFILENAME) As Long الان اذا اردنا ان نجعل هذه الداله API تعمل على 64 بت كذلك ، فالكود يجب ان يكون: #If VBA7 Then 'هذه لنسخة 64 بت Private Declare PtrSafe Function GetOpenFileName Lib "comdlg32.dll" _ Alias "GetOpenFileNameA" (OPENFILENAME As tagOPENFILENAME) As Boolean #Else 'وهذه لنسخة 32 بت Private Declare Function GetOpenFileName Lib "comdlg32.dll" _ Alias "GetOpenFileNameA" (OPENFILENAME As tagOPENFILENAME) As Long #End If ولاحظ في كود البرنامج ، انه تم جمع جميع الدوال مع بعض ، وجمعها في if# و else# و end if# واحدة. وهناك اصدار جديد لكود الربط ، ويمكن انزاله من هنا: http://www.jstreettech.com/files/JStreetAccessRelinker2.zip جعفر 238.Work_on_32Bits_and_64Bits.zip 6 2
محمد سلامة قام بنشر أكتوبر 19, 2015 قام بنشر أكتوبر 19, 2015 ماشاء الله استاذي جعفر جميل جدا هذا المثال اعجبني جدا موضوع الباسوورد جاري التجربة بتمعن
mosa2000 قام بنشر أكتوبر 20, 2015 قام بنشر أكتوبر 20, 2015 بارك الله فيك أخي هذا ما كنت أبحث عنه وسوف أجرب البرنامج على أكسس 64بت وأوافيك باليقين
كرار صبري _ أبو جنى قام بنشر أكتوبر 21, 2015 قام بنشر أكتوبر 21, 2015 مع اني مبتدئ في البرمجة ( ما فهمت الي صار ) ... لكن الاكسس عندي 64 و شغال بدون اخطاء ...
علي المصري قام بنشر أكتوبر 31, 2015 قام بنشر أكتوبر 31, 2015 ممكن مثال يشرح الاكواد أي مثال بعيد عن ربط قاعدة البيانات بقاعدة أخرى او جداول اريد مثال به الاكواد كي اتعلم منها اين يتم وضع الاكواد والطريقة التي استخدمها في وضع الاكواد في مكانها المناسب لاني قمت باستخدام الكود التالي #If VBA7 Then 'هذه لنسخة 64 بت Private Declare PtrSafe Function GetOpenFileName Lib "comdlg32.dll" _ Alias "GetOpenFileNameA" (OPENFILENAME As tagOPENFILENAME) As Boolean #Else 'وهذه لنسخة 32 بت Private Declare Function GetOpenFileName Lib "comdlg32.dll" _ Alias "GetOpenFileNameA" (OPENFILENAME As tagOPENFILENAME) As Long #End If ولكن عند فتح احد النماذج اعطى رسالة خطأ في الكود وبعدها حذفت الكود ولكن النموذج اصبح يفتح معي ولكن لا يظهر أي كائنات فيه فرجاء مثال يوضح استخدام الاكواد هل الكود يبقى كما هو ام يتم إزالة علامة الهاش #
jjafferr قام بنشر نوفمبر 18, 2015 الكاتب قام بنشر نوفمبر 18, 2015 (معدل) السلام عليكم ورحمة الله وبركاته هذا الرابط يحتوي على الكثير من الدوال والتي تم تضبيطها للعمل على الاكسس 32بت و 64بت: http://www.jkp-ads.com/articles/apideclarations.asp فقط ابحث عن الدالة ، واعمل نسخ/لصق للكود وهذا رابط آخر فقط لدوال 64بت (المعدّلة من 32بت): http://www.utteraccess.com/wiki/index.php/Category:API جعفر تم تعديل نوفمبر 18, 2015 بواسطه jjafferr 1
jjafferr قام بنشر نوفمبر 18, 2015 الكاتب قام بنشر نوفمبر 18, 2015 (معدل) في 10/31/2015, 1:29:05, علي المصري said: ممكن مثال يشرح الاكواد أي مثال بعيد عن ربط قاعدة البيانات بقاعدة أخرى او جداول اريد مثال به الاكواد كي اتعلم منها اين يتم وضع الاكواد والطريقة التي استخدمها في وضع الاكواد في مكانها المناسب لاني قمت باستخدام الكود التالي #If VBA7 Then 'هذه لنسخة 64 بت Private Declare PtrSafe Function GetOpenFileName Lib "comdlg32.dll" _ Alias "GetOpenFileNameA" (OPENFILENAME As tagOPENFILENAME) As Boolean #Else 'وهذه لنسخة 32 بت Private Declare Function GetOpenFileName Lib "comdlg32.dll" _ Alias "GetOpenFileNameA" (OPENFILENAME As tagOPENFILENAME) As Long #End If ولكن عند فتح احد النماذج اعطى رسالة خطأ في الكود وبعدها حذفت الكود ولكن النموذج اصبح يفتح معي ولكن لا يظهر أي كائنات فيه فرجاء مثال يوضح استخدام الاكواد هل الكود يبقى كما هو ام يتم إزالة علامة الهاش # . انا اعتذر منك أستاذ علي على عدم الرد ، فلم الحظه الا قبل قليل الكود يجب ان يكون في وحدة نمطية مستقلة خارج النموذج. في 10/21/2015, 12:31:26, karrar sabry said: مع اني مبتدئ في البرمجة ( ما فهمت الي صار ) ... لكن الاكسس عندي 64 و شغال بدون اخطاء ... . شكرا جزيلا على التأكيد جعفر تم تعديل نوفمبر 18, 2015 بواسطه jjafferr
رمهان قام بنشر ديسمبر 22, 2015 قام بنشر ديسمبر 22, 2015 في ١٩/١٠/٢٠١٥ at 00:13, jjafferr said: #If VBA7 Then 'هذه لنسخة 64 بت Private Declare PtrSafe Function GetOpenFileName Lib "comdlg32.dll" _ Alias "GetOpenFileNameA" (OPENFILENAME As tagOPENFILENAME) As Boolean #Else 'وهذه لنسخة 32 بت Private Declare Function GetOpenFileName Lib "comdlg32.dll" _ Alias "GetOpenFileNameA" (OPENFILENAME As tagOPENFILENAME) As Long #End If حبيت انبه اخي جعفر بان المسؤول عن كشف نوع الاوفيس من ناحية 32 بت او 64 بت هو التعبير التالي : #If Win64 Then ' Win64 #Else ' win 32 #End If وليس vba7 فهذه لكشف اصدار محرر الفيجول بيسك والذي سيعتبر لكشف اصدار الاوفيس حيث 7 تشير لاوفيس 2010 وما فوق ! هذا وسيكون لي محاولة وبموضوع جديد حول الاصدارين 32 بت و 64 بت الفرق والاعتبارات ! تحياتي للجميع 1 1
jjafferr قام بنشر ديسمبر 22, 2015 الكاتب قام بنشر ديسمبر 22, 2015 47 دقائق مضت, رمهان said: المسؤول عن كشف نوع الاوفيس من ناحية 32 بت او 64 وليس vba7 شكرا على التصحيح الفني ولكني اللي فهمته ان #If VBA7 Then 'هذه لنسخة 64 بت Private Declare PtrSafe Function GetOpenFileName Lib "comdlg32.dll" _ Alias "GetOpenFileNameA" (OPENFILENAME As tagOPENFILENAME) As Boolean #Else 'وهذه لنسخة 32 بت Private Declare Function GetOpenFileName Lib "comdlg32.dll" _ Alias "GetOpenFileNameA" (OPENFILENAME As tagOPENFILENAME) As Long #End If سيجعل الكود يعمل على 32بت (والذي يعمل عندي) و 64بت (كما اكده الاخ كرار karrar sabry). ورجوعا الى رابط تعديل الكود بين 32بت و64بت ، وجدت هذه الملاحظة : 'This is one of the few API functions that requires the Win64 compile constant: #If VBA7 Then #If Win64 Then Private Declare PtrSafe Function GetWindowLongPtr Lib "USER32" Alias "GetWindowLongPtrA" (ByVal hWnd As LongPtr, ByVal nIndex As Long) As LongPtr #Else Private Declare PtrSafe Function GetWindowLongPtr Lib "USER32" Alias "GetWindowLongA" (ByVal hWnd As LongPtr, ByVal nIndex As Long) As LongPtr #End If #Else Private Declare Function GetWindowLongPtr Lib "USER32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long #End If جعفر 1
سلمان الشهراني قام بنشر مارس 6, 2018 قام بنشر مارس 6, 2018 #If VBA7 Then 'هذه لنسخة 64 بت Private Declare PtrSafe Function GetOpenFileName Lib "comdlg32.dll" _ Alias "GetOpenFileNameA" (OPENFILENAME As tagOPENFILENAME) As Boolean #Else 'وهذه لنسخة 32 بت Private Declare Function GetOpenFileName Lib "comdlg32.dll" _ Alias "GetOpenFileNameA" (OPENFILENAME As tagOPENFILENAME) As Long #End If استاذنا الغالي جعفر هل فقط اضغط هذا الكود في وحده في برنامجي مع استبدال Declare Function وتكون كاتالي Declare PtrSafe Function
alaa sanousy قام بنشر أبريل 1, 2019 قام بنشر أبريل 1, 2019 Your VBA code uses Declare statements Most VBA code doesn’t need to change when using in 64-bit or 32-bit, unless you use Declare statements to call Windows API using 32-bit data types like long, for pointers and handles. In most cases, adding PtrSafe to the Declare and replacing long with LongPtr will make the Declare statement compatible with both 32- and 64-bit. However this might not be possible in rare cases where there is no 64-bit API to Declare
jjafferr قام بنشر مارس 16, 2020 الكاتب قام بنشر مارس 16, 2020 السلام عليكم 🙂 هذه جميع مكتبات مايكروسوفت ، بصيغة نواة 32bit ومقابلها نواة 64bit ، في ملف Win32API_PtrSafe.TXT https://www.microsoft.com/en-us/download/details.aspx?id=9970 وقد ارفقت الملف لسهولة الوصل اليه 🙂 جعفر Win32API_PtrSafe.zip 2 1
أبوبسمله قام بنشر مارس 16, 2020 قام بنشر مارس 16, 2020 8 ساعات مضت, jjafferr said: السلام عليكم 🙂 هذه جميع مكتبات مايكروسوفت ، بصيغة نواة 32bit ومقابلها نواة 64bit ، في ملف Win32API_PtrSafe.TXT https://www.microsoft.com/en-us/download/details.aspx?id=9970 وقد ارفقت الملف لسهولة الوصل اليه 🙂 جعفر Win32API_PtrSafe.zip 137.81 kB · 1 تنزيلات جزاك الله خيرا اخى واستاذى ووالدنا الحبيب @jjafferr واسمح لى بان اقول والدى حبا فالله 1
co2002co قام بنشر مايو 22, 2020 قام بنشر مايو 22, 2020 On 11/18/2015 at 12:39 PM, jjafferr said: #If VBA7 Then 'هذه لنسخة 64 بت Private Declare PtrSafe Function GetOpenFileName Lib "comdlg32.dll" _ Alias "GetOpenFileNameA" (OPENFILENAME As tagOPENFILENAME) As Boolean #Else 'وهذه لنسخة 32 بت Private Declare Function GetOpenFileName Lib "comdlg32.dll" _ Alias "GetOpenFileNameA" (OPENFILENAME As tagOPENFILENAME) As Long #End If السلام عليكم ورحمة الله وبركاته تقبل الله طاعاتكم بهذا الشهر الكريم طبقت هذا الكود وفعال ويعمل على 32 و 64 دون مشاكل شكرا سيد جعفر 1
Gamal.Saad قام بنشر مايو 22, 2020 قام بنشر مايو 22, 2020 في ١٦/٣/٢٠٢٠ at 09:29, jjafferr said: هذه جميع مكتبات مايكروسوفت ، بصيغة نواة 32bit ومقابلها نواة 64bit ، في ملف Win32API_PtrSafe.TXT تسلم استاذ jjafferr بارك الله فيك 1
عبدالله المجرب قام بنشر يناير 5, 2021 قام بنشر يناير 5, 2021 السلام عليكم اليوم واجهة هذه المشكلة احد الأجهزة عندي فيه office 64 bit حاولت استعمل هذا التعديل #If VBA7 Then 'هذه لنسخة 64 بت Private Declare PtrSafe Function GetOpenFileName Lib "comdlg32.dll" _ Alias "GetOpenFileNameA" (OPENFILENAME As tagOPENFILENAME) As Boolean #Else 'وهذه لنسخة 32 بت Private Declare Function GetOpenFileName Lib "comdlg32.dll" _ Alias "GetOpenFileNameA" (OPENFILENAME As tagOPENFILENAME) As Long #End If اللي لاحظته ان اسطر 32 بت تبقى باللون الأحمر ويعمل الملف اذا فتحته بدو ن الشفت الاكواد كثيرة هل من حل ناجع لهذه المعضلة بحيث يعمل الملف باي نسخة
jjafferr قام بنشر يناير 8, 2021 الكاتب قام بنشر يناير 8, 2021 وعليكم السلام اخوي ابو احمد 🙂 بالنسبة لفتح نافذة الوندوز إختيار الملفات ، فهناك طريقة اخرى لا تحتاج الى الكود اعلاه Windows API ، وتجده هنا مثلا: https://www.officena.net/ib/applications/core/interface/file/attachment.php?id=189174 ولكن اذا اردت النظر في الكود الذي ارفقه انت ، فهذه الاسطر من الكود لا تكفي للنظر في المشكلة ، فأنا محتاج الى مثال يعمل ، علشان اضبطه للنواتين 32 و 64بت 🙂 جعفر 1
عبدالله المجرب قام بنشر يناير 9, 2021 قام بنشر يناير 9, 2021 شكرا استاذ جعفر بالنسبة للمشكلة فهي ليست في هذا الكود وحسب ولكن اي كود يحتوي على Declare Function فانه اذا تم استخدام #If لكي يعمل على النواتين فان اسطر ٣٢ بت تتلون بالاحمر اذا كان الاوفس ٦٤ بت ويحدث ذلك لها كلها ولا يعمل الملف بطريقة صحيحة
jjafferr قام بنشر فبراير 7, 2021 الكاتب قام بنشر فبراير 7, 2021 السلام عليكم 🙂 لمعلومات اكثر وافضل ، رجاء مراجعة الرابط التالي: جعفر
gavan قام بنشر أكتوبر 27, 2023 قام بنشر أكتوبر 27, 2023 مرحبا بكم🖐️ و بكل الاشخاص المشاركين في هذا الموضوع المهم جدا 💥 في بادية الامر😅 اريد ان اوضح ان هذا الشرح في هذا النوع في مستوى افراد الخبراء 😎بالاكسس و ليس اقل , اما بالنسبة الى المبتدئين و المتوسطين🙄 فلا اعتقد انهم سيطبقون هذه الافكار بالصورة الصحيحة😤 , وانا عن نفسي اسال عن كيفية تطبيق هذه الاكواد في برامجنا , هل هي وحدة نمطية ننسخ و نلصق في برنامجنا ؟؟ اين نضعها ؟؟ كيف نستدعيها ؟؟ فاذا كان بالامكان لاي عضو ان يشرح ماتم شرحه بصورة بدائية جدا لكم نفهم الموضوع بشكل مبسط , و ما اردت قوله هو لاستفادة الاعضاء و المنتدى الرائع , مرة اخرى تحياتي لكم ايها الابطال🙏
الردود الموصى بها
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.