تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
[VB.NET] استفسار :- فرز البيانات على حسب السنوات
#1
السلام عليكم ورحمة الله


عندي قاعدة البيانات 
الخاص بالاعضاء


في اعضاء مسجلين في عام 2006 و 2016 و 2017 و 2018  كمثال

اريد عند العرض اعرض السجل على حسب السنه

ComboBox

تيبل التاريخ متكون من
2004/10/31

2018/01/11

كود :
   Dim com As String = String.Format("select id,CAL ,date ,timek  FROM DB{0} order by date DESC , timek desc", strcallbk)
       Using Adpt As New SQLiteDataAdapter(com, con)
           Dim ds As New DataSet()

           Adpt.Fill(ds, String.Format("DB{0}", strcallbk))

           DataGridView1.DataSource = ds.Tables(String.Format("DB{0}", strcallbk)).DefaultView
       End Using
       With DataGridView1
           .RowHeadersVisible = False
           .Columns(0).Visible = False
           .Columns(1).HeaderCell.Value = "Call Sign"
           .Columns(2).HeaderCell.Value = "Date"
           .Columns(3).HeaderCell.Value = "Time"

       End With


اتمنى الفكره وصلت بارك الله فيكم
الرد }}
تم الشكر بواسطة:
#2
لم تصل الفكرة بعد اخى الحبيب

هل ما تقصده انك تريد عرض السنوات فقط من عمود التاريخ

فقط الكود التالى كمثال لكيفية عرض التاريخ...
كود :
       ' ضح قئمة الاستعلام لعمود التاريخ بدلاً من التاريخ
       ' Dim date_ As DateTime = ds(0)(date)
       Dim date_ As DateTime = #05-08-2018#
       ' بعد ذلك استخدم التالى
       ' date_.Year()

تحياتى لك
{ وَقُل رَّبِّ زِدْنِي عِلْمًا }
[ كن على يقين من اعمالنا نخطئ ومن اخطائنا نتعلم ولذلك لا شي مستحيل ]

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


 شرح كيفية عمل قاعدة بيانات تعمل على اكثر من جهاز على الشبكة الداخلية
الرد }}
تم الشكر بواسطة: dubai.eig , سعود
#3
(05-07-18, 01:48 PM)elgokr كتب :
لم تصل الفكرة بعد اخى الحبيب

هل ما تقصده انك تريد عرض السنوات فقط من عمود التاريخ

فقط الكود التالى كمثال لكيفية عرض التاريخ...
كود :
       ' ضح قئمة الاستعلام لعمود التاريخ بدلاً من التاريخ
       ' Dim date_ As DateTime = ds(0)(date)
       Dim date_ As DateTime = #05-08-2018#
       ' بعد ذلك استخدم التالى
       ' date_.Year()

تحياتى لك


تسلم على الرد استاذي الكريم

لا المقصود اني اطلع فقط المعلومات المدخله والتي في عام 2018  او 2017

مثلا
في القاعدة التيبل الخاص بالتاريخ 
date                 

2018/01/11
2017/01/11
2018/01/11
2014/01/11
2018/01/11
   

اانا اطلب اضهار فقط البيانات المدخله بسنه 2018



كمثال

select id,CAL ,date ,timek  FROM DB{0} order by date 2018 DESC 

وطبعا تغيير السنه عن طريق 
ComboBox

موجود في الفورم
الرد }}
تم الشكر بواسطة: سعود
#4
فى هذه الحالة
ستجعل كود الاستعلام بهذا الشكل
كود :
"SELECT * FROM nametable WHERE date Like '%" & ComboBox1.Text & "%'"

كود الاستعلام كمثال 
قم بالتعديل على المسميات

وحيث ان ComboBox ستكون قائمة تحتوى على ارقام السنوات

تحياتى لك
وتمنياتى لك التوفيق
{ وَقُل رَّبِّ زِدْنِي عِلْمًا }
[ كن على يقين من اعمالنا نخطئ ومن اخطائنا نتعلم ولذلك لا شي مستحيل ]

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


 شرح كيفية عمل قاعدة بيانات تعمل على اكثر من جهاز على الشبكة الداخلية
الرد }}
#5
شوف اخي الكريم لا اريد الاستفسار لكن اذكرك بالطريقة التالية لاستخلاص السنة من التاريخ الطويل
PHP كود :
TextBox2.Text CDate(TextBox1.Text).Year 
بعد ان تحصل على التواريخ من الجدول  طبق الكود cdate(7/5/2017).year

PHP كود :
Public Class Form1
    Dim str 
As String "provider=microsoft.ace.oledb.12.0;data source=db.accdb"
 
   Dim con As OleDb.OleDbConnection
    Dim da 
As OleDb.OleDbDataAdapter
    Dim cm 
As OleDb.OleDbCommandBuilder
    Dim dta 
As DataTable
    Dim all_date 
As New List(Of String)
 
   Private Sub gd()
 
       con = New OleDb.OleDbConnection(str)
 
       Dim sql As String "select * from tb"
 
       da = New OleDb.OleDbDataAdapter(sqlcon)
 
       cm = New OleDb.OleDbCommandBuilder(da)
 
       dta = New DataTable
        da
.Fill(dta)
 
       If dta.Rows.Count 0 Then
            For r 
As Integer 0 To dta.Rows.Count 1
                Dim yr 
As String CDate(dta.Rows(r).Item(2)).Year
                all_date
.Add(yr)
 
           Next
        End 
If
 
   End Sub
  

    Private Sub Button1_Click
(sender As System.ObjectAs System.EventArgsHandles Button1.Click
        Dim row 
As DataRow dta.NewRow
        row
(1) = tname.Text
        row
(2) = CDate(tdate.Text).ToShortDateString
        dta
.Rows.Add(row)
 
       da.Update(dta)
 
       d.Refresh()
 
   End Sub

    Private Sub c_SelectedIndexChanged
(sender As System.ObjectAs System.EventArgsHandles c.SelectedIndexChanged
        If c
.Items.Count 0 Then Exit Sub
        d
.Rows.Clear()
 
       For r As Integer 0 To all_date.Count 1
            Dim rowdate 
As String all_date(r)
 
           If rowdate c.Text Then
                d
.Rows.Add(dta.Rows(r)(1), CDate(dta.Rows(r)(2)).ToShortDateString)
 
           End If
 
       Next
    End Sub
    Private Sub Form1_Load
(sender As System.ObjectAs System.EventArgsHandles MyBase.Load
        gd
()
 
   End Sub
End 
Class 

الكومبوبكس عباته يدويا اثناء التصميم
2008
2015
2017
و هكذا

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


الملفات المرفقة
.zip   GettingSomeDate.zip (الحجم : 75.52 ك ب / التحميلات : 15)
=====* التوقيع *======
=================
الرد }}
تم الشكر بواسطة: عبد العزيز البسكري , elgokr , dubai.eig
#6
(05-07-18, 02:17 PM)elgokr كتب :
فى هذه الحالة
ستجعل كود الاستعلام بهذا الشكل
كود :
"SELECT * FROM nametable WHERE date Like '%" & ComboBox1.Text & "%'"

كود الاستعلام كمثال 
قم بالتعديل على المسميات

وحيث ان ComboBox ستكون قائمة تحتوى على ارقام السنوات

تحياتى لك
وتمنياتى لك التوفيق


احسنت بارك الله فيك

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

(05-07-18, 02:44 PM)سعود كتب : شوف اخي الكريم لا اريد الاستفسار لكن اذكرك بالطريقة التالية لاستخلاص السنة من التاريخ الطويل
PHP كود :
TextBox2.Text CDate(TextBox1.Text).Year 
بعد ان تحصل على التواريخ من الجدول  طبق الكود cdate(7/5/2017).year

PHP كود :
Public Class Form1
    Dim str 
As String "provider=microsoft.ace.oledb.12.0;data source=db.accdb"
 
   Dim con As OleDb.OleDbConnection
    Dim da 
As OleDb.OleDbDataAdapter
    Dim cm 
As OleDb.OleDbCommandBuilder
    Dim dta 
As DataTable
    Dim all_date 
As New List(Of String)
 
   Private Sub gd()
 
       con = New OleDb.OleDbConnection(str)
 
       Dim sql As String "select * from tb"
 
       da = New OleDb.OleDbDataAdapter(sqlcon)
 
       cm = New OleDb.OleDbCommandBuilder(da)
 
       dta = New DataTable
        da
.Fill(dta)
 
       If dta.Rows.Count 0 Then
            For r 
As Integer 0 To dta.Rows.Count 1
                Dim yr 
As String CDate(dta.Rows(r).Item(2)).Year
                all_date
.Add(yr)
 
           Next
        End 
If
 
   End Sub
  

    Private Sub Button1_Click
(sender As System.ObjectAs System.EventArgsHandles Button1.Click
        Dim row 
As DataRow dta.NewRow
        row
(1) = tname.Text
        row
(2) = CDate(tdate.Text).ToShortDateString
        dta
.Rows.Add(row)
 
       da.Update(dta)
 
       d.Refresh()
 
   End Sub

    Private Sub c_SelectedIndexChanged
(sender As System.ObjectAs System.EventArgsHandles c.SelectedIndexChanged
        If c
.Items.Count 0 Then Exit Sub
        d
.Rows.Clear()
 
       For r As Integer 0 To all_date.Count 1
            Dim rowdate 
As String all_date(r)
 
           If rowdate c.Text Then
                d
.Rows.Add(dta.Rows(r)(1), CDate(dta.Rows(r)(2)).ToShortDateString)
 
           End If
 
       Next
    End Sub
    Private Sub Form1_Load
(sender As System.ObjectAs System.EventArgsHandles MyBase.Load
        gd
()
 
   End Sub
End 
Class 

الكومبوبكس عباته يدويا اثناء التصميم
2008
2015
2017
و هكذا

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



احسنت بارك الله فيك 

الكود يعمل بشكل جيد وهو المطلوب 
ط
بس هناك تغيير صغير

انا اعمل على 

ListView  والكود الخاص بك ب  DataGridView

وهذا الكود الخاص بي

كود :
   Sub fill()
       Dim con As New SQLiteConnection(String.Format("Data Source= C:\DB{0}.s3db", strbk))

       lst1.FullRowSelect = True
       Me.lbl_start.Text = "0 / 0"
       Dim da As New SQLiteDataAdapter("SELECT (SELECT COUNT(*) FROM [DB" & strbk & "] t WHERE [DB" & strbk & "].id >= t.id) AS [Serial], * FROM   [DB" & strbk & "]   ", con)
       lst1.Items.Clear()
       dt.Clear()
       If da.Fill(dt) > 0 Then
           totalpages = Math.Ceiling(dt.Rows.Count / perpage)
           viewpage(page)
       End If


   End Sub



 Private Sub Form_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load

       fill()
       Application.DoEvents()


   End Sub


محتاج لمسه منك ليضبط بارك الله فيك

وشكرا عل مجهودك
الرد }}
تم الشكر بواسطة: elgokr
#7
إقتباس :محتاج لمسه منك ليضبط بارك الله فيك

وشكرا عل مجهودك
عاد لو تدري ان الـListview ما اعرفهاSmile
و مادام الفكرة وصلت  فالحمدلله والحمدلله على كل حال.
ان شاء الله ان الاخوان يساعدون بهذا  الخصوص.
=====* التوقيع *======
=================
الرد }}
تم الشكر بواسطة: dubai.eig
#8
(05-07-18, 07:52 PM)سعود كتب :
إقتباس :محتاج لمسه منك ليضبط بارك الله فيك

وشكرا عل مجهودك
عاد لو تدري ان الـListview ما اعرفهاSmile
و مادام الفكرة وصلت  فالحمدلله والحمدلله على كل حال.
ان شاء الله ان الاخوان يساعدون بهذا  الخصوص.



ههههه تسلم انا قاعد احاول وان شاءالله يضبط او احصل حد يكمل ويساعدني

على العموم مجهودك على عيني وراسي تسلم والله  Rolleyes
الرد }}
تم الشكر بواسطة: سعود , elgokr
#9
الان انا اصبحت فى توهان لا اعلم
اين انت متوقف وماذا تريد بضبط

بناءا على ما فهمته مسبقاً قمت بالرد عليه
بكل طريقة فد فهمت فيها ما تريده

فاذا كلا من الردود السابقة ليست الحل
فوضح ما تريده تماماً حتى اقوم بكتابة الكود طبقاً لما تريد

تحياتى لك
{ وَقُل رَّبِّ زِدْنِي عِلْمًا }
[ كن على يقين من اعمالنا نخطئ ومن اخطائنا نتعلم ولذلك لا شي مستحيل ]

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


 شرح كيفية عمل قاعدة بيانات تعمل على اكثر من جهاز على الشبكة الداخلية
الرد }}
تم الشكر بواسطة: سعود , dubai.eig , dubai.eig
#10
(05-07-18, 10:32 PM)elgokr كتب :
الان انا اصبحت فى توهان لا اعلم
اين انت متوقف وماذا تريد بضبط

بناءا على ما فهمته مسبقاً قمت بالرد عليه
بكل طريقة فد فهمت فيها ما تريده

فاذا كلا من الردود السابقة ليست الحل
فوضح ما تريده تماماً حتى اقوم بكتابة الكود طبقاً لما تريد

تحياتى لك

مرحبا 

الموضوع الان الكود الخاص بالاخ والاستاذ سعود شغال تمام بس شغال على 
DataGridView

وانا الكود الخاص بي يعتمد على
الـListview 

محتاج تعديل في الكود فقط 

هذا كود الاستاذ سعود


كود :
Public Class Form1
   Dim str As String = "provider=microsoft.ace.oledb.12.0;data source=db.accdb"
   Dim con As OleDb.OleDbConnection
   Dim da As OleDb.OleDbDataAdapter
   Dim cm As OleDb.OleDbCommandBuilder
   Dim dta As DataTable
   Dim all_date As New List(Of String)
   Private Sub gd()
       con = New OleDb.OleDbConnection(str)
       Dim sql As String = "select * from tb"
       da = New OleDb.OleDbDataAdapter(sql, con)
       cm = New OleDb.OleDbCommandBuilder(da)
       dta = New DataTable
       da.Fill(dta)
       If dta.Rows.Count > 0 Then
           For r As Integer = 0 To dta.Rows.Count - 1
               Dim yr As String = CDate(dta.Rows(r).Item(2)).Year
               all_date.Add(yr)
           Next
       End If
   End Sub
 

   Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
       Dim row As DataRow = dta.NewRow
       row(1) = tname.Text
       row(2) = CDate(tdate.Text).ToShortDateString
       dta.Rows.Add(row)
       da.Update(dta)
       d.Refresh()
   End Sub

   Private Sub c_SelectedIndexChanged(sender As System.Object, e As System.EventArgs) Handles c.SelectedIndexChanged
       If c.Items.Count = 0 Then Exit Sub
       d.Rows.Clear()
       For r As Integer = 0 To all_date.Count - 1
           Dim rowdate As String = all_date(r)
           If rowdate = c.Text Then
               d.Rows.Add(dta.Rows(r)(1), CDate(dta.Rows(r)(2)).ToShortDateString)
           End If
       Next
   End Sub
   Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
       gd()
   End Sub
End Class



وهذا الكود الخاص بي


كود :
Public Class Form1
Sub fill()
      Dim con As New SQLiteConnection(String.Format("Data Source= C:\DB{0}.s3db", strbk))

      lst1.FullRowSelect = True
      Me.lbl_start.Text = "0 / 0"
      Dim da As New SQLiteDataAdapter("SELECT (SELECT COUNT(*) FROM [DB" & strbk & "] t WHERE [DB" & strbk & "].id >= t.id) AS [Serial], * FROM   [DB" & strbk & "]   ", con)
      lst1.Items.Clear()
      dt.Clear()
      If da.Fill(dt) > 0 Then
          totalpages = Math.Ceiling(dt.Rows.Count / perpage)
          viewpage(page)
      End If


  End Sub



Private Sub Form_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load

      fill()
      Application.DoEvents()


  End Sub

End Class

Rolleyes
الرد }}
تم الشكر بواسطة:



التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم