none
Wie kann ich SQL-Unterabfragen in VB6 verwenden RRS feed

  • Frage

  • Hallo zusammen,

    ich greife per SQL-Statement auf eine Datenbank zu und lasse mir die Daten in einem Grid anzeigen. Funktioniert auch prima.

    Jetzt möchte ich das verwendete SQL-Statement weiter nutzen und mit einem neuen Statement die Auswahl verfeinern und wiederum anzeigen. Dazu habe ich versucht, per SQL-Unterabfragen das ganze aufzubauen, leider ohne Erfolg. Wie muss ich dieses Statement aufbauen, damit es funktioniert?

    Ich habe gelesen, eine SQL-Unterabfrage erzeugt eine temporäre Tabelle, somit müsste es doch eigendlich funktionieren, denn wenn ich mit dem zweiten Statement auf eine echte Tabelle zugreife, funktioniert es auch.

    Mein Code sieht so aus:

    sSQL = "Select Firma, Anrede, Name, Vorname, Strasse, PLZ, Ort from Adressen Where PLZ Like """ & aktPLZ & """ "

    eSQL = "Select Firma, Anrede, Name, Vorname, Strasse, PLZ, Ort from (" & sSQL & ") Where Anrede Like """ & aktAnrede & """ "

    Geht es überhaupt so mit VB6 und einem SQL-Statement?

    Vielen Dank für Eure Hilfe.

    Dieter

     


    Dieter Schirmer
    Sonntag, 16. Januar 2011 21:23

Antworten

  • Hallo Dieter,

    Grundsätzlich geht so etwas in SQL, sofern die Datenbank es unterstützt; nennt sich derivative table (abgeleitete Tabelle). Es gibt ein paar Einschränkungen, man darf kein ORDER BY angeben (wäre auch nicht sinnvoll), ebenso darf man kein abschließendes Semikolon angeben.

    Du muss aber mindestens ein Alias vergeben um die abgeleitetet Tabelle eindeutig ansprechen zu können, z.B.

    eSQL = "Select Firma, Anrede, Name, Vorname, Strasse, PLZ, Ort from (" & sSQL & ") AS MySubTable Where Anrede Like """ & aktAnrede & """ "


    Olaf Helper ----------- * cogito ergo sum * errare humanum est * quote erat demonstrandum * Wenn ich denke, ist das ein Fehler und das beweise ich täglich http://olafhelper.over-blog.de
    Montag, 17. Januar 2011 08:11
  • Der "Haken" liegt bei Adressen.Anrede, hier verwendest Du einen Tabellennamen aus der inneren Abfrage, die ist für die äußere Abfrage nicht sichtbar; entweder weg lassen oder Adresse durch den Alias "MySubTable" ersetzen

    eSQL = "Select Firma, Anrede, Name, Vorname, Strasse, PLZ, Ort from (" & sSQL & ") As MySubTable Where MySubTable.Anrede Like """ & aktAnrede & """ "



    Olaf Helper ----------- * cogito ergo sum * errare humanum est * quote erat demonstrandum * Wenn ich denke, ist das ein Fehler und das beweise ich täglich http://olafhelper.over-blog.de
    Montag, 17. Januar 2011 14:19
  • Hallo Olaf,

    vielen Dank für Deine Hilfe. Ich habe den Fehler gefunden.

    Hatte verschwiegen, dass ich im ersten Statement auch Alias verwende (Anrede as AnPerson). Jetzt setze ich diese im Code ein und es funktioniert.

    eSQL = "Select Firma as Firma1, Anrede as AnPerson, .... from (" & sSQL & ") As MySubTable Where MySubTable.AnPerson Like """ & aktAnrede & """ "

    Nochmals vielen Dank und einen schönen Abend.

    Gruß Dieter

     


    Dieter Schirmer
    Montag, 17. Januar 2011 15:25

Alle Antworten

  • Hallo Dieter,

    Grundsätzlich geht so etwas in SQL, sofern die Datenbank es unterstützt; nennt sich derivative table (abgeleitete Tabelle). Es gibt ein paar Einschränkungen, man darf kein ORDER BY angeben (wäre auch nicht sinnvoll), ebenso darf man kein abschließendes Semikolon angeben.

    Du muss aber mindestens ein Alias vergeben um die abgeleitetet Tabelle eindeutig ansprechen zu können, z.B.

    eSQL = "Select Firma, Anrede, Name, Vorname, Strasse, PLZ, Ort from (" & sSQL & ") AS MySubTable Where Anrede Like """ & aktAnrede & """ "


    Olaf Helper ----------- * cogito ergo sum * errare humanum est * quote erat demonstrandum * Wenn ich denke, ist das ein Fehler und das beweise ich täglich http://olafhelper.over-blog.de
    Montag, 17. Januar 2011 08:11
  • Hallo Olaf,

    vielen Dank für Deine Antwort, soweit funktioniert es jetzt auch. Allerding bei etwas komplexeren Statements hakt es wieder. Folgendes möchte ich einsetzen und bekomme eine Fehlermeldung.

    sSQL = "Select Adressen.Firma, Adressen.Anrede, Adressen.Name, Adressen.Vorname, Adressen.Strasse, Adressen.PLZ, Adressen.Ort Adressen.ID " & _
                "FROM Adressen LEFT OUTER JOIN Zusatzdaten ON Zusatzdaten.AdrID = Adressen.ID Where Zusatzdaten.Geraete Like """ & aktGeraete & """ "

    eSQL = "Select Firma, Anrede, Name, Vorname, Strasse, PLZ, Ort from (" & sSQL & ") As MySubTable Where Adressen.Anrede Like """ & aktAnrede & """ "

    Fehlermeldung: Fehler in Datenbank ! Der mehrteilige Bezeichner "Adressen.Anrede" konnte nicht gebunden werden.

    Liegt es daran, dass ich mit einer weiteren Tabelle arbeite? Und gibt es dafür eine Lösung?

    Danke schonmal, für die Antwort.

    Dieter

     


    Dieter Schirmer
    Montag, 17. Januar 2011 14:07
  • Der "Haken" liegt bei Adressen.Anrede, hier verwendest Du einen Tabellennamen aus der inneren Abfrage, die ist für die äußere Abfrage nicht sichtbar; entweder weg lassen oder Adresse durch den Alias "MySubTable" ersetzen

    eSQL = "Select Firma, Anrede, Name, Vorname, Strasse, PLZ, Ort from (" & sSQL & ") As MySubTable Where MySubTable.Anrede Like """ & aktAnrede & """ "



    Olaf Helper ----------- * cogito ergo sum * errare humanum est * quote erat demonstrandum * Wenn ich denke, ist das ein Fehler und das beweise ich täglich http://olafhelper.over-blog.de
    Montag, 17. Januar 2011 14:19
  • Entschuldige meine fehlerhafte Antwort, aber das hatte ich auch schon probiert.
    Mit oder ohne MySubTable (MySubTable.Anrede oder Anrede) kommt "Ungültiger Spaltenname - 'Anrede'".

    Kann es sein, dass ich beide Tabellennamen ansprechen muss, wie z.B. MySubTable.Adressen.Anrede o.ä. ?

     

     


    Dieter Schirmer
    Montag, 17. Januar 2011 14:36
  • Hallo Olaf,

    vielen Dank für Deine Hilfe. Ich habe den Fehler gefunden.

    Hatte verschwiegen, dass ich im ersten Statement auch Alias verwende (Anrede as AnPerson). Jetzt setze ich diese im Code ein und es funktioniert.

    eSQL = "Select Firma as Firma1, Anrede as AnPerson, .... from (" & sSQL & ") As MySubTable Where MySubTable.AnPerson Like """ & aktAnrede & """ "

    Nochmals vielen Dank und einen schönen Abend.

    Gruß Dieter

     


    Dieter Schirmer
    Montag, 17. Januar 2011 15:25