1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Visual Basic 2005 - syntaxfehler (fehlender operator) in abfrageausdruck

Dieses Thema im Forum "Sonstige Sprachen" wurde erstellt von xX Hardy Xx, 26. Mai 2016.

  1. xX Hardy Xx

    xX Hardy Xx Mitglied

    Hallo liebe Forengemeinde,

    ich programmiere gerade an einer Kundenverwaltung und habe dort ein Problem, welches ich trotz mehrstündigen probierens, nicht gelöst bekomme. Grundlage ist eine Access Datenbank *.mdb.

    Zu der Kundenverwaltung gibt es ein Form, welches eine Übersicht mit allen Kunden in einem ListView Element anzeigt.

    In dieser Kundenübersicht gibt es verschiedene Kriterien der Eingrenzung.
    Z.B. Nur das Anzeigen von Privat und/oder Unternehmen, wobei man die Unternehmen wiederum zwischen Lieferanten und Händlern unterscheiden und anzeigen lassen kann.
    Des weiteren gibt es Möglich sich nur die die Unternehmen einer gewissen Branche anzeigen zu lassen.

    Das alles funktioniert einwandfrei. Er zeigt mir alle Datensätze an so wie ich dies möchte. Er zeigt mir jedoch Datensätze mit dem selben Namen auch jedesmal an. Um dies zu Unterdrücken habe ich im SQL Querry versucht den Befehl 'GROUP BY' zu verwenden.


    Code (Text):
    1. Function Datensaetze_Laden()
    2.         Dim con As New OleDbConnection
    3.         Dim cmd As New OleDbCommand
    4.         Dim reader As OleDbDataReader
    5.         Me.lstvUebersicht.Clear()
    6.         con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & strDATASource
    7.         cmd.Connection = con
    8.         strTemp = "SELECT  ID, Kundenname FROM Kundenstamm WHERE Deaktiviert = False"
    9.         If Me.cboTaetigkeitsbereich.Text <> "" Then
    10.             If cboTaetigkeitsbereich.Text <> "Alle" Then
    11.                 strKunde_Taetigkeitsbereich = Me.cboTaetigkeitsbereich.Text
    12.                 strTemp = strTemp & " AND Taetigkeitsbereich = '" & strKunde_Taetigkeitsbereich & "'"
    13.             End If
    14.         End If
    15.         If bolKundesuche_Privatperson = False Then
    16.             strTemp = strTemp & " AND Privatperson = False"
    17.         End If
    18.         If bolKundensuche_Unternehmen = False Then
    19.             strTemp = strTemp & " AND Unternehmen = False"
    20.         End If
    21.         If Me.chkHaendler.Checked = False Then
    22.             strTemp = strTemp & " AND Haendler = False"
    23.         End If
    24.         If Me.chkLieferant.Checked = False Then
    25.             strTemp = strTemp & " AND Lieferant = False"
    26.         End If
    27.         strTemp = strTemp & " ORDER BY Kundenname"
    28.         cmd.CommandText = strTemp
    29.         Try
    30.             con.Open()
    31.             reader = cmd.ExecuteReader()
    32.             Do While reader.Read()
    33.                 intKunde_ID = reader("ID")
    34.                 strKunde_Name = reader("Kundenname")
    35.                 intKunde_Anzahl = Me.lstvUebersicht.Items.Count
    36.                 If intKunde_Anzahl = 0 Then
    37.                     Me.lstvUebersicht.Columns.Add("ID", 44, HorizontalAlignment.Left)
    38.                     Me.lstvUebersicht.Columns.Add("Kundenname", 550, HorizontalAlignment.Left)
    39.                 End If
    40.                 Me.lstvUebersicht.Items.Add(intKunde_ID)
    41.                 Me.lstvUebersicht.Items(intKunde_Anzahl).SubItems.Add(strKunde_Name)
    42.             Loop
    43.             reader.Close()
    44.             con.Close()
    45.         Catch ex As Exception
    46.             MessageBox.Show(ex.Message)
    47.         End Try
    48.         Return Nothing
    49.     End Function
    So funktioniert der Code.

    Erweitere ich jedoch jetzt eine Befehlszeile um

    Code (Text):
    1. strTemp = strTemp & " ORDER BY Kundenname GROUP BY Kundenname"
    wird der im Betreff genannte Fehler angezeit.
    Ich habe alle möglichen Notationen probiert auch [] oder ' '

    An anderen Stellen des Programms funktioniert diese Anweisung. Wieso hir nicht? Hat jemand eine Idee?

    Vielen Dank im Voraus für eure Hilfe

    Gruß

    Hardy
     
    Zuletzt bearbeitet: 26. Mai 2016
  2. Spyke

    Spyke Capoeirista Premium-User

    Du hast GROUP BY und ORDER BY vertauscht
    zuerst group dann order
     
  3. xX Hardy Xx

    xX Hardy Xx Mitglied

    Ja ich habe ich Probiert, auch an anderen Positionen.

    Auch bei der Folgenden Notation funktioniert es auch nicht. Wenn ich nur
    Code (Text):
    1. strTemp = "SELECT  ID, Kundenname FROM Kundenstamm WHERE Deaktiviert = False GROUP BY Kundenname ORDER BY Kundenname"
    Kommt der selbe Fehler.

    Bei meinen Recherchen im Netz bin ich darauf gestoßen, dass dieser Fehler auftreten kann, wenn man eine Tabellenspalte wie eine Funktion oder einen Befehl benennt.
    Aus diesem Grund habe ich die Spalte in der DB auch Kundenname und nicht nur Name genannt. Dann passiert soetwas, hatte zu Anfags dieses Problem.
     
    Zuletzt bearbeitet: 27. Mai 2016
  4. Spyke

    Spyke Capoeirista Premium-User

    Du musst ID auch in die GROUP BY mit aufnehmen.
    Wenn du GROUP BY verwendest müssen auch alle Spalten mit in die Group by regel aufgenommen werden die du zurück geben willst.
    Ausnahmen sind wie du schon sagtest wenn es sich um Aggregatfunktionen handelt.
     
  5. xX Hardy Xx

    xX Hardy Xx Mitglied

    Vielen Dank Spyke,

    habe ich probiert. Hat auch keine Fehlermeldung gegeben, jedoch hatte es den selben Effekt wie ohne GROUP BY.

    Ich denke aber ich habe eine Erklärung für die Enstehung des Problems. Jedenfalls hast du Recht, ich muss die ID mit einbeziehen.

    - ich habe eine Datenbanktabelle Kundenstamm in der Kundennamen jedoch auch doppelt vorkommen können.
    - ich wollte eine Ausgabe der Datensätze ohne Doppelte Einträge, so das jeder Kundenname nur einmal angezeigt wird
    - nach einer Selektion des Kunden über die Liste solle der Kunde anhand der ID geladen werden.
    - die SQL-Abfrage gibt einen Kundennamen jedoch mehrere ID zurück. Ich denke hier ist das Problem. Weil mit ID in GROUP BY hat er ja für jeden Kundennamen auch eine Möglichkeit dann die ID zu speichern.

    Lasse ich die ID in der Abfrage weg, erhalte ich das gewünschte Ergebniss.

    In diesem Zusammenhang ist mir jedoch ein genereller Gedankenfehler meinerseits aufgefallen. Hatte wohl zu kompliziert gedacht.
    Ich wollte erst eine Übersicht der Kundennamen; ist der ausgewählt Kundenname mehrfach in der Datenbank vertreten, wird ein neues Form geöffnet und alle Kunden des Namens mit Ort werden angezeigt.
    Ich mache es nun so das mir direkt alle Kunden mit Ort als Unterscheidungskriterium angezeitgt werden.
     
Die Seite wird geladen...