اذهب الي المحتوي
أوفيسنا

مشكلة البحث بين تاريخين في حقل DATETIME


alsihran
إذهب إلى أفضل إجابة Solved by jjafferr,

الردود الموصى بها

السلام عليكم 

في المرفق 

عند البحث عن السجلات في تاريخ 2022/05/18

يظهر سجل واحد فقط 

image.png.1edd3912abea5b8d0eb071f4f0dbc246.png

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

ولي أحصل على السجل الثاني لابد لي من ادخال البحث من تاريخ 2022/05/18 الى 2022/05/19

image.png.1c93884f508103da9de5bbbf3cffb9c1.png

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

لانه يبحث فقط في السجلات التي توافق نفس التاريخ ويكون الوقت المدخل 00:00:00

 

المطلوب عند البحث في تاريخ محدد يظهر جميع السجلات بغض النظر عن عن الوقت 

 

 

SearchFormatListBox.accdb

رابط هذا التعليق
شارك

البرمجة منطق رياضي صارم جدا ... لا يقبل النقص في المعلومات

لو لديك جدول فيه التاريخ مع الوقت ... الاستعلام يظهر لك التاريخ مع الوقت

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

التي نحصر فيها التاريخ فقط دون الوقت ...او الوقت دون التاريخ ...او السنة

سبحان الله العالم بكل شيء

  • Like 2
رابط هذا التعليق
شارك

7 ساعات مضت, jjafferr said:

طرفي التاريخ يجب ان يكون لديهم نفس التنسيق ، مثلا:

شكرا لك استاذ 

لكن هذا ليس هو المطلوب 

انا راح استعلم عن طريق SqlServer 

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

 

رابط هذا التعليق
شارك

تفضل جرب هذا التعديل

في اي مكان داخل محرر الأكواد الصق الكود التالي

Function NewSours(StartDate As Variant, EndDate As Variant) As Variant
On Error Resume Next
Dim varFilter As Variant

    StartDate = Format([TxtStartDate], "\#mm\/dd\/yyyy\#")
    EndDate = Format([TxtEndDate], "\#mm\/dd\/yyyy\#")

    
    If Not IsNull(TxtStartDate) And IsNull(TxtEndDate) Then
        varFilter = " Format$([Startdate], '\#mm\/dd\/yyyy\#') = '" & StartDate & "' "
                
    ElseIf Not IsNull(TxtStartDate) And Not IsNull(TxtEndDate) Then
        varFilter = " Format$([Startdate], '\#mm\/dd\/yyyy\#') Between '" & StartDate & "' AND '" & EndDate & "'"
    
    ElseIf Len(TxtStartDate) = 0 And Len(TxtEndDate) = 0 Then
        varFilter = Null
    
    End If
    
    NewSours = "SELECT * FROM tbl_Employ  " & IIf(Len(varFilter) = 0, "", "Where " & varFilter)
End Function

 

و لاستدعاء الوظيفة استخدم الكود التالي

ListData.RowSource = NewSours(TxtStartDate, TxtEndDate)

 

image.png.09e542a6a44cad8a14cdb559920ac93b.png

 

SearchFormatListBox.accdb

  • Like 2
  • Thanks 1
رابط هذا التعليق
شارك

41 دقائق مضت, د.كاف يار said:

تفضل جرب هذا التعديل

الله يعطيك العافية 

مثالك المرفق شغال تمام 

حاولت اطبقة على جملة الاتصال Sql server 

حيث حقل الفرز Taqm_Date1

rs.Open "SELECT * FROM View_1_Liset Where Deletrecord = 1 And Taqm_Date1 Between '" & TxtstartDate & "' And '" & TxtEndDate & "'", sqldb, , , adCmdText

للاستدعاء وضعت 

rs.Open = NewSours(TxtstartDate, TxtEndDate)

 

طلع عندي رسالة خطأ 

image.png.2a39214df5df49fd2c09e73df5213a9d.png

 

رابط هذا التعليق
شارك

  • أفضل إجابة
2 ساعات مضت, alsihran said:

لكن هذا ليس هو المطلوب 

انا راح استعلم عن طريق SqlServer 

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

 

ولا يهمك ، تفضل يا سيدي:


    Dim mySQL As String

    mySQL = "SELECT * "
    mySQL = mySQL & " FROM tbl_Employ"
    mySQL = mySQL & " WHERE Format([Startdate],'yyyymmdd') Between '" & Format(Me.TxtStartDate, "yyyymmdd") & "' And '" & Format(Me.TxtEndDate, "yyyymmdd") & "'"
    
    Me.ListData.RowSource = mySQL
      
      
      
      
      او على سطر واحد
      
    Me.ListData.RowSource = "SELECT * FROM tbl_Employ WHERE Format([Startdate],'yyyymmdd') Between '" & Format(Me.TxtStartDate, "yyyymmdd") & "' And '" & Format(Me.TxtEndDate, "yyyymmdd") & "'"
     
      
      

.

 

 

الامر Format يغير ما ما يحتويه من رقم او تاريخ ، الى نص ، 

والفضل في هذه المعادلة يعود لأخي @رمهان ، حيث قال :

في 2‏/6‏/2015 at 00:56, رمهان said:

هنا نلاحظ ان السر في عدم استخدام # واستبدالها ب '  لانه اصبحت المقارنة نصية !

والافضل وضع تنسيق التاريخ بهذا الشكل  mmddyyyy

 

جعفر

  • Like 1
  • Thanks 1
رابط هذا التعليق
شارك

26 دقائق مضت, jjafferr said:
Me.ListData.RowSource = "SELECT * FROM tbl_Employ WHERE Format([Startdate],'yyyymmdd') Between '" & Format(Me.TxtStartDate, "yyyymmdd") & "' And '" & Format(Me.TxtEndDate, "yyyymmdd") & "'"

تسلم استاذ ذا جاب نتيجة مع بعض التعديل على التنسيق حسب تنسيق الحقل بالاستعلام 

رابط هذا التعليق
شارك

10 دقائق مضت, alsihran said:

مع بعض التعديل على التنسيق حسب تنسيق الحقل بالاستعلام 

ما يحتاج تعديل ،

فالكود عمل تنسيق لجانبي المعادلة 🙂

 

جربه كما هو واخبرنا بالنتيجة لوسمحت 🙂

 

جعفر

رابط هذا التعليق
شارك

1 دقيقه مضت, jjafferr said:

ما يحتاج تعديل ،

فالكود عمل تنسيق لجانبي المعادلة 🙂

 

جربه كما هو واخبرنا بالنتيجة لوسمحت 🙂

 

جربته مثل ما هو ما طلع ولا سجل 

عملت التنسيق بهذا الشكل 

Me.ListData.RowSource = "SELECT * FROM tbl_Employ WHERE Format([Startdate],'yyyy-mm-dd') Between '" & Format(Me.TxtStartDate, "yyyy-mm-dd") & "' And '" & Format(Me.TxtEndDate, "yyyy-mm-dd") & "'"

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

image.png.a87ab89033174e2605591749a443e94a.png

رابط هذا التعليق
شارك

تفضل جرب هذا التعديل

و لا تنسى ان تضع عنوان السيرفر

Function NewSours(StartDate As Variant, EndDate As Variant) As Variant
On Error GoTo ErrH
Dim conn As ADODB.Connection, rs As ADODB.Recordset, strConnString As String, varFilter As Variant

    StartDate = Format([TxtStartDate], "\#mm\/dd\/yyyy\#")
    EndDate = Format([TxtEndDate], "\#mm\/dd\/yyyy\#")

    
    If Not IsNull(TxtStartDate) And IsNull(TxtEndDate) Then
        varFilter = " Format$([Startdate], '\#mm\/dd\/yyyy\#') = '" & StartDate & "' "
                
    ElseIf Not IsNull(TxtStartDate) And Not IsNull(TxtEndDate) Then
        varFilter = " Format$([Startdate], '\#mm\/dd\/yyyy\#') Between '" & StartDate & "' AND '" & EndDate & "'"
    
    ElseIf Len(TxtStartDate) = 0 And Len(TxtEndDate) = 0 Then
        varFilter = Null
    
    End If
       
       '==================================================================
            strConnString = "عنوان السيرفر"
       '==================================================================
       
        Set conn = New ADODB.Connection
        conn.Open strConnString
        Set rs = conn.Execute("SELECT * FROM tbl_Employ  " & IIf(Len(varFilter) = 0, "", "Where " & varFilter))
           If Not rs.BOF And Not rs.EOF Then
                rs.MoveFirst
                'رؤوس الأعمدة
                ListData.AddItem rs.Fields(0).Name & ";" & rs.Fields(1).Name & ";" & rs.Fields(2).Name & ";" & rs.Fields(3).Name
                While (Not rs.EOF)
                    ListData.AddItem rs.Fields(0) & ";" & rs.Fields(1) & ";" & rs.Fields(2) & ";" & rs.Fields(3)
                    rs.MoveNext
                Wend
            End If
            rs.Close
            Set rs = Nothing
ErrH:
Exit Function
End Function

 

SearchFormatListBox.accdb

  • Like 1
  • Thanks 1
رابط هذا التعليق
شارك

31 دقائق مضت, د.كاف يار said:

تفضل جرب هذا التعديل

ما شاء الله اخوي حسين ، هاي برنامج كامل ، مو بحث فقط 🙂

دائما فيك الخير والبركة ، كما عودتنا بأفضالك 🙂

 

جعفر

رابط هذا التعليق
شارك

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

زائر
اضف رد علي هذا الموضوع....

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • تصفح هذا الموضوع مؤخراً   0 اعضاء متواجدين الان

    • لايوجد اعضاء مسجلون يتصفحون هذه الصفحه
×
×
  • اضف...

Important Information