تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[VB.NET] خطأ كود إستعلام بين تاريخين
#11
(23-03-20, 10:42 AM)kiki كتب : السلام عليكم ورحمة الله وبركاته
بخصوص الخطاء فالامر بسيط وواضح جداً وهذا ما يقع به الجميع
لتبسيط الامر ... هل ينفع وضع قيمة نص فى قيمة مطلوب ان تكون رقم او تاريخ ؟؟؟
هذا ما تفعله عندما قمت بتعريف كلاً من D1 و D2 كونه من نوع نص وليس تاريخ
فى Sql عندما تضع # تعنى ان المحتوى يجب ان تكون من قيمة تاريخ ولكن ما وضعته هو تاريخ على نمط نص

كل ما عليك فعله هو التالى
اما تغيير هذا السطر

كود :
Dim d1, d2 As String

الى

كود :
Dim d1, d2 As Date

عند تنفيذ هذا الخيار يحدث الخطأ التالي :
System.Data.SqlClient.SqlException: 'Conversion failed when converting date and/or time from character string.'

-----------------------------
أو هذا السطر

كود :
da = New SqlDataAdapter("select * from MovTable where MovAddedDate Between #" & d1 & "# AND #" & d2 & "#", sqlcon)

ليكون بهذا الشكل

كود :
da = New SqlDataAdapter("select * from MovTable where MovAddedDate Between #" & CDate(d1) & "# AND #" & CDate(d2) & "#", sqlcon)

وعند تنفيذ هذا الخيار ينتج عنه الخطأ التالي :
System.Data.SqlClient.SqlException: 'Incorrect syntax near '#'.'

-------------------------------------
لتبسيط الامر اكثر انظر الى الكود بشكل الذى استخدمته سيقوم بحل الامر
PHP كود :
      DTPDate1.Value Date.Today.AddDays(-10)

 
      Dim d1d2 As Date
       d1 
Format(DTPDate.Value"yyyy/MM/dd")
 
      d2 Format(DTPDate1.Value"yyyy/MM/dd")

 
      da = New SqlDataAdapter("select * from MovTable where MovAddedDate Between #" d1 "# AND #" d2 "#"sqlcon

لعل الان الصورة واضحة لديك ومعرفة السبب لمذا كان يظهر الخطاء
ولماذا عند تغيير # الى ' كان لا يوجد خطاء ولكن بلا نتيجة
# = تاريخ
' = نص
بدون = رقم
بالتوفيق

جميل جدا تجاوبك حفظك الله ولكن للأسف لازالت المشكلة قائمة

وزيادة في توضيح المطلوب هو فقط طلب جلب السجلات التي تحمل تواريخ تقع بين D1 , D2 
والتي من خلالها يتم معرفة السجلات التي تم تسجيلها خلال العشرة الأيام السابقه

.

.

قبل لحظات وضع أحد الأخوه رد على السؤال 
فقد وضع الجملة التالية 

PHP كود :
      DTPDate1.Value Date.Today.AddDays(-10)
 
       Dim d1d2 As String

        da 
= New SqlDataAdapter("select * from MovTable where MovAddedDate Between @d1 AND @d2"sqlcon)
 
       da.SelectCommand.Parameters.AddWithValue("@d1"DTPDate.Value.Date)
 
       da.SelectCommand.Parameters.AddWithValue("@d2"DTPDate1.Value.Date

وبعد أن قمت بتجربتها لم أجد بها أخطاء ولكنها لم ترجع أي نتيجة للكومبو فقمت بتعديل ترتيب الداتا في الأسطر الأخيرة 
وجعلت D
d1", DTPDate1.Value.Date
و
d2", DTPDate.Value.Date

فتم الأمر وتم جلب السجلات الأخيرة بشكل صحيح 

وفعلا شكرا لصاحب المشاركة 
وشكرا لكل من تفضل بتفعيل السؤال والمساهمه في حله 

تحياتي لكم حفظكم الله
الرد
تم الشكر بواسطة: kiki
#12
الان بعد توضيح كيفية استخدام الامر
ناتى للخطوة الثانية وهى كيفية وضع التواريخ بالصورة الصحيحة
فى الكود لديك D1 و D2
مشيراً الى ان D1 هو تاريخ اليوم و D2 هو تاريخ اليوم مطروح منه 10 ايام
فهنا تقع المشكلة الثانية كون D1 اكبر من D2 وهنا يفترض ان يكون العكس
للتوضيح اكتر لما تريد انت فعله لنعمل مثال توضيحي بسيط يوضح الامر
لنقول اننا لا نريد عمل جلب اخر السجلات خلال الـ 10 ايام السابقة بل نجعلها
اخر عشر ايام من تاريخ المحدد يعنى لو كتبت تاريخ يوم 10 من شهر 1 لهذا العام
فيتم جلب كلاً من تاريخ يوم 1 من شهر نفسه الى اليوم المذكور وهو يوم 10
واذا تم تحديد تاريخ اليوم اذا تاريخ اليوم وما قبله بعشر ايام

سيتم عمل الكود بالشكل التالى بعد مسح الكود الذى لديك
كود :
       Dim D1, D2 As New Date
       D1 = DTPDate.Value.AddDays(-10).Date
       D2 = DTPDate.Value.Date
       da = New SqlDataAdapter("select * from MovTable where MovAddedDate Between #" & D1 & "# AND #" & D2 & "#", sqlcon)

بكده تكون اجريت المطلوب تماماً وسيتم حل المشكلة كلياً
والتى كانت فى البداية لديك بسبب صيغة نوع من تاريخ لنص
والثاني هو مشكلة وضع التاريخ الاكبر اولاً ثم الاصغر ثانياً
الكود الخاص بـ Between فى الاستعلام هو ما الا عبارة عن
PHP كود :
MovAddedDate >= ## AND MovAddedDate <= ## 

بحث عن قيمة اكبر من ويسواي ومن ثم اصغر من ويساوي
فعندما كنت تضع اكبر من تاريخ اليوم كمثال من ثم اصغر من تاريخ اليوم -10 ايام
فاصبح هنا لا يوجد نتيجة تعبر عن كلمة بينهم اصبح البحث خارج بينهم
الرد
تم الشكر بواسطة:
#13
(23-03-20, 01:20 PM)kiki كتب : الان بعد توضيح كيفية استخدام الامر
ناتى للخطوة الثانية وهى كيفية وضع التواريخ بالصورة الصحيحة
فى الكود لديك D1 و D2
مشيراً الى ان D1 هو تاريخ اليوم و D2 هو تاريخ اليوم مطروح منه 10 ايام
فهنا تقع المشكلة الثانية كون D1 اكبر من D2 وهنا يفترض ان يكون العكس
للتوضيح اكتر لما تريد انت فعله لنعمل مثال توضيحي بسيط يوضح الامر
لنقول اننا لا نريد عمل جلب اخر السجلات خلال الـ 10 ايام السابقة بل نجعلها
اخر عشر ايام من تاريخ المحدد يعنى لو كتبت تاريخ يوم 10 من شهر 1 لهذا العام
فيتم جلب كلاً من تاريخ يوم 1 من شهر نفسه الى اليوم المذكور وهو يوم 10
واذا تم تحديد تاريخ اليوم اذا تاريخ اليوم وما قبله بعشر ايام

سيتم عمل الكود بالشكل التالى بعد مسح الكود الذى لديك
كود :
       Dim D1, D2 As New Date
       D1 = DTPDate.Value.AddDays(-10).Date
       D2 = DTPDate.Value.Date
       da = New SqlDataAdapter("select * from MovTable where MovAddedDate Between #" & D1 & "# AND #" & D2 & "#", sqlcon)

بكده تكون اجريت المطلوب تماماً وسيتم حل المشكلة كلياً
والتى كانت فى البداية لديك بسبب صيغة نوع من تاريخ لنص
والثاني هو مشكلة وضع التاريخ الاكبر اولاً ثم الاصغر ثانياً
الكود الخاص بـ Between فى الاستعلام هو ما الا عبارة عن
PHP كود :
MovAddedDate >= ## AND MovAddedDate <= ## 

بحث عن قيمة اكبر من ويسواي ومن ثم اصغر من ويساوي
فعندما كنت تضع اكبر من تاريخ اليوم كمثال من ثم اصغر من تاريخ اليوم -10 ايام
فاصبح هنا لا يوجد نتيجة تعبر عن كلمة بينهم اصبح البحث خارج بينهم

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

شكرااا لك يا غالي ع ذوقك وإهتمامك 

تحياتي لك
الرد
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  ابسط كود لمعرفة المدة بين تاريخين سعود 4 1,756 25-05-17, 09:15 AM
آخر رد: Buseiligm

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


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