vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
vb@rchiv Offline-Reader - exklusiv auf der vb@rchiv CD Vol.4  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2024
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

ADO.NET / Datenbanken
SQL AccessDatenbank Between 2 Datumsangaben 
Autor: Bloing
Datum: 14.02.18 10:24

Hallo zusammen!
Ich habe ein kleines Problem an dem ich mir schon eine Zeit lang die Zähne ausbeiße.
Meinen Wissensschatz würde ich eher in Richtung Hobby-Gelegenheits-Programmierer einstufen, deshalb die Bitte um Nachsicht wenn iwas im Code verwirren könnte

In meiner Access-Datenbank habe ich diverse Felder, unter anderem "Termin" welches ein Datum enthält und auch so Formatiert ist (Datum, kurz)

In VB.net habe ich eine Form mit 2 DateTimePickern, ein DGV und nen flotten Button.
Mein Ziel war es einen Zeitraum mit den beiden Pickern auszuwählen und die Ergebnisse im DGV anzuzeigen.

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        DateTimePicker1.Format = DateTimePickerFormat.Custom
        DateTimePicker1.CustomFormat = "dd/MM/yyyy"
 
        DateTimePicker2.Format = DateTimePickerFormat.Custom
        DateTimePicker2.CustomFormat = "dd/MM/yyyy"
End Sub
 
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles _
  Button1.Click
 
        TextBox4.Text = DateTimePicker1.Text
        TextBox5.Text = DateTimePicker2.Text
 
SQLstr = ("SELECT Feld1, Feld2, Feld3, Feld4, Termin FROM Tabelle1 WHERE (" & _
  "Termin BETWEEN #" & TextBox4.Text & "# And #" & TextBox5.Text & "#)")
 
            Mycn = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data" & _
              "Source=" & sPfad & DbPw)
 
            Using cmd = New OleDbCommand(SQLstr, Mycn)
                Mycn.Open()
 
                Dim reader As OleDbDataReader = cmd.ExecuteReader()
                Dim dt = New DataTable
                dt.Load(reader)
 
                DataGridView1.DataSource = dt
                DataGridView1.Refresh()
                DataGridView1.ClearSelection()
                reader.Close()
                Mycn.Close()
            End Using
End Sub
So befülle ich mein DGV - funktioniert auch soweit. Wenn ich allerdings mit den Pickern ein bissl rumspiele und verschiedene Daten versuche, füllt er mir manchmal das DGV mit Terminen die außerhalb des gewählten Zeitraums liegen.
Wähle ich zB 07.02.2018 - 14.02.2018 passt das Startdatum, aber es werden alle Termine bis Ende der Datenbank ausgegeben.
Ändere ich dann nur das Startdatum zum 31.01.2018, klick auf den Button, wird es richtig angezeigt: Es erscheinen alle Termine vom 31.01.2018 bis zum 14.02.2018

Was mich auch wundert: In der Accessdatenbank stehen die Termine mit zB 05.02.2018 also Punkten als Trennzeichen. Finden konnte ich allerdings nur etwas wenn ich den DatumsPicker auf 05/02/2018 umstelle.
Im DGV werden die Termine auch ganz normal mit Punkten angezeigt.

Ich bin da leider mit meinem Latein am Ende und hoffe, dass mir hier wer weiterhelfen kann.

LG,
Bloing
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: SQL AccessDatenbank Between 2 Datumsangaben 
Autor: Manfred X
Datum: 14.02.18 15:36

Hallo!

Das liegt vielleicht an der Formatierung der Datumsangaben (InvariantCulture).
Schau Dir mal das Dates-Beispiel an:
https://www.w3schools.com/sql/sql_between.asp
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: SQL AccessDatenbank Between 2 Datumsangaben 
Autor: effeff
Datum: 14.02.18 17:35

Und wenn Du als Format mal "MM/dd/yyyy" versuchst?

Dabei würde ich das DateTimePicker-Element aber nicht vom Format her verdrehen, sondern den Wert erst in einer Variablen entsprechend formatieren, die ich dann in das SQL-Statement mit einbauen würde. Das garantiert, dass Dein DateTimePicker eine "normale" Datumsanzeige hat...

Dim val1 As String=Format(DateTimePicker1.Value.Date, "MM/dd/yyyy")
Dim val2 As String=Format(DateTimePicker2.Value.Date, "MM/dd/yyyy"
SQLstr = ("SELECT Feld1, Feld2, Feld3, Feld4, Termin FROM Tabelle1 WHERE (" & _
"Termin BETWEEN #" & val1 & "# And #" & val2 & "#)")

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: SQL AccessDatenbank Between 2 Datumsangaben 
Autor: Bloing
Datum: 15.02.18 09:43

aaaah das wars - danke @effeff
allerdings funktioniert das mit dem format nicht ganz richtig :/

 Dim val1 As String = Format(DateTimePicker1.Value.Date, "MM/dd/yyyy")
 MsgBox(val1)
wenn ich das jezt mal eben so ausprobiere kommt monat.tag.jahr anstatt monat/tag/jahr

ich hab mir jetzt einfach noch zwei versteckte datetimepicker erstellt die ich dann mit customformat ändere und das datum weiter gebe. ist denke ich nicht die sauberste lösung, aber zumindest funktioniert es erstmal
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: SQL AccessDatenbank Between 2 Datumsangaben 
Autor: effeff
Datum: 16.02.18 11:21

Dim dtDatum1 As Date = DateTimePicker1.Value.Date
 
Dim val1 As String=Format(dtDatum1, "MM") & "/" & Format(dtDatum1, "dd") & "/" _
  & Format(dtDatum1, "yyyy")

EALA FREYA FRESENA

Beitrag wurde zuletzt am 16.02.18 um 11:22:06 editiert.

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: SQL AccessDatenbank Between 2 Datumsangaben 
Autor: JangoF
Datum: 16.02.18 17:45

Einfach mit der Parameterfunktion arbeiten, dann löst sich das Formatierungsproblem von alleine.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: SQL AccessDatenbank Between 2 Datumsangaben 
Autor: JangoF
Datum: 16.02.18 18:03

Sieht dann etwa so aus ...

Dim SQLstr as String = "SELECT Feld1, Feld2, Feld3, Feld4, Termin FROM Tabelle1" & _
  "WHERE (Termin BETWEEN ? And ?)"
 
Mycn = New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data" & _
              "Source=" & sPfad & DbPw)
 
    Using cmd = New OleDbCommand(SQLstr, Mycn)
	With cmd.Parameters
               .Add("von", Data.OleDb.OleDbType.Date, 15).Value = _
                 DateTimePicker1.Value
               .Add("bis", Data.OleDb.OleDbType.Date, 15).Value = _
               DateTimePicker2.Value
	End With
        Mycn.Open()
 
       '...
        Mycn.Close()
    End Using
Damit ist kein Formatierungsgefrickel nötig.

Beitrag wurde zuletzt am 16.02.18 um 18:05:13 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: SQL AccessDatenbank Between 2 Datumsangaben 
Autor: Bloing
Datum: 19.02.18 08:34

guten morgen zusammen

vielen dank euch beiden effeff & JangoF!

die parameterfunktion werde ich auf jeden fall mal versuchen - das sieht richtig gut aus.
danke hier auch nochmal für das beispiel, sowas finde ich für mich immer super hilfreich und kann darauf aufbauen

LG,
Bloing
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2024 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel