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

مشكلة أزليه في البحث بين تاريخين

مغلق
بدأه Pharaonic_Guy في 3 أغسطس 2006 · 9 رد · 2,292 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

عند استخدام أي طريقة للبحث بين تاريخين في جملة SQL.

فكل ما نقوم به هو استخدام الصيغة التالية :

Where Date Between #Date1# And #Date#

ولكن عبارة [ between .. And ] تستخدم لحصر القيم العددية ..

والمعروف أن صيغة التاريخ ليست أبدا كمية عددية.

بالتالي إذا قمنا باستخدام الصيغة السابقة علي تاريخين كالتالي :

صيغة التااريخ هي dd/mm/yyyy

Where Date Between #01/09/2006# And #30/09/2006#

فالمفروض أن يتم حصر جميع أيام شهر 9 لسنة 2006..

ولكن ستجد من بين القيم المحصورة تاريخ مثل

01/05/2006
و
10/08/2006

الذي حدث أنه تم حصر جميع التواريخ بين العددين [between 01 And 30] بالإضافة الي الأشهر الأصغر من 09

المهم لن ندخل في التفاصيل التي علي أساسها يتم مقارنة التواريخ ككميات عددية ..لأنها لن تؤدي إلي شيء..سوي أن الصيغة Between .. And مش شغاله بصورة صحيحة..

المهم أنني حاولت أن أفكر في طريقة أخري لحصر التواريخ بين فترتين..

فلم أجد إلا طريقة عقيمة يتم من خلالها معرفة جميع التواريخ بين فترتين ..عن طريق زيادة يوم علي تاريخ البدء وهكذا إلي أن نصل إلي تاريخ الانتهاء..

ومن ثم تجميع تلك التواريخ في جملة SQL ..

الطريقة شغاله كما ستري في المشروع المرفق ..

ولكن عندما يتجاوز فرق التاريخين قرابة 8 أشهر .. فسيعطي بالتأكيد رسالة Query is Too Complex

في النهاية .. أرجو ممن لديه الخبرة في هذا الأمر بالمشاركة بأفكار أو باقتراحات..

Search_Between_Dates.rar

تم تعديل هذه المشاركة بواسطة Pharaonic_Guy في 3 أغسطس 2006 في 20:55

#2

الغريبة أنني رأيت برامج EXE الآن..

تستخدم بالتأكيد جملة Between And .. وشغاله كويس جدا ..

أين المشكلة إذن ...

#3

أنا معك أخي Pharaonic_Guy في ماقلته هنا...

وأنا مثلك أيضا..

أواجه نفس المشكلة

لكن :

لدي عدة أسئلة سأطرها عليك..

أولا .. مانوع الحقل الذي تضع فيه التاريخ ها هو حقل تاريخ وقت أم حقل عام ؟؟و أنت تملأه بالتاريخ ؟

ثانيا ..

هل لم لاتستخدم علامات المقارنة ><= لحصر القيمة بشرط أن تستخدم علامة ## حول اسم قيمة التاريخ وتيكون نوع الحقل في القاعدة تا ريخ ووقت ....

إذا نجحت الطرق السابقة فأخبرني...

راسلني على

mamb121@hotmail.com

أو تفضل وتكرم بزيارة موقعي

www.tecnyt.com

#4

أخي العزيز..

حقل التاريخ بالتأكيد Date/Time..

لك أن تعلم أنني جربت معاملات المقارنة <=,>= قبل استعمال Between

ووجدت أنه لا فارق بينهم إطلاقا.. حيث نفس القيم هي التي تعود ..

شكرا لمساهمتك في الموضوع وأرجو أن تستمر..

#5

اخي الفاضل

السلام عليكم ورحمة الله وبركاته

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

/index.php?showtopic=100699

لا اعلم ان كانت هذه الطريقه مستخدمه لديكم في الـ VB ام لا

اختكم

زهره

#6

شكرا للأخت زهرة علي تشريف الموضوع...

بالفعل هي نفس الطريقة المتبعة في ال VB .. حيث في خلال بحثي لحل لتلك المشكلة .. كنت قد مررت علي هذا الموضوع منذ 4 أشهر ..

وما زلت أجزم بأن أي تعبير قد تم التطرق إليه لحصر التواريخ يعمل كالجرس .. سواء تعبير Between أو علامات المقارنة

ولكن يبدو أن المشكلة قد تكون ربما في إعدادات التاريخ نفسه علي الجهاز ..

علي العموم سأحاول اللعب في صيغ التاريخ من ال Regional Setting.. وسأسرد أي نتائج جديدة

#7

طيب جرب هذا الكود

Dim strSQL as String
strSQL = "SELECT Tbl.SDate  strSQL = strSQL & " FROM [Tbl] strSQL = strSQL & " WHERE (((Tbl.SDate)>=[Forms]![FORM1]![DT1] And (Tbl.SDate)<=[Forms]![FORM1]![DT2]));
#8

أنا أستخدم أداة DTPicker لإختيار التاريخ لكن لا أدري كيف أضعها في كودك السابق..

راسلني على

mamb121@hotmail.com

أو تفضل وتكرم بزيارة موقعي

www.tecnyt.com

#9

أولا : أوجه الشكر للأخ التكنولوجي والأخت زهرة علي المشاركة في إيجاد حل لهذا الموضوع ..

ثانيا : لمن كان يبحث عن حل لمشاكل البحث بين تاريخيين فله أن يسعد بأنني وجدت حل جذري بإذن الله..

كنت قد ذكرت في المشاركة السابقة أنني سأحاول اللعب في صيغ التاريخ .. وقد قمت باللعب بالفعل ..

وحولت الصيغة من [dd/mm/yyy] إلي [m/d/yyyy] كما هو موضح في الصورة التالية :

DateFormat.png

بعد هذا التحويل .. فأي تعبير سواء Between أو علامات المقارنة .. سيعمل بصورة سليمة في حصر التواريخ ..

ولكن تبقي مشكلة .. أننا نريد الإبقاء علي الصيغة [dd/mm/yyyy] مع الاحتفاظ بالنتيجة التي وصلنا إليها..

والحل في دالة Format بالتأكيد ..وسنقوم باستخدامها هكذا :

Where Date Between #" & Format(Date1, "m/d/yyyy") & "# And #" & Format(Date2, "m/d/yyyy") & "#"

والميزة هنا أنك لن تحتاج لتغيير صيغة الحقل Date إلي نفس الصيغة..ولن تحتاج بالتأكيد إلي تغيير صيغة التاريخ من الويندوز إلي الصيغة [m/d/yyyy]

ثالثا : مرفق البرنامج الأول بعد التعديل عليه بالصيغة الجديدة ..لمزيد من التجربة علي أكثر من نسخة ويندوز..

رابعا: أكرر الشكر مرة أخري للأخوين الفاضلين..

Search_Between_Dates_2.rar

تم تعديل هذه المشاركة بواسطة Pharaonic_Guy في 5 أغسطس 2006 في 06:39

#10

عجيب جداً .!!!

المعذرة على رفع الموضوع ولكن بصراحة جاب نتيجة ممتازة وصحيحة ولله الحمد :)

لكن ممكن شرح ولو بسيط للكود ؟!:)

كيف أتت النتائج سليمة ولم اغير على الصيغة في قواعد البيانات ؟!

ياليت تفسير بسيط للكود + شرح للدالة format ان امكن ..

المعذرة مرة اخرى على رفع الموضوع ..

ولكن لأهميته بصراحة..

ولعل وعسى أن يستفيد أحد منه ....

دمتم في رعاية الله .....

1

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

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