vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Erstellen von dynamischen Kontextmen?s - wann immer Sie sie brauchen!  
 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

VB.NET - Ein- und Umsteiger
Schleife nach sql abfrage funktioniert nicht richtg 
Autor: Mctotti
Datum: 23.08.20 18:38

Hallo Leute,
irgendwie funktioniert meine schleife nicht so ganz.
Okay ich versuch euch mal zu erklären worum es überhaupt geht damit ihr euch ein Bild machen könnt.
Also, ich versuch mich gerade an einem Terminplaner, es werden sogenannte Tagesfelder (soviel tage wie der monat hat ) erstellt, und in die tagesfelder kommen "LinkLabels" wo der Benutzer seine Termine reinschreiben kann. Das funktioniert auch super soweit.
Aber das problem darin liegt das er den Termin am selben Tag jeden Monat reinschreibt.
Die Daten kommen aus einer Access Datenbank und werden auch gut eingelesen.
Das ganze läuft bei mir über eine Funktion ab. Ich poste sie mal damit ihr seht wie ich das machen wollte.
Wie gesagt funzt es schon gut, nur mit dem Fehler das der Termin jeden Monat am selben Tag wiedergegeben wird, und nicht nur an dem vorgebenen .
Ich hoffe das ich mich verständlich ausgedrückt habe.
Über eure Hilfe oder Tipps würde ich mich sehr freuen
Übrigens ich arbeite mit VS 2015 Express und Access


Private Sub AnzeigenderTermineimTagesfeld(ByVal StartTagflpNummer As Integer)
 
        Dim StartDatum As DateTime = New Date(aktuellesDatum.Year, _
          aktuellesDatum.Month, 1)
        Dim EndDatum As DateTime = StartDatum.AddMonths(1).AddDays(-1)
 
        Dim sql As String
        sql = $"select * from Termine where t_datum between '" & StartDatum & _
          "' and '" & EndDatum & "' "
 
        Dim dt As DataTable = QueryAsDataTable(sql)
        MsgBox(sql)
 
        For Each row As DataRow In dt.Rows
            Dim Appday As Date = Date.Parse(row("t_datum"))     'hier testen 
            ' wir gerade so rum
            Dim link As New LinkLabel
            link.Tag = row("ID")
            link.Name = $"link{row("ID")}"
            link.Text = row("t_name")
            flpTageslabelliste((Appday.Day - 1) + (StartTagflpNummer - _
              1)).Controls.Add(link)
 
        Next
 
 
    End Sub


Beitrag wurde zuletzt am 23.08.20 um 18:43:01 editiert.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Schleife nach sql abfrage funktioniert nicht richtg 
Autor: Manfred X
Datum: 24.08.20 08:26

Hallo!

Für mich undurchschaubar wegen fehlender Angaben.
Wieso muss das eingelesene Datum geparst werden?
Wird das Datum (String?) richtig erkannt?

Wie wird diese flpTageslabelliste gebildet? deklariert?

Was bedeutet der Parameter StartTagFlpNummer?
Ein falscher Parameter-Wert würde das geschilderte Phänomen
vermutlich erklären.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Schleife nach sql abfrage funktioniert nicht richtg 
Autor: Mctotti
Datum: 24.08.20 09:56

Hallo, das mit dem "Parse" war nur ein versuch von vielen....
Hier der Code wo StartTagflpNummer her kommt.
Aber ich glaube das es an der schleife liegt, die schleife soll aus der Datenbank(Access) mit dem Namen "Organizer" aus der Tabelle "Termine" und Spalte "t_datum" alle Termine anzeigen welche zwischen den beiden Datums liegen. Der SQL Befehl zeigt mir auch an start und enddatum an. Das scheint zu funktionieren.
Aber irgendwie steh ich auf dem Schlauch wegen der Schleife, ich weiss nicht wie ich in der schleife das Datum aus der DB mit den beiden Datums aus dem SQL-Befehl abfragen kann. Gibt es da vielleicht eine bessere Lösung als mit einer For Each Schleife zu arbeiten?

   '###########################################################################
   ' ##########################################################################
   ' ###############
    'Hier werden die Labels ( Die Monatstage ) in die Tage gesetzt, soviele 
    ' Labels( flpTagesLabelliste ) der Monat hat
    ' und Zahlen (vom ersten Tag im Monat (also 1 ) bis ende des Monats ( 
    ' soviel wie der Monat Tage hat )
    '##########################################################################
    ' #########################################################################
    ' #################
 
    Private Sub TagesLabelflp(ByVal StartTagflpNummer As Integer, ByVal _
      KompletteTageDesMonats As Integer)
 
        For Each flp As FlowLayoutPanel In flpTageslabelliste
            flp.Controls.Clear()
            flp.Tag = 0
            flp.BackColor = Color.White
        Next
 
        For i As Integer = 1 To KompletteTageDesMonats
            Dim lbl As New Label
            lbl.Name = $"lblDay{i}"
            lbl.AutoSize = False
            lbl.TextAlign = ContentAlignment.MiddleRight
            lbl.Size = New Size(150, 25)
            lbl.Text = i
            lbl.Font = New Font("Microsoft Sans Serif", 12, FontStyle.Bold)
            lbl.ForeColor = Color.DarkOrchid
            flpTageslabelliste((i - 1) + StartTagflpNummer - 1).Controls.Add( _
              lbl)
 
        Next
    End Sub
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Schleife nach sql abfrage funktioniert nicht richtg 
Autor: Manfred X
Datum: 24.08.20 18:18

Du fragst per SQL-Between ein Zeitintervall über Strings ab?
Ob das korrekt funktioniert, weiss ich nicht.
Wieso ist das in Access kein Date-Typ?
Eventuell musst Du diese Datums-Strings explizit per
Code filtern.
Hänge Deine Datatable an ein Datgridview und schaue
nach, welche Werte in der Tabelle per SQL eingetragen
worden sind.

Deine Funktionsparameter verstehe ich nicht.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Schleife nach sql abfrage funktioniert nicht richtg 
Autor: Mctotti
Datum: 24.08.20 20:03

Hallo Manfred X,

Meine DB besteht aus vier Spalten:
ID=Autowert
t_datum=Datum/Uhrzeit
t_name=Kurzer Text
t_ereignis=Kurzer Text

In der DB habe ich die Spalte t_datum auf Datum/Uhrzeit umgestellt und das Datum wird mit .ToShortDateString gespeichert.


 Private Sub btnSpeichern_Click(sender As Object, e As EventArgs) Handles _
   btnSpeichern.Click
 
        If String.IsNullOrEmpty(txtTerminName.Text) Then      'wird geprüft ob 
        ' das Textfeld leer oder null aufweist
            MsgBox("Name wird benötigt !")              'wenn ja erscheint eine 
            ' Meldung (Messagebox) das ein Name benötigt wird
            Return                                      'Return gibt die 
            ' Anweisung wieder zurück an die Eingabe
        End If
 
        If Bestaetigen("Wollen Sie wirklich Speichern ?") Then
            If TerminID = 0 Then
 
                Dim sql As String
 
                sql = "INSERT INTO Termine(t_datum,t_name,t_ereignis) VALUES (" & _
                  "'" _
                & dtpDatum.Value.ToShortDateString & "','" _
                & txtTerminName.Text & "','" _
                & txtTerminBeschreibung.Text & "')"
 
 
                If SpeichernAendernLoeschen(sql) Then
                    MsgBox("Gespeichert !")
                    Close()
                Else
                    MsgBox("Nicht Gespeichert !")
                End If
            Else
                Dim sql As String
                sql = "UPDATE Termine SET t_datum='" & _
                  dtpDatum.Value.ToShortDateString & "',t_name='" & _
                  txtTerminName.Text & "' ,t_ereignis='" & _
                  txtTerminBeschreibung.Text & "' WHERE ID=" & Val(TerminID)
 
                If SpeichernAendernLoeschen(sql) Then
                    MsgBox("Geändert !")
                    Close()
                Else
                    MsgBox("Nicht Geändert")
                End If
 
            End If
 
        End If
 
    End Sub
Ich habe mal die Speicher Prozedur hier gepostet, Datum wird korrekt gespeichert (Kurzform )
Ich habe auch ein datagridview erstellt und die Daten aus der DB dort einfliessen lassen. Sieht alles gut aus.
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Schleife nach sql abfrage funktioniert nicht richtg 
Autor: Mctotti
Datum: 25.08.20 06:55

Guten Morgen Manfred X,
so ich habe gestern noch ein bischen rum experimentiert, jetzt macht er die monatlichen Wiederholungen nicht mehr, sondern packt alles an den ersten Tag im Monat rein. Aber jetzt macht er alles im richtigen Monat und im richtigen Jahr. Das ist doch schon mal ein Anfang Jetzt nur noch am richtigen Tag dann haben wir es.
ich poste mal wie es im Augenblick ausgelesen wird.
Meiner bescheidenen Meinung nach kann es nur im Abfragen oder an der schleife selbst liegen.
Der Inhalt der Schleife wird korrekt dargestellt.

Private Sub AnzeigenderTermineimTagesfeld(ByVal StartTagflpNummer As Integer)
 
        Dim StartDatum As DateTime = New Date(aktuellesDatum.Year, _
          aktuellesDatum.Month, 1)
        Dim EndDatum As DateTime = StartDatum.AddMonths(1).AddDays(-1)
 
        Dim sql As String
        sql = $"select * from Termine where t_datum between" & _
          "'{StartDatum.ToShortDateString}' and '{EndDatum.ToShortDateString}'"
 
        Dim dt As DataTable = QueryAsDataTable(sql)
 
        For Each row As DataRow In dt.Rows
            Dim Appday As Date
            StartDatum = StartDatum.ToShortDateString
            EndDatum = EndDatum.ToShortDateString
 
            If row("t_datum") >= StartDatum And row("t_datum") <= EndDatum Then
                Dim link As New LinkLabel
                link.Tag = row("ID")
                link.Name = $"link{row("ID")}"
                link.Text = row("t_name")
                AddHandler link.Click, AddressOf TerminDetailsanzeigen
                flpTageslabelliste((Appday.Day - 1) + (StartTagflpNummer - _
                  1)).Controls.Add(link)
 
            End If
 
        Next
 
    End Sub
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Schleife nach sql abfrage funktioniert nicht richtg 
Autor: Mctotti
Datum: 25.08.20 10:24

Hallo Manfred X,
So jetzt hat es geklappt, es funktioniert einwandfrei, die Termine werden am richtigen Tag, im richtigen Monat und im richtigen Jahr so angezeigt, wie sie gespeichert sind.
Vielen Danke für deine Mithilfe und deine Anregungen. Ich stand irgendwie auf dem Schlauch.
Vor allem fand ich gut das du mir nicht irgendein code zur Hilfe gepostest hast sondern mir mit Anregungen geholfen hast. Vielen Dank. Zum Abschluss hab ich dir mal den Code gepostet damit man sieht wie es funzt


  Private Sub AnzeigenderTermineimTagesfeld(ByVal StartTagflpNummer As Integer)
 
        Dim StartDatum As DateTime = New Date(aktuellesDatum.Year, _
          aktuellesDatum.Month, 1)
        Dim EndDatum As DateTime = StartDatum.AddMonths(1).AddDays(-1)
 
        Dim sql As String
 
        sql = $"select * from Termine where t_datum between" & _
          "'{StartDatum.ToShortDateString}' and '{EndDatum.ToShortDateString}'"
 
        Dim dt As DataTable = QueryAsDataTable(sql)
 
        For Each row As DataRow In dt.Rows
            StartDatum = StartDatum.ToShortDateString
            EndDatum = EndDatum.ToShortDateString
 
            If row("t_datum") >= StartDatum And row("t_datum") <= EndDatum Then
                Dim Appday As DateTime = DateTime.Parse(row("t_datum"))
                Dim link As New LinkLabel
                link.Tag = row("ID")
                link.Name = $"link{row("ID")}"
                link.Text = row("t_name")
                AddHandler link.Click, AddressOf TerminDetailsanzeigen
                flpTageslabelliste((Appday.Day - 1) + (StartTagflpNummer - _
                  1)).Controls.Add(link)
 
            End If
 
        Next
 
    End Sub
Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Schleife nach sql abfrage funktioniert nicht richtg 
Autor: effeff
Datum: 25.08.20 12:09

sql = $"select * from Termine where t_datum between" & _
          "'{StartDatum.ToShortDateString}' and '{EndDatum.ToShortDateString}'"
Bei dieser Abfrage lässt Du nur alle Datensätze auswählen, die zwischen zwei Datumsangaben liegen.

If row("t_datum") >= StartDatum And row("t_datum") <= EndDatum Then
Hier fragst Du ab, ob die Daten zwischen zwei Datumsangaben liegen. Das hast Du doch schon oben gemacht. Ist das nicht überflüssig? Die Daten können doch nur im richtigen Bereich liegen.

EALA FREYA FRESENA

Themenbaum einblendenGesamtübersicht  |  Zum Thema  |  Suchen

Re: Schleife nach sql abfrage funktioniert nicht richtg 
Autor: Mctotti
Datum: 26.08.20 07:52

Hallo,

sql = $"select * from Termine where t_datum between" & _
"'{StartDatum.ToShortDateString}' and '{EndDatum.ToShortDateString}'"
Bei dieser Abfrage lässt Du nur alle Datensätze auswählen, die zwischen zwei Datumsangaben liegen.

Da hast du vollkommen Recht

If row("t_datum") >= StartDatum And row("t_datum") <= EndDatum Then
Hier fragst Du ab, ob die Daten zwischen zwei Datumsangaben liegen. Das hast Du doch schon oben gemacht. Ist das nicht überflüssig? Die Daten können doch nur im richtigen Bereich liegen.

Auch dieses ist vollkommen richtig.

Aber wenn ich die Abfrage weglasse funktioniert es nicht.
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