22-10-12, 11:22 PM
السلام عليكم...
أنا أستعملها دائماً عند إدخال التواريخ في جمل SQL، و السبب بسيط: جميع محركات قواعد البيانات (Access و غيره) تخزن و تعامل التاريخ - داخلياً - بالتنسيق الأمريكي (mm/dd/yyyy) أي اليوم فبل الشهر، بينما التحويل الضمني (Implicit Conversion) و دوال تحويل التاريخ في VB6 تعتمد على إعدادات تنسيق التاريخ في لوحة التحكم التابعة للنظام Windows، و هذه طبعاً قد تختلف من جهاز إلى جهاز.
على اعتبار أن كلاً من Text1 و Text2 تحتويان نص تاريخ صحيح.
الآن لنفرض أن أياً من مربعات النص تحتوي على 02/07/2012. ما هو هذا التاريخ؟ إذا سألت شخصاً يستعمل الصيغة الأمريكية فسيقول لك إنه 7 فبراير (شباط) 2012. و إذا سألت شخصاً يستعمل التنسيق الآخر (اليوم قبل الشهر) فسيقول إنه 2 يوليو (تموز) 2012.
الأمر نفسه ينطبق على التحويل الضمني و دوال التحويل (كالدالة CDate) في الكود أعلاه، أي انهما قد تفسرانه على أنه 7 فبراير (شباط) 2012 أو 2 يوليو (تموز) 2012 بناءً على إعدادات تنسيق التاريخ في لوحة التحكم التابعة للنظام Windows.
أنا - كمستخدم عربي - من المفترض أن تنسيق التاريخ في جهازي هكذا: dd/mm/yyyy (بعضهم يختصرها DMY) أي اليوم قبل الشهر، و طبعاً سأكتب في مربع النص اليوم قبل الشهر. لنفرض أن التاريخ الذي أقصده هو 2 يوليو (تموز) 2012، فسأكتبه هكذا: 02/07/2012. التحويل الضمني و دالة التحويل CDate - ستفسره بشكل صحيح كما أقصده، و لكن عندما أرسله إلى محرك قواعد بيانات كما هو فإن محرك قواعد البيانات سيعتبر أن 2 هو الشهر، و أن 7 هو اليوم، أي 7 فبراير (شباط) 2012، و هو ما لا أقصده!
و لكن عندما أستعمل الدالة Format لتنسيق التاريخ بالصيغة المتوافقة مع ما يستعمله محرك قواعد البيانات (mm/dd/yyyy) فسأحصل دائماً على نتيجة صحيحة بصرف النظر عن تنسيق التاريخ لدى جهاز المستخدم.
نرجو الاستفادة و السلام.
أنا أستعملها دائماً عند إدخال التواريخ في جمل SQL، و السبب بسيط: جميع محركات قواعد البيانات (Access و غيره) تخزن و تعامل التاريخ - داخلياً - بالتنسيق الأمريكي (mm/dd/yyyy) أي اليوم فبل الشهر، بينما التحويل الضمني (Implicit Conversion) و دوال تحويل التاريخ في VB6 تعتمد على إعدادات تنسيق التاريخ في لوحة التحكم التابعة للنظام Windows، و هذه طبعاً قد تختلف من جهاز إلى جهاز.
كود :
Dim MyDate1 As Date, MyDate2 As Date
MyDate1 = Text1.Text ' تحويل ضمني
MyDate2 = CDate(Text2.Text) ' تحويل باستعمال دالةالآن لنفرض أن أياً من مربعات النص تحتوي على 02/07/2012. ما هو هذا التاريخ؟ إذا سألت شخصاً يستعمل الصيغة الأمريكية فسيقول لك إنه 7 فبراير (شباط) 2012. و إذا سألت شخصاً يستعمل التنسيق الآخر (اليوم قبل الشهر) فسيقول إنه 2 يوليو (تموز) 2012.
الأمر نفسه ينطبق على التحويل الضمني و دوال التحويل (كالدالة CDate) في الكود أعلاه، أي انهما قد تفسرانه على أنه 7 فبراير (شباط) 2012 أو 2 يوليو (تموز) 2012 بناءً على إعدادات تنسيق التاريخ في لوحة التحكم التابعة للنظام Windows.
أنا - كمستخدم عربي - من المفترض أن تنسيق التاريخ في جهازي هكذا: dd/mm/yyyy (بعضهم يختصرها DMY) أي اليوم قبل الشهر، و طبعاً سأكتب في مربع النص اليوم قبل الشهر. لنفرض أن التاريخ الذي أقصده هو 2 يوليو (تموز) 2012، فسأكتبه هكذا: 02/07/2012. التحويل الضمني و دالة التحويل CDate - ستفسره بشكل صحيح كما أقصده، و لكن عندما أرسله إلى محرك قواعد بيانات كما هو فإن محرك قواعد البيانات سيعتبر أن 2 هو الشهر، و أن 7 هو اليوم، أي 7 فبراير (شباط) 2012، و هو ما لا أقصده!
و لكن عندما أستعمل الدالة Format لتنسيق التاريخ بالصيغة المتوافقة مع ما يستعمله محرك قواعد البيانات (mm/dd/yyyy) فسأحصل دائماً على نتيجة صحيحة بصرف النظر عن تنسيق التاريخ لدى جهاز المستخدم.
نرجو الاستفادة و السلام.
بِسْمِ اللهِ الرَّحْمَنِ الرَّحِيمِ ( وَ مَا تُقَدِّمُوا لِأَنفُسِكُم مِّنْ خَيْرٍ تَجِدُوهُ عِندَ اللهِ هُوَ خَيْراً وَ أَعْظَمَ أَجْراً ) صَدَقَ اللهُ الْعَظِيمُ
