| |
ADO.NET / DatenbankenSQL 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 | |
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 | |
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. | |
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. | |
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. | |
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 | |
| 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 |
|
|
TOP! Unser Nr. 1
Neu! sevDataGrid 3.0
Mehrspaltige Listen, mit oder ohne DB-Anbindung. Autom. Sortierung, Editieren von Spalteninhalten oder das interaktive Hinzufügen von Datenzeilen sind ebenso möglich wie das Erstellen eines Web-Reports. Weitere InfosTipp des Monats Access-Tools Vol.1
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|