السلام عليكم
أستخدم Visual Basic 6.0 والمحرك Microsoft.Jet.OLEDB.4.0 للاتصال بقاعدة بيانات Access. أكتب عبارات SQL في Visual Basic.
مشاكل كثيرة جداً تواجهني في عبارات SQL المتعلقة بالتاريخ سواء استخدمت التقويم الهجري أو الميلادي لا سيما حينما يكون اليوم من 1 إلى 12 حينها تحدث أخطاء كثيرة جداً في الاستعلام.
مثال: التاريخ اليوم يوافق 3 سبتمبر 2006 أي 3/9/2006. ولدينا قاعدة بيانات فيها الجدول Attend الذي يحتوي الحقل Date.
الرجاء معاينة الكود التالي:
Private Sub Form_Load() Dim conn As ADODB.Connection Dim rec As ADODB.Recordset Dim sql As String sql = "select * from Attend where Date =#" & Date & "#" Set conn = New ADODB.Connection Set rec = New ADODB.Recordset conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\DB.mdb;Persist Security Info=False" conn.Open rec.Open sql, conn, adOpenKeyset, adLockOptimistic If rec.RecordCount > 0 Then MsgBox "FOUND" Else MsgBox "NOT FOUND" End If End Sub
على الرغم من أن الجدول Attend به سجل بتاريخ 3 سبتمبر إلا أن الاستعلام الماضي لم يجده وأرسل الرسالة الثانية!
لو كان تاريخ 18 سبتمبر مثلاً لوجد السجل.
الآن سنغير في عبارة Sql الماضية ونجعلها:
sql = "select * from Attend where Date =#" & Format(Date, "mm/dd/yyyy") & "#"
نجح الاستعلام ووجد السجل.
السؤال الأول: لماذا يجب أن نصرح بالفورمات DD/MM/YYYY على الرغم من أنه هو الافتراضي لمحرك SQL؟
-------------------
حتى وإن رضيت بهذا الحل. أريد أن أستخدم التاريخ الهجري الآن حيث إنني مجبر عليه في مشروعي.
أضيف هذا السطر كأول سطر في الحدث FORM_LOAD:
Calendar = vbCalHijri
عند التنفيذ لم يعثر على السجل! حاولت تغيير إعدادات قاعدة البيانات في Access إلى استخدام التقويم الهجري. ولم ينفع ذلك.
غيرت جملة SQL كتجربة إلى:
sql = "select * from Attend where Date =#" & Format(#8/10/1427#, "mm/dd/yyyy") & "#"
حيث إن 3 سبتمبر توافق 10 شعبان. ولم ينفع ذلك ولم يجد السجل.
السؤال الثاني: ما هو الحل وكيف أستعلم باستخدام تواريخ هجرية؟