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

كود استعلام من اكسيس بين وقتين وليس تاريخين

بدأه البورمجى في 30 سبتمبر 2013 · 12 رد · 1,097 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام علبكم

 

الرجاء كود استعلام بين وقتين ويعرض على الداتا جريد

#2

أرجو التوضيح أكثر

 

لم أفهم المطلوب

 

وحبذا لو كان مع أمثلة للمطلوب بالذات

 

وشكرا

#3

            Try


                If DataSet1.Tables("P_N").Compute("count(Date)", "Date >= '" & DateTimePicker1.Value.ToShortDateString & "' and Date <= '" & DateTimePicker2.Value.ToShortDateString & "'").ToString > 0 Then
                    'اول شي نبحث بهاذ الكود عن قيمة مطابقة في قاعدة البيانات
                    'في حال وجد قيمة اكبر من صفر يتم
                    'يتم الانتقال الى الفلترة لكي يظهرها في داتا جريد
                    'والسبب في هذه الحركة حتى لا تتم الفلترة على الفاضي في حال لم يتم العثور على نتائج
                    'وهذه العملية مفيدة جدا لما بكون عندك سجلات كبيةر لان الغاء الفلترة في السجلات الكبيرة بياخذ وقت شوي
                    'لذلك هذا هو الحل الانسب
                    BindingSource1.Filter = "Date >= '" & DateTimePicker1.Value.ToShortDateString & "' and Date <= '" & DateTimePicker2.Value.ToShortDateString & "'"

                Else

                    MsgBox("لم يتم العثور على نتائج", MsgBoxStyle.Question, "P_TARGET")

                End If



            Catch ex As Exception

                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
 

هذ هو الكود المستخدم للبحث بين تاريخين فى عمود date

المطلوب نفس الكود لكن للبحث فى عمود Time وبين وقتين مث بين الساعة 07:00:00 وبين 13:30:00

طبعا القيمة سوف يتم تحديدها من2 تيكست بوكس

 

ارجو ان يكون السؤال قد تم ايضاحه

#4

ACCESS لا يدعم حقل من نوع TIME. يدعم فقط DATETIME ولا تنخدع بالذي تراه فهذا فقط للاظهار اما القيمة المخزنة فهي جميعها من نوع DATETIME لذلك لا يمكنك البحث عن ساعة بدون تاريخ

 

الحقول في الجدول كلها من نوع DATETIME . انظر الصور

 

 

post-274444-0-46342900-1380551762.png

post-274444-0-37557600-1380552265_thumb.

Samir Ibrahim

VFP Blog

VB.NET Blog

#5

شكرا استاذ سمير ع التواصل

 

لكنك لم تعطنى الطريق الى الحل ما هى الصيغة التى ابحث بها بين الساعات لكى احسب مثلا اجمالى الوارد من الساعة 7 حتى الخامسه

 

اكيد هناك صيغة لذلك  ............

#6
  1. اضف 2 DatetimePicker : dtp1 and dtp2
  2.  غير خاصية Format الى Time

هناك اكثر من 5 طرق للتعامل مع datetime وذلك اعتمادا على كيفية جلبك للمعلومات وماذا تستعمل. ارى هنا انك تستعمل bindingsource

 

ملاحظة : لقد استعملت الحقول المستعملة في جدولي الذى ارفقته في الصورة السابقة. غيره بما يناسبك

    Dim date_to_search As DateTime = New Datetime(2013,09,02,00,00,00,00)

    Dim dtp1_time as TimeSpan      = New TimeSpan(dtp1.Value.Hour,dtp1.Value.Minute,dtp1.Value.Second)
    Dim dtp2_time as TimeSpan      = New TimeSpan(dtp2.Value.Hour,dtp2.Value.Minute,dtp2.Value.Second)

    Dim datetime1 as DateTime = date_to_search.Add(dtp1_time)
    Dim datetime2 As DateTime = date_to_search.Add(dtp2_time)

    Dim filter_expression = "check_datetime >= " + Chr(39) + datetime1.ToString + Chr(39) + " AND check_datetime <= " + Chr(39) + datetime2.ToString + Chr(39)
    bs_att.Filter = filter_expression

تم تعديل هذه المشاركة بواسطة samir ibrahim في 30 سبتمبر 2013 في 22:10

Samir Ibrahim

VFP Blog

VB.NET Blog

#7

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

 

ولا ادرى لماذا لم تكون مشرف فى المنتدى حتى الان وانت اكثر الناس تواصلا

 

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

#8

شكرا عال الكلام الطيب.

المنتدي جميل بالموجدين. والشباب المشرفين ما قصروا

خلي المناصب العليا لغيرنا. شو بدى بوجعة الراس ;)

Samir Ibrahim

VFP Blog

VB.NET Blog

#9

استاذى الاستاذ سمير

 

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

ارجو التعديل على المرفق ومعرفة الغلط التى ارتكبنه فى صياغة الكود

 

بارك الله لنا فيكمبحث بين زمنين.rar

#10

لقد نبهتك ولم تنتبه :)

 

الاكسس لا يحفظ الوقت لوحد. بل يحفظ تاريخ+وقت

 

عندما تدخل وقت فقط فان الاكسس يضيف التاريخ الافتراضي وهو 30/12/1899

 

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

 

لقد وضعت شرح بالمكان الذي عملت فيه اخطاء

Imports System
Imports System.Data.OleDb
Imports System.Data.OleDb.OleDbCommand
Imports System.Data

Public Class Form1
    Dim cn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source =data.mdb")
    Dim da As New OleDbDataAdapter
    Dim dt As New DataTable
    Dim bs As New BindingSource ' هكذا تعرف وليس ك sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        da = New OleDbDataAdapter("select * from Table1 ", cn)
        da.Fill(dt)
        bs.DataSource = dt
        Me.DataGridView1.DataSource = bs
        Me.DataGridView1.Columns(3).DefaultCellStyle.Format = "hh:mm:ss tt" ' show only the time
        Me.DataGridView1.AutoResizeColumns(DataGridViewAutoSizeColumnsMode.DisplayedCells) ' display the grid in 
    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim x As Date = DateTimePicker1.Value
        Dim y As Date = DateTimePicker2.Value
        dt.Clear()
        da = New OleDbDataAdapter("select * from Table1 where  datt betwean " & x & "   and " & y & "", cn)
        da.Fill(dt)
        Me.DataGridView1.DataSource = dt
    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        Dim date_to_search As DateTime = New DateTime(1899, 12, 30, 0, 0, 0) ' create the default access datetime 30/12/1899

        Dim dtp1_time As TimeSpan = New TimeSpan(dtp1.Value.Hour, dtp1.Value.Minute, dtp1.Value.Second)
        Dim dtp2_time As TimeSpan = New TimeSpan(dtp2.Value.Hour, dtp2.Value.Minute, dtp2.Value.Second)

        Dim datetime1 As DateTime = date_to_search.Add(dtp1_time)
        Dim datetime2 As DateTime = date_to_search.Add(dtp2_time)

        ' filter the data by date only
        Dim date_filter = " datt = " +  Chr(39) + dtp3.Value.Date.ToString + Chr(39) 
        ' Filter the data by time only
        Dim time_filter = "Time >= " + Chr(39) + datetime1.ToString + Chr(39) + " AND Time <= " + Chr(39) + datetime2.ToString + Chr(39) 
        ' combine filter date+time
        Dim filter_expression = date_filter + " AND " + time_filter
        bs.Filter = filter_expression
    End Sub

    Private Sub Button3_Click( sender As Object,  e As EventArgs) Handles Button3.Click
            bs.Filter = ""
    End Sub
End Class

WindowsApplication1.zip

تم تعديل هذه المشاركة بواسطة samir ibrahim في 3 أكتوبر 2013 في 00:35

Samir Ibrahim

VFP Blog

VB.NET Blog

#11

الله عليك استاذ سمير

 

استاذ ورئيس قسم والله جزاك الله خير

 

وارجو ان تقبلنى تلميذ من تلاميذك

 

 تحياتى

#12

يا هلا. شرفت وما كلفت. المهم انك استفدت

 

بالتوفيق

Samir Ibrahim

VFP Blog

VB.NET Blog

#13

استاذ سمير

فى استفسار

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

 

تظهر مشكلة فى كود    bs.Filter = filter_expression

expression باالتحديد

 

مع العلم انى اضفت كل الادوات الازمة واخذت الاكواد كاملة

اهناك شى لابد من اضافته

 

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

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