Datum Ausfiltern mit SQL-Code

  • VB6

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von ProSoft.

    Datum Ausfiltern mit SQL-Code

    Hallo Leute.
    ich möchte gerne Das Datum aus meiner Datenbank herauslesen, aber der tut leider nicht das, was ich ihm sage. Für die Filterung habe ich folgenden Quellcode eingetragen:



    Private Sub Command1_Click()

    Dim SQL As String
    Dim eintrag As String

    lstReWaren.Clear

    Form1.lblFDatumVomA.Caption = mskDatumVom.Text
    Form1.lblFDatumBisA.Caption = mskDatumBis.Text
    Form1.lblFKundenA.Caption = lstKunden.Text

    lblDatumVomAu.Caption = Form1.lblFDatumVomA.Caption
    lblDatumBisAu.Caption = Form1.lblFDatumBisA.Caption
    lblKundenAu.Caption = Form1.lblFKundenA.Caption

    SQL = "SELECT Kunden.[Kunden-ID], Kunden.Filiale, Rechnung.[Rechnung-ID], RechnungKonditionen.Menge, Retoure.[Retour-ID], Retoure.Menge, Rechnung.Datum FROM ((Kunden INNER JOIN Rechnung ON Kunden.[Kunden-ID] = Rechnung.[Kunden-ID]) INNER JOIN (Konditionen INNER JOIN RechnungKonditionen ON Konditionen.[Konditionen-ID] = RechnungKonditionen.[Konditionen-ID]) ON Rechnung.[Rechnung-ID] = RechnungKonditionen.[Rechnung-ID]) INNER JOIN Retoure ON Rechnung.[Rechnung-ID] = Retoure.[Rechnung-ID] WHERE Datumvon BETWEEN " & Format$(StatistikAnzeige.lblDatumVomAu.Caption, "\#dd\/mm\/yyyy\#") & " AND " & Format$(StatistikAnzeige.lblDatumBisAu.Caption, "\#dd\/mm\/yyyy\#") & " GROUP BY Kunden.[Kunden-ID], Kunden.Filiale, Rechnung.[Rechnung-ID], RechnungKonditionen.Menge, Retoure.[Retour-ID], Retoure.Menge, Rechnung.Datum;"


    adcRetoure.RecordSource = SQL
    adcRetoure.Recordset.MoveFirst
    While Not adcRetoure.Recordset.EOF
    eintrag = adcRetoure.Recordset.Fields("Menge").Value
    lstReWaren.AddItem eintrag
    adcRetoure.Recordset.MoveNext
    Wend
    End Sub



    Jetzt sollte er eigentlich, von der LABEL das Datum auslesen, in die Abfrage hineinstecken und dann das Datum suchen und mir in meine LISTBOX stecken.
    Aber er macht leider nur dass er mir alle Felder die "Menge" enthalten, ausliest. Aber es sollten ja nur die ausgelesen werden, die an einem bestimmten Datum zurückgekommen sind... Was könnt ich da nur falsch machen?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ProSoft“ ()

    Hi,

    Die Format Anweisung fürs Datum ist ein wenig zu kompliziert formuliert.

    probiers mal damit.

    <pre> ... WHERE Datumvon BETWEEN " & Format$(StatistikAnzeige.lblDatumVomAu.Caption, "yyyymmdd") &
    " AND " & Format$(StatistikAnzeige.lblDatumBisAu.Caption, "yyyymmdd") & " ... </pre>
    Begründung: Normalerweise werden Datumsangaben in SQL-Anweisungen und Rückgaben Rückwärts
    ausgegeben. Wenn so ein Wert an eine VB-Date Variable übergeben wird, dreht VB das um. Allerdings
    kann man VB-Date Variablen nicht direkt als Parameter in SQL Anweisungen verwenden.

    Viel Spass ...

    LaMa5.

    P.S. <font size="1"> Den restlichen SQL String habe ich mir nicht angesehen!!! </font>
    Die Wissenschaft wird nie ein besseres Kommunikationssystem in den Büros erfinden können als die Kaffeepause.
    (Autor: Earl Wilson, amerik. Schriftsteller)

    https://www.serviceteam-md.de
    Danke für deinen Tipp.
    Aber anscheinend übernimmt er das angegebene Datum zwar in dem Abschnitt
    ( WHERE Datumvon BETWEEN " & Format$(StatistikAnzeige.lblDatumVomAu.Caption, "yyyymmdd") & " AND " & Format$(StatistikAnzeige.lblDatumBisAu.Caption, "#yyyymmdd#") & " </font> ) - Also lblDatumVomAu.Caption ergiebt, wie eingegeben, 04.12.2003 und lblDatumBisAu.Caption, wie angegeben, 05.12.2003 - Aber dann dürfte er mir von der Menge in der Tabelle nur jene auslesen, die von dem Datum sind und eben nicht die Menge vom 04.11.2004. Ich kenne mich zwar noch nicht all zu lange mit Access und VB aus, aber allen Anschein nach ignoriert er mir die angegebenen Werte.
    Hi,

    Ich hab mir noch mal deinen SQL-String vorgenommen (den ganzen). So ganz blicke ich da
    nicht durch. Wenn ich das richtig sehe sind das mehrere Tabellen die du abrufst. So wie es aussieht
    wurde der SQL-String von MS-Query generiert ?!Bisher habe ich diese Problematik immer
    folgendermassen gelöst:

    SQL= "SELECT * FROM tabelle1,tabelle2 WHERE tabelle1.feld1 = tabelle2.feld1 AND
    tabelle1.feld2 >=" & format(text1,"yyyymmdd") & "AND
    tabelle1.feld2 <=" & format(text2,"yyyymmdd") & "ORDER BY tabelle1.feld2"

    Erklärung:
    SELECT * : selektiere alle Felder
    FROM tab.. :aus Tabelle1 und Tabelle2
    WHERE tabelle1.feld1=tabelle2.feld1: in denen feld1 aus tabelle1 gleich dem feld1 aus tabelle2 ist
    AND tabelle1.feld2 >= ... : und feld2 aus tabelle1 grösser oder gleich dem datum int text1
    AND tabelle1.feld2 <= ... : und feld2 aus tabelle1 kleiner gleich datum in text2
    ORDER BY tab... : und sortiere es nach Tabelle1.feld2 (Datum)

    Tabelle1.Feld1 ist z.B. KundenNr.
    Tabelle1.Feld2 ist z.B. Datum
    Tabelle2.Feld1 ist z.B. auch die KdNr (Zuordnung muss EinEindeutig sein!!!)
    Text1 ist Datum Von
    Text2 ist Datum Bis

    Ich hoffe das war jetzt nicht zu kompliziert erklärt. Ich vermute die Fehlerquelle in dem genauen Syntax des
    FROM Statements (INNERJOIN) oder des BETWEEN Statements. Diese beiden sind mir nicht geläufig.

    bye...

    LaMa5.
    Die Wissenschaft wird nie ein besseres Kommunikationssystem in den Büros erfinden können als die Kaffeepause.
    (Autor: Earl Wilson, amerik. Schriftsteller)

    https://www.serviceteam-md.de
    Ja, da hast du nicht ganz unrecht. Ich habe in meiner Access Tabelle um die 20 Tabellen javascript:smilie('8o') und ich habe sie alle in die BCNF gesetzt (falls dir das nix sagen sollte BCNF = Boyce Codd Normalform)
    Das bedeutet: das jede Determinante der Relation ein Kandidatenschlüssel ist.
    Deswegen ist der Code nicht ganz der leichteste zu verstehn. Danke nochmals.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ProSoft“ ()