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

هدية: استخدام التاريخ بطريقة تعمل مع مجموعة السجلات


jjafferr

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

السلام عليكم ورحمة الله وبركاته

وبعد سنين من العمل في كود الأكسس ، لازلت الى الأمس القريب كنت اعاني من عدم حصولي على النتائج المطلوبة من الجدول (بدون مجموعة محاولات) ، اذا كان المعيار هو حقل تاريخ :eek2:
الى ان حصلت على الكود التالي ، والذي اصبح التعامل فيه مع التاريخ سهلا :smile:

انا احفظ هذه الوحدة النمطية بإسم fDateFormat:

Function DateFormat(varDate As Variant) As String
    'Purpose:    Return a delimited string in the date format used natively by JET SQL.
    'Argument:   A date/time value.
    'Note:       Returns just the date format if the argument has no time component,
    '                or a date/time format if it does.
    'Author:     Allen Browne. allen@allenbrowne.com, June 2006.
    '
    'calling the Function: DateFormat(The_Date_Field)
    'a = dlookup("[some field]","some table","[id]=" & me.id & " And [Date_Field]=" & DateFormat(The_Date_Field))
    '

    
    If IsDate(varDate) Then
        If DateValue(varDate) = varDate Then
            DateFormat = Format$(varDate, "\#mm\/dd\/yyyy\#")
        Else
            DateFormat = Format$(varDate, "\#mm\/dd\/yyyy hh\:nn\:ss\#")
        End If
    End If
End Function

وطريقة استعمال الكود كالأمثلة التالية:

a = dlookup("[some field]","some table","[id]=" & me.id & " And [Date_Field]=" & DateFormat(The_Date_Field))

او

("Select DISTINCT cen, [Date] From TTTT Where [Date]=" & DateFormat(Me.Idate))

او عدة طرق اخرى :smile:


اليكم مثالين في البرنامج المرفق ، كيف ان الدالة DateFormat تعطيني نتائج صحيحة مباشرة ، بينما استخدام الطريقة التقليدية للتاريخ لا تعطيني النتيجة مباشرة:

الجدول يحتوي على تاريخين ، 1-5-2015 و 2-5-2015 ،

وهنا سنقوم بالتجربة على التاريخ 1-5-2015 (ويمكنكم استخدام التاريخ التاثي 2-5-2015) ،
post-142414-0-37776600-1433100726.jpg


وللتأكد من نتائجنا ، عملنا استعلامين :
post-142414-0-15051800-1433100782.jpg  و  post-142414-0-09000800-1433100795.jpg



استخدام الكود في Recordset
1. مع استعمال الدالة DateFormate

Set rst = CurrentDb.OpenRecordset("Select DISTINCT cen, [Date] From tbl_T Where [Date]=" & DateFormat(Me.idate))
    rst.MoveLast: rst.MoveFirst
    RC1 = rst.RecordCount

والنتيجة صحيحة ، كما تدل عليه نتيجة الاستعلام في الاسفل:
post-142414-0-97110300-1433100737.jpg



2. مع عدم استعمال الدالة DateFromat ، وانما استخدام الطريقة التقليدية للتاريخ:

Set rst = CurrentDb.OpenRecordset("Select DISTINCT cen, [Date] From tbl_T Where [Date]=#" & Me.idate & "#")
    rst.MoveLast: rst.MoveFirst
    RC2 = rst.RecordCount

والنتيجة خطأ ، كما تدل عليه نتيجة الاستعلام في الاسفل:
post-142414-0-24812100-1433100749.jpg




استخدام الدالة Dcount
3. مع استعمال الدالة DateFormat

    RC3 = DCount("*", "tbl_T", "[Date]=" & DateFormat(Me.idate))

والنتيجة صحيحة ، كما تدل عليه نتيجة الاستعلام في الاسفل:
post-142414-0-61467100-1433100760.jpg


4. مع عدم استعمال الدالة DateFormat ، ، وانما استخدام الطريقة التقليدية للتاريخ:

    RC4 = DCount("*", "tbl_T", "[Date]=#" & Me.idate & "#")

والنتيجة خطأ ، كما تدل عليه نتيجة الاستعلام في الاسفل:
post-142414-0-36419600-1433100771.jpg




جعفر

84.DateFormat_Examples.mdb.zip

  • Like 6
  • Thanks 3
رابط هذا التعليق
شارك

اولا: جزاك الله خير ع ماتقدمه

ثانيا: مش كان افضل تحسب حساب المبتدئين زي كذا وتشرح لنا ايش طبيعة المعاناة اللي كنت تعانيها وايش اللي توصلت له وماذا يعني الكود اللي فوق بالدور الثاني^_^

واين يكون؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

معليش ومنتظر توضيحك ياجعفر افندي والا نعتبر المقال خاص بالمحتفرين, اقصد المحترفين.. هههههههههههههههههههه

  • Like 2
رابط هذا التعليق
شارك

موضوع جميل جدا وجديد

هدية مقبولة ... تستحق التثبيت

 

انت الجميل أخونا العود أبوخليل ، ولك الشكر المتواصل على مساعداتك المتواصلة  :smile:

 

ورحم الله والديك دنيا وآخرة إن شاء الله  :smile:

 

 

جعفر

رابط هذا التعليق
شارك

مرحبا اخي جعفر

اريدك ان تعمل المعيار التالي وبعدين اقول لك ايش الهرجة !!

    Set rst = CurrentDb.OpenRecordset("Select DISTINCT cen, [Date] From tbl_T Where [Date]=#" & Format(Me.idate, "m/d/yy") & "#")

    RC4 = DCount("*", "tbl_T", "[Date]=#" & Format(Me.idate, "m/d/yy") & "#")

تحياتي

  • Like 3
رابط هذا التعليق
شارك

السلام عليكم أخوي رمهان  :smile:

 

انا قلت في اول الموضوع:

 

 

لازلت الى الأمس القريب كنت اعاني من عدم حصولي على النتائج المطلوبة من الجدول (بدون مجموعة محاولات

 

يعني كنت اتوصل للمطلوب ، ولكن وللأسف بعد مجموعة محاولات !!

 

 

وانا فاهم قصدك ، وطريقتك بتعطي الاجابة الصحيحة ،

ولكن ، مو دائما انت محتاج تستعمل Format ، فمرة تحتاج ومرة لا ، ومرة M/D/YY ومرة dd/mm/yyyy ، وهكذا ،

وصدقني لما عندك برنامج مستعجل وتشتغل عليه ليل نهار والزبون على راسك ، فما دائما تنتبه لـ Format ،

إسألني وانا اخبرك كم مرة صارت معي ، الى ان انتبه لها بعد ما احك راسي واطيّح الشعرتين الباقيات على راسي  :smile:

 

الدالة هذه ، ومن اول مرة وتعطينا النتيجة الصحيحة ، ولأني استفدت منها ، حبيت الكل يستفيد منها  :smile:

 

 

 

جعفر

  • Like 2
رابط هذا التعليق
شارك

اخي جعفر !

اسمحو لي ان اقول انكم ظلمتم الاكسس هنا ! وانا راح اقول لكم ايش السالفة وانه ليس هناك مشكلة ! 

يمكن تطفل زائد ! ولكن كما عودتنا بسعة صدرك والاهم عندك الاستفادة للجميع ووضع معلومة صحيحة يستند عليها ولكل من سيمر بها ويقرؤها !

سأعود !!

 

تحياتي

رابط هذا التعليق
شارك

اخي جعفر

طبعا فكرة ادخال الدالة format في الطرفين : طرف المعيار وطرف القيمة المعلمة ! ليست جديدة عليكم ولكن قد يكون تطبيقها هو الذي جعلكم تبحثون عن فكرة وهي ابسط حقوق المبرمج !

الآن راح نشوف الاكسس لضمان تساوي التنسيق !

في ال sql

 Set rst = CurrentDb.OpenRecordset("Select DISTINCT cen, [Date] From tbl_T Where format([date],'dd/mm/yyyy')='" & Format(idate, "dd/mm/yyyy") & "'")

هنا نلاحظ ان السر في عدم استخدام # واستبدالها ب '  لانه اصبحت المقارنة نصية !

والافضل وضع تنسيق التاريخ بهذا الشكل  mmddyyyy

 

في دالة ال dcocunt 

RC4 = DCount("*", "tbl_T", "format([Date],""ddmmyyyy"") =Format(idate, ""ddmmyyyy"")")

بالتوفيق

تم تعديل بواسطه رمهان
  • Like 6
رابط هذا التعليق
شارك

هنا نلاحظ ان السر في عدم استخدام # واستبدالها ب '  لانه اصبحت المقارنة نصية !

 

 

 

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

 

ولكن نرجع لأصل الموضوع اللي بسببه انا وضعت الكود ، فنرى مدى ما يمكن ان يصل اليه التعقيد عن طريق الداله Format ،

وانا على يقين بأنك لم تصل للطريقة الصحيحة للكود من اول مرة او مرتين  :wink2:

 

لهذا السبب ، اعتقد بأن الدالة DateFormat تسهل الكود كثيرا  :smile:

 

 

جعفر

  • Like 3
رابط هذا التعليق
شارك

  • 4 years later...

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.

×
×
  • اضف...

Important Information