تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
كتابة التاريخ في جملة ال sql
#1
كتبت هذا الكود وكتبت فيه جملة ال 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 

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

الرد }}}
تم الشكر بواسطة:
#2
تفضل هذا الكود

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

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)
الرد }}}
تم الشكر بواسطة:
#3
للأسف لم يفلح الكود

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

وشكرآ
[/SIZE]
الرد }}}
تم الشكر بواسطة:
#4
السلام عليكم...

طبعاً سيعترض لأن 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

نرجو الاستفادة و السلام.
بِسْمِ اللهِ الرَّحْمَنِ الرَّحِيمِ ( وَ مَا تُقَدِّمُوا لِأَنفُسِكُم مِّنْ خَيْرٍ تَجِدُوهُ عِندَ اللهِ هُوَ خَيْراً وَ أَعْظَمَ أَجْراً ) صَدَقَ اللهُ الْعَظِيمُ
الرد }}}
تم الشكر بواسطة:
#5
ناجي إبراهيم كتب :السلام عليكم...

طبعاً سيعترض لأن 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
وفى هذا الكود حدث الخطأ أيضا على رغم وضع قيمة المتغير (ولكنه ليس حقلا)
وأعتقد أن البحث عن تاريخ يكون فى حقل واحد وليس حقلين
هذا ما اعلمه عن البحث بين تاريخين
"وفوق كل ذى علم عليم"

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


الملفات المرفقة
.rar   date.rar (الحجم : 8.82 ك ب / التحميلات : 117)
الرد }}}
تم الشكر بواسطة:
#6
الأستاذ ناجي ابراهيم هوحلال العقد دائمآ
المفروض يتعمل قسم فى المنتدى باسمه عشان اللى عايز يحل مشكلته بسرعة يتجه مباشرة لهذا القسم

زادك الله من علمه وفضله
الرد }}}
تم الشكر بواسطة:
#7
أعتقد أنى تسرعت فى الرد
وكنت على خطأ ..عذرا يا أستاذ ناجى وهذه معلومة جديدة تعلمتها منك

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

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

http://vb4arb.com/vb/uploaded/630_01350767209.rar
الرد }}}
تم الشكر بواسطة:
#8
إقتباس : dateACT = "#" & Format(CDate(TextDATE.Text), "mm/dd/yyyy") & "#"

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

أنا أستعملها دائماً عند إدخال التواريخ في جمل 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) فسأحصل دائماً على نتيجة صحيحة بصرف النظر عن تنسيق التاريخ لدى جهاز المستخدم.

نرجو الاستفادة و السلام.
بِسْمِ اللهِ الرَّحْمَنِ الرَّحِيمِ ( وَ مَا تُقَدِّمُوا لِأَنفُسِكُم مِّنْ خَيْرٍ تَجِدُوهُ عِندَ اللهِ هُوَ خَيْراً وَ أَعْظَمَ أَجْراً ) صَدَقَ اللهُ الْعَظِيمُ
الرد }}}
تم الشكر بواسطة:
#10
[SIZE=5]مشكووووور مليوووون شكر[/SIZE]
الرد }}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  كيفية منع تكرار التاريخ فى قاعدة البيانات ؟ gedo 7 5,691 19-06-21, 09:31 PM
آخر رد: khaled201349
  طلب كود تغير تنسيق التاريخ في جهاز الحاسوب ahmed20 0 1,235 12-02-21, 11:31 PM
آخر رد: ahmed20
  دوال التاريخ hosney 15 12,264 13-12-19, 05:54 AM
آخر رد: بسام محمدغانم
  اريد كود لتغيير التاريخ فقط للوندوز من الفجوال بيسك 6 scsi7000 0 2,190 24-08-16, 03:39 PM
آخر رد: scsi7000
  خطأ في جملة Union mamas1 1 2,013 13-12-13, 09:59 PM
آخر رد: mamas1
Question [سؤال] عرض التاريخ الهجري بالشكل الصحيح في الاداة MSHFlexGrid1 allayl 2 3,448 29-10-13, 08:13 PM
آخر رد: allayl
Question [vb6.0] إظهار التاريخ الهجري من اليمين الى اليسار allayl 5 6,273 16-09-13, 09:27 PM
آخر رد: allayl
  المساعده في مثال البحث عن قبل إنتهاء التاريخ بأسبوعين allayl 7 3,803 30-08-13, 03:31 PM
آخر رد: benomar
  كتابة كود داخل الاكسس بواسطه الكود من الفيجوال hagasoft 1 2,461 28-07-13, 12:13 AM
آخر رد: hskurd
  كيف ابحث عن تاريخ في قاعدة بيانات برنامجي بشرط ان يكون التاريخ تحت رقم حساب معين ؟؟ softmail8 2 2,633 08-07-13, 07:40 PM
آخر رد: softmail8

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم