منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : استتعلام بين تاريخين فى السكوال
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2
السلام عليكم ورحمة الله وبركاتة

تحية غالية لاعضاء ومشرفى المنتدى الكرام

لدى برنامج مصمم على فيجوال بيسك 6 و قاعدة بيانات اكسس 2003

وقمت بالانتقال الى سكوال سرفر 2008 R2

يوجد لدي فورم للاستعلام عن بين تاريخين

الكود كالتالى

Dim from As Date
from = Format(Order_Datea, "mm/dd/yyyy")
Too = Format(Order_Dateb, "mm/dd/yyyy")
SQLS = "SELECT * transmaste where NoteDate BETWEEN #" & CDate(from) & "# AND #" & CDate(Too) & "#


يعمل جيد على قاعدة البيانات اكسس

ولا يعمل على السكوال وبعترض على الرمز #

ارجوا التوضيح جزاكم الله خير

تحياتى
السلام عليكم...

العلامات # خاصة بـ Access. استعمل علامات التنصيص أو الاقتباس الفردية (single quotation).

سلام.
اشكرك استاذى

فعلا قد توصلت لحل المشكلة

تحياتى ليك
السلام عليكم
استاذ / ناجى تحية طيبة

لو تفتكر حضرتك هذه المشكلة ..... تم استبدال علامة # بعلامة التنصيص

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

[attachment=1391]

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

وعند تغير نوع عرض التاريخ من الكنترول بانال للويندوز يعمل التقرير

هل هناك اخيار فى السكوال لتغير عرض التاريخ من اليمين الى اليسار 1/1/2014

وليس 2014/1/1

ام هناك مشكلة لى الكود ؟

كود البحث هو

Dim from As Date
from = Format(Order_Datea, "mm/dd/yyyy")
Too = Format(Order_Dateb, "mm/dd/yyyy")
SQLs = "select * from TransMaster WHERE TransMaster.NoteDate BETWEEN '" & CDate(from) & "' AND '" & CDate(Too) & "' "


تظهر رسالة الخطأ التالية

[attachment=1392]

اسف للاطالة

تحياتى
للرفع
السلام عليكم....

نعم عانيت من هذه المشكلة - خاصة مع اختلاف إعدادات التاريخ من جهاز إلى آخر، و لكنني حللتها منذ زمن بعد مراجعة وثائق SQL Server و كيفية تعامله مع التاريخ، ثم كتبت دوال لهذا الغرض بحيث يصل التاريخ إلى SQL Server و يتعامل معه بشكل ثابت بصرف النظر عن إعدادات التاريخ في الجهاز.

ما يهمنا هنا إذا كنت ستتعامل مع قيمة التاريخ فقط في الحقل (دون اعتبار الوقت)، فاكتب الدالة التالية في Module:

كود :
Public Function SQLWhereDate(AField As String, ADate As Date, Optional AOperator As String = "=", Optional ADate2 As Date = #12/31/9999#) As String
    If AOperator = "><" Then
        ' BETWEEN:
        SQLWhereDate = "(CONVERT(datetime, CONVERT(nvarchar(10), " & AField & ", 103), 103) BETWEEN " _
                     & "CONVERT(datetime, '" & Format$(ADate, "dd/mm/yyyy") & "', 103)" _
                     & " AND CONVERT(datetime, '" & Format$(ADate2, "dd/mm/yyyy") & "', 103))"
    Else
        ' Other operators:
        SQLWhereDate = "(CONVERT(datetime, CONVERT(nvarchar(10), " & AField & ", 103), 103) " & AOperator _
                     & " CONVERT(datetime, '" & Format$(ADate, "dd/mm/yyyy") & "', 103))"
    End If
End Function

حيث:
- AField: اسم حقل التاريخ (String).
- ADate: قيمة التاريخ الذي تبحث عنه (Date). و إذا كنت تريد البحث عن نطاق من التواريخ فهذا يمثل تاريخ البداية.
- AOperator: عامل المقارنة (String) و هو اختياري، أي يمكنك إهماله حيث قيمته الافتراضية هي "=". العوامل المسموح بها هي عوامل المقارنة المعروفة بالإضافة إلى الرمزين "><" بهذا الشكل لاستعمال عبارة BETWEEN في جملة SELECT.
- ADate2: تاريخ النهاية (Date) و هو أيضاً اختياري، أي يمكنك إهماله. طبعاً ستحتاج إلى استعماله في حالة استعمال BETWEEN لتحديد تاريخ النهاية.

* مثال:
نفرض أن تاريخ البداية في Text1 و تارخ النهاية في Text2 و نريد البحث عن نطاق بين التاريخين:

كود :
SQLS = "SELECT * FROM TransMaster WHERE " & SQLWhereDate("NoteDate", CDate(Text1.Text), "><", CDate(Text2.Text))

*** النقطة المهمة في الموضوع هي كيفية تحويل الـ VB للـ String إلى Date (سواء كتحويل ضمني أو باستعمال CDate). حيث VB دائماً تأخذ بعين الاعتبار تنسيق التاريخ في النظام Windows حسب الإعدادات الإقليمية في لوحة التحكم. و هذا منطقي لأن عرض و معالجة التاريخ من المفترض أن يخضع لرغبة المستخدم و تفضيلاته حسب البلد الذي هو فيه.

هذا يعني أن ترتيب - أو شكل - التاريخ في مربعات النص (مثلاً اليوم أولاً أو الشهر أولاً) يجب أن يتفق مع إعدادات التاريخ في النظام.

نرجو الاستفادة و السلام.
وعليكم بالسلام ورحمة الله وبركاته

يعطيك العافيه استاذ ناجي استاذ الزمن الجميل ربنا يديم المحبه

تحياتي لك مع دوام التوفيق
السلام عليكم...

إي و الله! هنالك أسماء لا يمكن أن ننساها - و منها بالتأكيد "أحمد عبد العليم" (ahmedabdelaliem) من أيام المنتدى القديم.

أين أنت با رجل؟ مشاركاتك قليلة (كنت من مدة أسأل نفسي هذا السؤال).

أرجو أن تكون بخير، و السلام.
وعليكم بالسلام ورحمة الله وبركاته

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

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

كالعادة استاذ ناجى ...

متألق ومبدع فى اجاباتك ( ماشاء الله ) حقا ثروة كبيرة فى علمك للمنتدى

تحياتى ليك استاذى ..

و احب اشكرك مرة اخى لانك كنت سبب فى ظهور الاستاذ / أحمد عبد الحليم

فانة هو اول من ساعدنى فى دخول الفيجوال بيزك فى المنتدى القديم

وكان سباق فى الرد لكل سائل

اسال الله دوام الصحة والعافية له

...............................................................................................................

جربت المديول استاذى والامر تمام

ولكن

كيف استخدم معيار للفلتر اخر مع التاريخ ؟ حاولت اضافة متغير تانى ولكن لم استطيع

هذا هو الكود فى مثالك

SQLs = "SELECT * FROM TransMaster WHERE " & SQLWhereDate("NoteDate", CDate(Order_Datea.text), "><", CDate(Order_Dateb.text))

اريد اضافة المعيار التالى

and TransMaster.VENDORID = '" & Text1.text & "'

والتالى

and TransMasterDetails.whid between " & storea.text & " and " & storeb.text & "




اكرر شكرى لك وتحياتى لاستاذنا أحمد بك

تحياتى
الصفحات : 1 2