2010-02-23 3 views
2

J'ai une table qui a deux colonnes de temps. L'un est un temps de connexion, l'heure de déconnexion. Je voudrais pouvoir filtrer entre les deux, fondamentalement plus grand que le minimum choisi et moins que le maximum choisi. J'utilise un calendrier mensuel pour me donner le temps mais ça ne fonctionne pas correctement. De là, je voudrais ajouter les 4 colonnes de la table à un gridview. La date de la DB est le format suivant:Filtrage SQL par intervalles de temps corrects dans vb.net

2/23/2010 11:17:01 AM

Je sais comment obtenir des éléments individuels de la table, ou une colonne, mais les lignes non entières.

Donc je suppose que j'ai 2 problèmes, obtenir le filtre pour le SQL correct puis lier les résultats à une table.

Voici mon code à ce jour:

Dim cn As OleDbConnection 
    Dim cmd As OleDbCommand 
    Dim str As String 
    Dim dr As OleDbDataReader 
    Dim date1 As Date 
    Dim date2 As Date 


    If (Not SubmitNewToDB(session)) Then 
     MsgBox("error") 
    End If 
    Try 
     cn = New OleDbConnection("Provider=microsoft.Jet.OLEDB.4.0;Data Source=G:\Sean\BMSBonder3_0.mdb;") 
     cn.Open() 
     str = "Select BonderIdentifier, UserName, Login, Logout From [Session] Where (Login < " & MonthCalendar1.SelectionEnd _ 
      & " AND Logout > " & MonthCalendar1.SelectionStart & ") AND BonderIdentifier = " & session.bonderIdentifier 

     cmd = New OleDbCommand(str, cn) 
     dr = cmd.ExecuteReader 

     While dr.Read() 
      If dr.Item(0).ToString <> "" Then 
       DataGridView1.Rows.Add(dr.Item(0)) 
      End If 
     End While 
     dr.Close() 
     cn.Close() 
    Catch ex As Exception 
     MsgBox(ex.Message) 
    End Try 

EDIT

SLaks a répondu à la plupart de ma question, un problème demeure. J'ai besoin de comprendre comment faire pour que le calendrier du mois puisse sélectionner seulement un jour et retourner les valeurs de ce jour. On dirait que le temps est un problème car il est dans la base de données comme indiqué ci-dessus. Il ne suffit pas de comparer les dates.

Vous ne savez pas comment régler la date pour inclure l'heure.

Répondre

2

Vous devez utiliser les paramètres, comme ceci:

str = "Select BonderIdentifier, UserName, Login, Logout From [Session] Where Login >= ? AND Login <= ? AND BonderIdentifier = ?" 

cmd = New OleDbCommand(str, cn) 
cmd.Parameters.AddWithValue("Start", MonthCalendar1.SelectionStart 
cmd.Parameters.AddWithValue("End", MonthCalendar1.SelectionEnd) 
cmd.Parameters.AddWithValue("BID", session.bonderIdentifier) 

Pour ajouter des valeurs pour les quatre colonnes, vous pouvez écrire

DataGridView1.Rows.Add(dr.Item(0), dr.Item(1), dr.Item(2), dr.Item(3)) 
+0

besoins OleDb commandés? pour les espaces réservés de paramètres plutôt que les paramètres @ nommés. –

+0

Merci, mais mon filtre ne fonctionne toujours pas correctement. –

+1

J'ai édité la réponse; Essayez-le maintenant. – SLaks

Questions connexes