ابو جودي قام بنشر يوليو 25, 2022 قام بنشر يوليو 25, 2022 السلام عليكم ورحمة الله تعالى وبركاته الاكواد تعتمد على احد دوال ال API للويندوز وتم مراعاة العمل على كلا من النسختين 32 , 64 بيت الكود الاول فى راس الموديول وذلك لاحضار تنسيق تاريخ الجهاز Private Const LOCALE_USER_DEFAULT = &H400 Private Const LOCALE_SSHORTDATE = &H1F ' short date format string Private Const LOCALE_SLONGDATE = &H20 ' long date format string Private Const strTblFormatDate = "tblDateFormatWindows" #If VBA7 And Win64 Then Private Declare PtrSafe Function _ GetLocaleInfo Lib "kernel32" Alias "GetLocaleInfoA" _ (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String, ByVal cchData As Long) As Long #Else Private Declare Function _ GetLocaleInfo Lib "kernel32" Alias "GetLocaleInfoA" _ (ByVal Locale As Long, ByVal LCType As Long, ByVal lpLCData As String, ByVal cchData As Long) As Long #End If Public Function GetDateFormatMyWin() Dim strLocale As String Dim lngRet As Long Dim strMsg As String strLocale = Space(255) lngRet = GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SSHORTDATE, strLocale, Len(strLocale)) strLocale = Left(strLocale, lngRet - 1) GetDateFormatMyWin = strLocale End Function الكود الثانى التأكد من وجود جدول لحفظ تنسيق تاريخ الجهاز Function ifTableExists(tblName As String) As Boolean If DCount("[Name]", "MSysObjects", "[Name] = '" & tblName & "'") = 1 Then ifTableExists = True End Function الكود الثالث جلب البيانات لتسيق تاريخ الجهاز الذى تم حفظه بالجدول Public Function DateFormatwinSaved() As String DateFormatwinSaved = Nz(DLookup("DateFormatWindows", strTblFormatDate), "") End Function الكود الرابع تغيير تسيق التاريح لجهاز الحاسوب ولكن اولا تخزين القيم الاصلية لتنسيق تاريخ الحاسوب داخل جدول لمن يريد استرجاع التسيق الاصلى مرة اخرى Public Function ChnageDateFormat(Optional dtDateFormat As String = "dd/MM/yyyy") If GetDateFormatMyWin() = dtDateFormat Then Exit Function Else Dim mySQL As String If ifTableExists(strTblFormatDate) = False Then DoCmd.SetWarnings False mySQL = "CREATE TABLE " & strTblFormatDate mySQL = mySQL & "([ID] counter," & "[DateFormatWindows] text," & "CONSTRAINT [Index1] PRIMARY KEY ([ID]));" DoCmd.SetWarnings False: DoCmd.RunSQL mySQL: DoCmd.SetWarnings True mySQL = "INSERT INTO " & strTblFormatDate mySQL = mySQL & "( DateFormatWindows )" mySQL = mySQL & " SELECT " mySQL = mySQL & " ('" & GetDateFormatMyWin() & "') " DoCmd.SetWarnings False: DoCmd.RunSQL mySQL: DoCmd.SetWarnings True ElseIf ifTableExists(strTblFormatDate) = True Then If DCount("*", strTblFormatDate) = 0 Then mySQL = "INSERT INTO " & strTblFormatDate mySQL = mySQL & "( DateFormatWindows )" mySQL = mySQL & " SELECT " mySQL = mySQL & " ('" & GetDateFormatMyWin() & "') " DoCmd.SetWarnings False: DoCmd.RunSQL mySQL: DoCmd.SetWarnings True ElseIf DCount("*", strTblFormatDate) > 0 Then mySQL = "UPDATE " & strTblFormatDate mySQL = mySQL & " SET " & strTblFormatDate mySQL = mySQL & ".DateFormatWindows = " & Chr(34) & GetDateFormatMyWin() & Chr(34) & ";" DoCmd.SetWarnings False: DoCmd.RunSQL mySQL: DoCmd.SetWarnings True End If End If Shell "cmd.exe /c REG ADD ""HKEY_CURRENT_USER\Control Panel\International"" /v sShortDate /d """ & dtDateFormat & """ /F", vbHide End If End Function الكود الاخير ارجاع التنسيق مرة اخرى للحاسوب والذى تم الاحتفاظ به داخل الجدول Public Function ReturnOldDateFormatWin() If GetDateFormatMyWin() = DateFormatwinSaved() Then Exit Function Else Shell "cmd.exe /c REG ADD ""HKEY_CURRENT_USER\Control Panel\International"" /v sShortDate /d """ & DateFormatwinSaved & """ /F", vbHide End If End Function طيب فى النهاية يفضل استخدام ماكرو AutoExec والذى وظيفته تنفيذ إجراء او اجراءات معينة في كل مرة تبدأ فيها تشغيل قاعدة بيانات Access وفى الماكرو من خلال RunCode نكتب اسم الوظيفة التى نريد استدعاؤها وهى ChnageDateFormat() الان عند تشغيل القاعدة يتم فحص تنسيق تاريخ الجهاز وان كان مساويا للتنسيق الموجود فى الفانكشن ChnageDateFormat والذى وضعته افتراضيا من خلال Optional dtDateFormat As String = "dd/MM/yyyy" يتم تجاهل الامر وفى حالة الاختلاف يتم تغيير تنسيق تاريخ الجهاز الى هذا النسيق الذى تم الاعلان عنه فى رأس الوظيفة dd/MM/yyyy ولاضفاء المرونة قمت بتعريف متغير التنسيق على انه اختيار ووضعت الاختيار المفضل dd/MM/yyyy فى حالة اردتم تغيير التنسيق الى تنسيق أخر مثلا yyyy/MM/dd كل ما عليكم هو استدعاء الوظيفة فى الماكرو بالشكل الاتى ChnageDateFormat("yyyy/MM/dd") ان شاء الله بهذا الكود لن تواجهوا مستقبلا مشاكل اختلاف تنسيق التاريخ فى دوال المجال ولا اخطاء فى تسجيل التواريخ .. بلا ..بلا ..بلا.................... الخ الخ طيب لو اردتم ارجاع التنسيق الافتراضى الذى كان قبل ذلك والذى احتفظنا به فى الجدول كل ما عليكم هو استدعاء الوظيفة الاتية عند الاغلاق لقاعدة البيانات ReturnOldDateFormatWin() انتهى الشرح ارجوا لكم تجربة الاستمتاع بتلك الافكار وهذه التجربة الافكار والاكواد وطرح التصور حصرى من بنات افكارى وانا مجهد جدا جدا جدا قد يمكن اختصار الاكواد واختزالها ولم انتبه لذلك مثلا من شدة الارهاق فلا تؤاخذونى فى ذلك .. و ليدلوا كل بدلوه فى ذلك الامر ... تم التجربة على ويندوز 10 - 64 بيت ولا ادرى هل يعمل على باقى واختلاف نسخ الويندور ام لا انتظر الرد من حضراتكم بنتائج تجاربكم ووضع اقتراحاتكم 7
عمر ضاحى قام بنشر يوليو 26, 2022 قام بنشر يوليو 26, 2022 بسم الله ما شاء الله عبقريه صراحتا الحمد لله الذى جعلنى اكون اول من يرد على هذا الطرح الجميل من حضرتك وجعله فى ميزان حسناتك بصراحه ممتازه 1
Moosak قام بنشر يوليو 26, 2022 قام بنشر يوليو 26, 2022 وعليكم السلام ورحمة الله وبركاته .. 🙂 مجهود رااااااااااااااائع من شخص تحفة .... بسم الله ما شاء الله ويبقى الأكسس معين لا ينضب ... وقدرة جبارة على حل جميع التحديات 😊💪 بس ناقصنا ملف التجربة (المثال) .. 😅 علشان زي منته عارف حضرتك .. المبتدئين أمثالنا 😁✌️ 5
Eng.Qassim قام بنشر يوليو 26, 2022 قام بنشر يوليو 26, 2022 في البداية ...شكرا لمجهودك العظيم وفي النهاية ..هو لا طويل ولا اقصير ..لاني حاولت اجربه ولم افلح لاني حينما وجدت CREAT TABLE تصورت انه سيعمل جدول بالتغييرات 1
abo shaheen قام بنشر يوليو 27, 2022 قام بنشر يوليو 27, 2022 (معدل) ماشاء الله بارك الله بك .. تمت التجربة بنجاح تم تعديل يوليو 27, 2022 بواسطه abo shaheen اضافة 1
kanory قام بنشر يوليو 28, 2022 قام بنشر يوليو 28, 2022 تم تجربة فكرة تنسيق التاريخ .... والنتيجة اكثر من رائعة ... بارك الله فيك وفي اباعاتك ومحاولة تجاوز بعض عقبات الاكسس 1
AbuuAhmed قام بنشر نوفمبر 30, 2022 قام بنشر نوفمبر 30, 2022 (معدل) أنا استخدم طريقة مشابهة SysDateTimeFormat_01.accdb تم تعديل نوفمبر 30, 2022 بواسطه AbuuAhmed 1
حمدى الظابط قام بنشر ديسمبر 1, 2022 قام بنشر ديسمبر 1, 2022 (معدل) ارجو ان يكون الرد والتعليق بذكر نوع الافيس ونوع الويندوز لتأكد من عدم خلل يالاكواد كما ذكر عالمنا الجليل ابو جودى وارجو ان يكون هناك مثال للتجربة كل الاحترام لشخصكم الكريم تم تعديل ديسمبر 1, 2022 بواسطه حمدى الظابط
متقاعد قام بنشر ديسمبر 1, 2022 قام بنشر ديسمبر 1, 2022 مشاء الله عليك يا ابا جودي 10 ساعات مضت, AbuuAhmed said: أنا استخدم طريقة مشابهة روعة استاذنا ابو احمد جربت المرفق ويندوز 11 64 وافيس 21 64 ويعمل كما ينبغي تحياتي 🌹 1 1
AbuuAhmed قام بنشر ديسمبر 1, 2022 قام بنشر ديسمبر 1, 2022 8 ساعات مضت, مبرمج متقاعد said: روعة استاذنا ابو احمد جربت المرفق ويندوز 11 64 وافيس 21 64 ويعمل كما ينبغي على رأسي عزيزي ، ومشاركتي ليست لمزاحمة استاذنا @ابو جودي ، فسبحان الله الموضوع ذكرني بهذا الحل والذي كنت استخدمه منذ سنين ليست بالقليلة ، وهذا يحدث وخصوصا لمن لهم نفس التوجهات البرمجية ومشابهة الأنشطة التي خاضوها ، فربما أبو جودي خاض برمجة برامج تعنى بالتواريخ والأوقات وحساباتها وعان كما عانيت أنا وبحس المطور توصلنا إلى هذه النتيجة. 1
متقاعد قام بنشر ديسمبر 1, 2022 قام بنشر ديسمبر 1, 2022 1 ساعه مضت, AbuuAhmed said: ومشاركتي ليست لمزاحمة استاذنا @ابو جودي ، هذا امر مؤكد وخصوصا بين اساتذة كبار وقامات ننظر اليها بكل تقدير واحترام ومثل هذه المداخلات تثري الموضوع وتخدم الجميع بتقديم حلول وافكار متنوعة اسأل الله لك وللاستاذ محمد عصام التوفيق والسداد 1
الردود الموصى بها
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.