Fehler bei SELECT-Anweisung in Access-Datenbank

  • VB.NET
  • .NET (FX) 4.5–4.8

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

    Fehler bei SELECT-Anweisung in Access-Datenbank

    Hallo Zusammen

    Ich möchte vorab kurz erwähnen wie hilfreich dieses Forum ist. Konnte bereits einige Probleme durch euch lösen.

    Ich habe ein Problem beim Absetzten eine SELECT-Anweisung in einer Access-Datenbank.

    Ich arbeite mit Visual Studio Professional 2013 sowie Microsoft Office Access 2013 (beide 64-Bit).

    Zur Erleichterung habe ich eine neue Abfrage Mithilfe des Assistenten von Access erstellt und anschliessend den SQL-String in mein Programm kopiert.
    Anbei das komplette Modul:

    VB.NET-Quellcode

    1. Module Datenbanksteuerung
    2. Public OLECon As New OleDb.OleDbConnection
    3. Public OLEConStr As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & My.Settings.Datenbank & ";"
    4. Public Function Rechnungsliste() As DataSet
    5. Try
    6. Dim OLEAdt As New OleDb.OleDbDataAdapter
    7. Dim OLEds As New DataSet
    8.  
    9. OLECon.ConnectionString = OLEConStr
    10. Dim CmdStr As String = "SELECT Rechnungen.Rechnungsnummer, Kunden.Vorname, Kunden.Nachname, Fahrzeuge.Marke, Fahrzeuge.Typ, Rechnungen.Erstelldatum, Sum(Zeilen.Betrag) AS Betrag " & _
    11. "FROM ((Kunden INNER JOIN Fahrzeuge ON Kunden.ID = Fahrzeuge.KundenID) INNER JOIN Rechnungen ON (Kunden.ID = Rechnungen.KundenID) AND (Fahrzeuge.ID = Rechnungen.FahrzeugID)) INNER JOIN Zeilen ON Rechnungen.ID = Zeilen.RechnungsID " & _
    12. "GROUP BY Rechnungen.Rechnungsnummer, Kunden.Vorname, Kunden.Nachname, Fahrzeuge.Marke, Fahrzeuge.Typ, Rechnungen.Erstelldatum"
    13. OLECon.Open()
    14. OLEAdt = New OleDb.OleDbDataAdapter(CmdStr, OLECon)
    15. OLEAdt.Fill(OLEds)
    16. Return OLEds
    17. Catch ex As Exception
    18. MsgBox(ex.Message)
    19. Return New DataSet
    20. Finally
    21. OLECon.Close()
    22. End Try
    23. End Function
    24. End Module


    Beim Debuggen der Anwendung erschein nach Aufruf der Funktion folgende Fehlermeldung:
    "Für mindestens einen erforderlichen Parameter wurde kein Wert angegeben."

    Ich starr nun seit einigen Stunden auf diesen String und kann den Fehler nicht finden. Ich hoffe Ihr könnt mir helfen.

    Vielen Dank für eure Mühe.
    Du kannst das Fehlerfenster erweitern und schauen, ob du bei InnerException erweiterte Information erhältst.
    Aber es liegt vermutlich tatsächlich am SQL-Command.
    Wenn der Befehl in Access 1:1 läuft, wäre das jedoch einigermassen merkwürdig.

    Versuch mal bei ​ON (Kunden.ID = Rechnungen.KundenID) AND (Fahrzeuge.ID = Rechnungen.FahrzeugID)) die innere Klammerung wegzulassen
    ​ON (Kunden.ID = Rechnungen.KundenID AND Fahrzeuge.ID = Rechnungen.FahrzeugID))
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Die Variable InnerException in Exception ist leer (Nothing).
    Das Entfernen der Klammern führt zu derselben Fehlermeldung.

    Ja, die Abfrage in Access selbst funktioniert einwandfrei.

    Ich kann mir das zurzeit nicht erklären.

    EDIT:

    Habe nun einmal die die Aggregate Funktion SUM() aus dem SQL-String entfernt.

    VB.NET-Quellcode

    1. Dim CmdStr As String = "SELECT Rechnungen.Rechnungsnummer, Kunden.Vorname, Kunden.Nachname, Fahrzeuge.Marke, Fahrzeuge.Typ, Rechnungen.Erstelldatum " & _
    2. "FROM (Kunden INNER JOIN Fahrzeuge ON Kunden.ID = Fahrzeuge.KundenID) INNER JOIN Rechnungen ON (Kunden.ID = Rechnungen.KundenID) AND (Fahrzeuge.ID = Rechnungen.FahrzeugID) " & _
    3. "GROUP BY Rechnungen.Rechnungsnummer, Kunden.Vorname, Kunden.Nachname, Fahrzeuge.Marke, Fahrzeuge.Typ, Rechnungen.Erstelldatum"


    ... Ohne die Funktion läuft das Programm einwandfrei. Es scheint mit dieser Funktion zusammen zu hängen.

    EDIT:

    Problem hat sich erledigt ... ein Schreibfehler in Zeilen.RechnungsID anstelle Zeilen.RechungsID...
    Petaod vielen Dank für deine Mühe.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „EDVProg“ ()