منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب
كتابة التاريخ في جملة ال sql - نسخة قابلة للطباعة

+- منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب (http://vb4arb.com/vb)
+-- قسم : قسم قواعد البيانات (http://vb4arb.com/vb/forumdisplay.php?fid=40)
+--- قسم : قسم اسئلة vb6.0 المتعلقة بقواعد البيانات (http://vb4arb.com/vb/forumdisplay.php?fid=72)
+--- الموضوع : كتابة التاريخ في جملة ال sql (/showthread.php?tid=6578)



كتابة التاريخ في جملة ال sql - اسلام الكبابى - 20-10-12

كتبت هذا الكود وكتبت فيه جملة ال SQL بأكثر من أسلوب

وفى كل مرة يقبل الجملة اذا كان التاريخ فبها مقدار ثابت

ويعترض على الجملة اذا كان التاريخ فبها متغير



PHP كود :
Dim dateACT As String
Dim MMSG 
As String
Dim db 
As ADODB.Connection
Dim RS 
As ADODB.Recordset


Private Sub Command1_Click()
      
dateACT TextDATE.Text
    Set RS 
= New ADODB.Recordset
    RS
.Open "select * from TABLE1 where (dateACT  BETWEEN  date1  AND  date2 )  "dbadOpenStaticadLockReadOnly
    
      MMSG 
RS.Fields(2)
     Print 
"MMSG = "MMSG
             
End Sub
       
Private Sub Form_Load()
Set db = New ADODB.Connection
db
.Open "Provider=Microsoft.Jet.OLEDB.4.0;Jet OLEDB:Database password=; Data Source=" App.Path "\INGINEER.mdb"

End Sub 

فحين كتبت الكود السابق وقمت بعمل الRUN اعترض على جملة الSQL

وحين حذفت متغير التاريخ dateACT من جملة الSQL واستبدلته بأى تاريخ ثابت فكتبتهاهكذا لم يعترض ونفذ الكود تنفيذآ صحيحآ



PHP كود :
RS.Open "select * from TABLE1 where (#22/4/2011#  BETWEEN date1 AND date2 ) "db,adOpenStatic,adLockReadOnly 




وأعدت كتابة جملة الSQL بأسلوب آخر
فحين كتبتها هكذا اعترض علبها


PHP كود :
RS.Open "select * from TABLE1 where (dateACT >= date1) And (" dateACT " < date2)"dbadOpenStaticadLockReadOnly 



وحين حذفت متغير التاريخ dateACT من جملة الSQL واستبدلته بأى تاريخ ثابت فكتبتهاهكذا لم يعترض ونفذ الكود تنفيذآ صحيحآ



PHP كود :
RS.Open "select * from TABLE1 where (#22/4/2011#>= date1) And ("  dateACT " < date2)"dbadOpenStaticadLockReadOnly 

فكيف حل هذه المشكلة
ولكم ألف شكر




كتابة التاريخ في جملة ال sql - mmali127 - 20-10-12

تفضل هذا الكود

انشاء الله سيفى بالغرض

Dim from As Date
from = Format(text1, "mm/dd/yyyy")
Too = Format(text2, "mm/dd/yyyy")

Select * from tb1 where Dare between #" & CDate(from) & "# AND #" & CDate(Too)


كتابة التاريخ في جملة ال sql - اسلام الكبابى - 20-10-12

للأسف لم يفلح الكود

لاحظ أن [SIZE=3]المتغيرين
[/SIZE][SIZE=3] date1 وdate2 الموجودين فى كودى والذين استبدتهما أنت فى كودك بالمتغيرين from و too
لاحظ أنهما حقلين فى جدول قاعدة البيانات وليسا متغيرين يعطيان فى text

وشكرآ
[/SIZE]


كتابة التاريخ في جملة ال sql - ناجي إبراهيم - 20-10-12

السلام عليكم...

طبعاً سيعترض لأن dateACT هو متغير و ليس حقلاً في جدول قاعدة البيانات و لا يصح وضعه كما هو ضمن الـ String الخاص بجملة SELECT لأنه سينتقل كما هو إلى محرك قواعد البيانات و يحدث الخطأ.
أنت في الواقع تريد قيمة هذا المتغير. جملة SELECT ستكون كالتالي:
كود :
Private Sub Command1_Click()
      dateACT = "#" & Format(CDate(TextDATE.Text), "mm/dd/yyyy") & "#"
    Set RS = New ADODB.Recordset
    RS.Open "select * from TABLE1 where (" & dateACT & " BETWEEN  date1  AND  date2 )  ", db, adOpenStatic, adLockReadOnly
    
      MMSG = RS.Fields(2)
     Print "MMSG = "; MMSG
            
End Sub

نرجو الاستفادة و السلام.


كتابة التاريخ في جملة ال sql - أبو أسامة - 21-10-12

ناجي إبراهيم كتب :السلام عليكم...

طبعاً سيعترض لأن dateACT هو متغير و ليس حقلاً في جدول قاعدة البيانات و لا يصح وضعه كما هو ضمن الـ String الخاص بجملة SELECT لأنه سينتقل كما هو إلى محرك قواعد البيانات و يحدث الخطأ.
أنت في الواقع تريد قيمة هذا المتغير. جملة SELECT ستكون كالتالي:
كود :
Private Sub Command1_Click()
      dateACT = "#" & Format(CDate(TextDATE.Text), "mm/dd/yyyy") & "#"
    Set RS = New ADODB.Recordset
    RS.Open "select * from TABLE1 where (" & dateACT & " BETWEEN  date1  AND  date2 )  ", db, adOpenStatic, adLockReadOnly
    
      MMSG = RS.Fields(2)
     Print "MMSG = "; MMSG
            
End Sub

نرجو الاستفادة و السلام.


السلام عليكم ورحمة الله
فعلا سيعترض كما قال الأستاذ ناجى لأنdateACT متغير وليس حقل فى قاعدة البيانات وعلى حد علمى أن where لا يتبعها إلا اسم الحقل وليس المتغير أو قيمته و BETWEEN هى التى يتبعها اسم المتغير كا TextDATE.Text أو DTPicker
وفى هذا الكود حدث الخطأ أيضا على رغم وضع قيمة المتغير (ولكنه ليس حقلا)
وأعتقد أن البحث عن تاريخ يكون فى حقل واحد وليس حقلين
هذا ما اعلمه عن البحث بين تاريخين
"وفوق كل ذى علم عليم"

المثال بالمرفقات


كتابة التاريخ في جملة ال sql - اسلام الكبابى - 21-10-12

الأستاذ ناجي ابراهيم هوحلال العقد دائمآ
المفروض يتعمل قسم فى المنتدى باسمه عشان اللى عايز يحل مشكلته بسرعة يتجه مباشرة لهذا القسم

زادك الله من علمه وفضله


كتابة التاريخ في جملة ال sql - أبو أسامة - 21-10-12

أعتقد أنى تسرعت فى الرد
وكنت على خطأ ..عذرا يا أستاذ ناجى وهذه معلومة جديدة تعلمتها منك

" وفوق كل ذى علم عليم"

مثال الأستاذ ناجى

http://vb4arb.com/vb/uploaded/630_01350767209.rar


كتابة التاريخ في جملة ال sql - اسلام الكبابى - 22-10-12

إقتباس : dateACT = "#" & Format(CDate(TextDATE.Text), "mm/dd/yyyy") & "#"

أستسمحك يا أستاذ/ناجى
أن توضح لى متى تلزم جملةالفورمات للتاريخ ومتى لا تلزم
أو أن تدلنى على درس يشرح فيه كاتب الموضوع هذهالنقطة
ولك مليوووون شكر


كتابة التاريخ في جملة ال sql - ناجي إبراهيم - 22-10-12

السلام عليكم...

أنا أستعملها دائماً عند إدخال التواريخ في جمل SQL، و السبب بسيط: جميع محركات قواعد البيانات (Access و غيره) تخزن و تعامل التاريخ - داخلياً - بالتنسيق الأمريكي (mm/dd/yyyy) أي اليوم فبل الشهر، بينما التحويل الضمني (Implicit Conversion) و دوال تحويل التاريخ في VB6 تعتمد على إعدادات تنسيق التاريخ في لوحة التحكم التابعة للنظام Windows، و هذه طبعاً قد تختلف من جهاز إلى جهاز.
كود :
Dim MyDate1 As Date, MyDate2 As Date
MyDate1 = Text1.Text    ' تحويل ضمني
MyDate2 = CDate(Text2.Text)    ' تحويل باستعمال دالة
على اعتبار أن كلاً من 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 - اسلام الكبابى - 23-10-12

[SIZE=5]مشكووووور مليوووون شكر[/SIZE]