الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

البحث عن تواريخ داخل فترة معينة

مغلق
بدأه غسان.ع في 7 يوليو 2006 · 4 رد · 993 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

كتبت هذا الاستعلام للبحث عن تقاريركتبت في فترة واقعة بين تاريخين لكن لم تعطيني نتيجة ولم تعطيني خطأ ايضا

للعلم فان تاريخ اول الفترة وآخرها يؤخذ من datetimepicker وهو مكون من التايخ مع الوقت

فهل من صيغة احسن او كود ما لحل المشكلة

SELECT	 nurreport.report  , nurreport.time  , nurreport.nur_name  
FROM		 personal INNER JOIN
					  nurreport ON personal.num = nurreport.num
WHERE	 (personal.name LIKE @par) AND (nurreport.illness LIKE @par2) 
AND (personal.num = @par1)

******************************************
 AND (nurreport.time < @par3) AND 

  (nurreport.time > @par4)
*******************************************

تم تعديل هذه المشاركة بواسطة غسان.ع في 7 يوليو 2006 في 00:29

#2

السلام عليكم

بصراحة الكود غير واضح ولكن اما ان يكون الخطأ في الاستعلام او يكون الخطأ في الكود البرمجي :

1- للتاكد من ان الاستعلام يعمل بصورة صحيحة

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

2- اذا كان الخطأ في الكود البرمجي

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

وشكرا

#3

السلام عليكم

هل البحث في التقارير أم في النموذج نفسه

وهل تبحث عن الوقت أم عن التاريخ أم الكل معاً ؟

إذا كان في النموذج فاستخدم العبارة BETWEEN للمقارنة بين التواريخ

شاهد المثال التالي

ملاحظة: حيث SDate تعبر عن بداية التاريخ StartDate وحيث EDate تعبر عن نهاية التاريخ EndDate

في الـ StoredProcedure نكتب التالي

@SDate SMALLDATETIME = Null,
@EDate SMALLDATETIME = Null
SELECT * 
FROM Main
WHERE FollowDate BETWEEN @SDate AND @EDate

ثم ترسل القيم من الـ DateTimePicker.Value ويكون على الهيئة Short لجعل القيم رقمية لا نصية .

 Me.DAMain.FillByQueryData(dtpStartFrom.Value, dtpEndTo.Value)

إذا كنت تبحث عن الوقت في النموذج سيكون بهذ الشكل , علماً ان الوقت يؤخذ من الـ DateTimePicker.Time

@STime NVARCHAR(10) = NULL,
@ETime NVARCHAR(10) = NULL
WHERE  CONVERT(NVARCHAR, FollowTime, 108)  BETWEEN  @STime AND @ETime

حيث الرقم 108 يعبر عن طريقة العرض بالشكل التالي hh:mi:ss اي البحث سيتم بالمقارنة بين الساعات و الدقائق و الثواني كذلك.

كما تلاحظ أننا نقوم بتحويل قيم العامود ليتم تصفيته من التواريخ اثناء البحث و يقتصر على الساعات و الدقائق و الثواني.

إذا كنت تبحث عن الوقت و التاريخ معاً فجعل الرقم يساوي صفر اي Default

للمزيد عن التعابير expression اضغط على الزر F1 بعد تضليل الكلمة CONVERT في الـ SQL للذهاب للـ SQL Book Online

ثم ترسل القيم من الـ DateTimePicker.Text بهذا الشكل

 Me.DAMain.FillByQueryData(dtpStartFrom.Text, dtpEndTo.Text)

اما إذا كان الـ BATCH الـ Query في التقرير فسيكون بهذا الشكل.

(({Main.FollowDate}>= {?@SDate}and {Main.FollowDate}<= {?@EDate})

و ترسل القيم من النموذج للتقرير بهذا الشكل.

'Supply Start Date .
				.SetParameterValue("@SDate", dtpSDate.Value.ToShortDateString)

				'Supply End Date .
				.SetParameterValue("@EDate", dtpEDate.Value.ToShortDateString)

و بالنسبة للبحث عن الوقت في التقارير سيكون بهذا الشكل.

((Time({Main.FollowTime}) >= Time({?@STime}) and Time({Main.FollowTime}) <= Time({?@ETime}))

نستخدم الوظيفة Time في Crystal Report لنقوم بعملية التصفية لحصر البحث بالوقت فقط دون التاريخ.

بهذا الشكل ترسل القيم من النموذج للتقرير.

 'Supply Start Time .
				.SetParameterValue("@STime", dtpSTime.Value.ToShortTimeString)

				'Supply End Time .
				.SetParameterValue("@ETime", dtpETime.Value.ToShortTimeString)

بالتوفيق إن شاء الله.

في المثال يتضح المقال

#4

مشكور ويعطيك العافيه

#5

شكور اخي الغملاسي between اعطت نتيجة ممتازة

هذا الموضوع مغلق.

مواضيع مشابهة