Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Sobald ich einen Query absetze bringt Ergebnis, aber auch Fehler wie #Name?

Begonnen von derilzemer, Mai 06, 2017, 10:18:40

⏪ vorheriges - nächstes ⏩

derilzemer

Hallo,
ich würde mir gerne ein Such & Vergleichsformular bauen, frmKartenSuche. Dazu habe ich im 1. Step ein UFO zum auflisten der Datensätze erstellt, frmUfoKartenSuche.
Der Select dazu sieht wie folgt aus und funktioniert auch (siehe bild1).
SELECT tblQuartette.SpielID_F, tblSpiele.SpielNr, [QuartettKz] & [KartenNr] AS Karte, tblQuKarten.Kartenbezeichnung
FROM tblSpiele INNER JOIN (tblQuartette INNER JOIN tblQuKarten ON tblQuartette.QuartettID = tblQuKarten.QuartettID_F) ON tblSpiele.SpielID = tblQuartette.SpielID_F
ORDER BY tblQuKarten.Kartenbezeichnung;


Im nächsten Schritt wollte ich dann in den gefundenen Datensätzen suchen und selektieren, also in frmKartenSuche ein Suchfeld und CMD Button erstellt. Der gebundene select auf dem Button sieht wie folgt aus:
SELECT tblQuartette.SpielID_F, tblSpiele.SpielNr, [QuartettKz] & [KartenNr] AS Karte, tblQuKarten.Kartenbezeichnung
FROM tblSpiele INNER JOIN (tblQuartette INNER JOIN tblQuKarten ON tblQuartette.Quartett
ID = tblQuKarten.QuartettID_F) ON tblSpiele.SpielID = tblQuartette.SpielID_F
ORDER BY tblQuKarten.Kartenbezeichnung;


Das komische dabei ist, dass es ein korrektes Ergebnis gibt, jedoch bis auf die Bezeichnung alles mit #Name? ist (siehe bild2). SQL ist nun nicht wirklich mein Steckenpferd und ich habe es mir ehrlich gesagt etwas "zusammen gesucht" im Internet. Ich vermute mal, ich habe da ein Problem mit der korrekten Join Variante :(. Was ist falsch und wer kann mir da weiterhelfen? In bild3 habe ich noch die Beziehungen der Tabellen als Screen dargestellt.

mfG
Andreas




Grüße und Dank im voraus
Andreas

DF6GL

HAllo,



ZitatDer gebundene select auf dem Button sieht wie folgt aus:

was willst Du damit sagen?





hier wäre ein Syntaxfehler:

SELECT tblQuartette.SpielID_F, tblSpiele.SpielNr, [QuartettKz] & [KartenNr] AS Karte, tblQuKarten.Kartenbezeichnung
FROM tblSpiele INNER JOIN (tblQuartette INNER JOIN tblQuKarten ON tblQuartette.QuartettID = tblQuKarten.QuartettID_F) ON tblSpiele.SpielID = tblQuartette.SpielID_F
ORDER BY tblQuKarten.Kartenbezeichnung;
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

derilzemer

Hallo Franz,
Zitat von: DF6GL am Mai 06, 2017, 11:42:08
ZitatDer gebundene select auf dem Button sieht wie folgt aus:
was willst Du damit sagen?
Hiermit will ich sagen, dass es ein unnötiger Satz von mir ist :(. Ich hätte den Satz einfach weglassen sollen.

Zitat
hier wäre ein Syntaxfehler:

SELECT tblQuartette.SpielID_F, tblSpiele.SpielNr, [QuartettKz] & [KartenNr] AS Karte, tblQuKarten.Kartenbezeichnung
FROM tblSpiele INNER JOIN (tblQuartette INNER JOIN tblQuKarten ON tblQuartette.QuartettID = tblQuKarten.QuartettID_F) ON tblSpiele.SpielID = tblQuartette.SpielID_F
ORDER BY tblQuKarten.Kartenbezeichnung;

Wenn ich ehrlich bin, verstehe ich nicht, was an dem falsch ist, ich sehe den Syntaxfehler nicht :(.

Gruß Andreas
Grüße und Dank im voraus
Andreas

Lachtaube

Andreas, vielleicht zeigst Du uns einmal den Code, der beim Drücken des Suchknopfs ausgeführt wird.
Grüße von der (⌒▽⌒)

derilzemer

Hi,
ich sehe gerade, dass ich ausgerechnet den nicht gepostet habe, sorry. Jetzt verstehe ich auch erst die Anspielung von Franz. Ich werde wohl schneller älter als erwartet :(. Den erwähnten Syntaxfehler sehe ich trotzdem nicht, den Franz erwähnt. Deshalb noch einmal der Richtigkeit wegen.
Es gibt ein frmKartenSuche. Das darin enthaltene frmUfoKartenSuche funktioniert, welchem dieser Select zugrunde liegt. Hier meint ja der Franz, es gibt einen Syntaxfehler.
SELECT tblQuartette.SpielID_F, tblSpiele.SpielNr, [QuartettKz] & [KartenNr] AS Karte, tblQuKarten.Kartenbezeichnung
FROM tblSpiele INNER JOIN (tblQuartette INNER JOIN tblQuKarten ON tblQuartette.QuartettID = tblQuKarten.QuartettID_F) ON tblSpiele.SpielID = tblQuartette.SpielID_F
ORDER BY tblQuKarten.Kartenbezeichnung;


Wenn ich nun im Suchfeld einen Suchbegriff eingebe und den Suchbutton betätige, dann findet er das auch, jedoch mit Fehlermeldung wie im Eingang des Threads beschrieben (bild2). Hier der Code (Select) des Suchbutton.

Private Sub cmdSuche_Click()
    Dim SQL As String
   
    SQL = "SELECT tblQuKarten.QuartettID_F, tblQuKarten.QuKartenID, tblQuKarten.KartenNr, tblQuKarten.Kartenbezeichnung, tblQuKarten.Druckdatum " _
        & " FROM tblQuKarten " _
        & " WHERE Kartenbezeichnung LIKE '*" & Me.txtSuchbegriff & "*' " _
        & " ORDER BY tblQuKarten.Kartenbezeichnung "

    Me.subfrmKartenSuche.Form.RecordSource = SQL
    Me.subfrmKartenSuche.Form.Requery
   
End Sub


Das Problem scheint wohl zu sein, dass ich ja einen Select über 3 Tabellen machen muss und ich aber nicht weiss wie ich das im Select zu machen habe. Ich hoffe jetzt nichts vergessen zu haben.
Gruß Andreas
Grüße und Dank im voraus
Andreas

DF6GL

Hallo,


wenn Folgendes aus der SQL-Ansicht kopiert und hier eingesetzt wurde:
...ON tblQuartette.Quartett
ID
= tblQuKarten.QuartettID_F)

dann ist das ein Syntaxfehler durch den Zeilenumbruch.

Aber zwischenzeitlich ist diese Situation ja offensichtlich eliminiert.

...ON tblQuartette.QuartettID = tblQuKarten.QuartettID_F)
Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

derilzemer

Zitat von: derilzemer am Mai 06, 2017, 16:08:54
Hi,
ich habe jetzt mal versucht mit den 3 benötigten Tabellen den select zu basteln. Meiner Meinung nach bin ich einen Schritt weiter, jedoch habe ich auch eine neue Fehlermeldung. Der select sieht jetzt so aus:

Private Sub cmdSuche_Click()

   Dim SQL As String
   
    SQL = "SELECT tblSpiele.SpielID, tblQuartette.QuartettKz, tblQuKarten.KartenNr, tblQuKarten.Kartenbezeichnung " _
        & " FROM tblSpiele INNER JOIN tblQuKarten, tblQuartette " _
        & " WHERE Kartenbezeichnung LIKE '*" & Me.txtSuchbegriff & "*' " _
        & " ORDER BY tblQuKarten.Kartenbezeichnung "
           
    Me.subfrmKartenSuche.Form.RecordSource = SQL
    Me.subfrmKartenSuche.Form.Requery
   
End Sub


Fehlermeldung jetzt lautet
Laufzeitfehler '3131':
Syntaxfehler in FROM-Klausel.

Jetzt habe ich wohl das FROM Thema mit dem INNER JOIN nicht korrekt gelöst :(.
Gruß Andreas
Grüße und Dank im voraus
Andreas

DF6GL

Hallo,

die Join-Syntax ist fehlerhaft..

Tipp:   Öffne den Abfrageentwurf, füge die 3 Tabellen hinzu und verknüpfe über die Schlüsselfelder, sofern das nicht automatisch (definiert durch die Beziehungen) geschieht.

Den entspr. SQL-String findest Du unter Ansicht/SQL-Ansicht, der kopiert und in VBA angepaßt/erweitert werden kann.

Viele Grüße vom Bodensee
Franz, DF6GL

Hilfestellung:  http://www.access-o-mania.de/forum/index.php?topic=6969.msg118738#msg118738

Links und Tipps:
1.   http://v.hdm-stuttgart.de/~riekert/lehre/db-kelz/
1a. http://www.tinohempel.de/info/info/datenbank/normalisierung.htm
1b. https://support.office.com/de-de/article/Grundlagen-des-Datenbankentwurfs-eb2159cf-1e30-401a-8084-bd4f9c9ca1f5#bmterms
2.   http://www.donkarl.com
3.   https://web.archive.org/web/20201201233522/http://www.dbwiki.net/
4.   http://www.access-tutorial.de/
5.   http://www.tty1.net/smart-questions_de.htm
6.   http://access.joposol.com/accept

Last but not least:   < F1 > für Hilfe
;) Learning by doing not by spoon-feed ;)

Tipp: Find and Replace for Access

derilzemer

Zitat von: DF6GL am Mai 07, 2017, 15:19:29
Hallo,

die Join-Syntax ist fehlerhaft..

Tipp:   Öffne den Abfrageentwurf, füge die 3 Tabellen hinzu und verknüpfe über die Schlüsselfelder, sofern das nicht automatisch (definiert durch die Beziehungen) geschieht.
Den entspr. SQL-String findest Du unter Ansicht/SQL-Ansicht, der kopiert und in VBA angepaßt/erweitert werden kann.

Das habe ich jetzt mal gemacht. Die Abfrage sieht wie folgt aus und liefert nach dem ausführen ein korrektes Ergebnis.
SELECT tblSpiele.SpielID, tblSpiele.SpielNr, [QuartettKz] & [KartenNr] AS Karte, tblQuKarten.Kartenbezeichnung
FROM tblSpiele INNER JOIN (tblQuartette INNER JOIN tblQuKarten ON tblQuartette.QuartettID = tblQuKarten.QuartettID_F) ON tblSpiele.SpielID = tblQuartette.SpielID_F;

Allerdings habe ich dann nach der Integration in VBA einen anderen Fehler :(. Da es jetzt die vorletzte Zeile in VBA ist, scheint das mit der SQL Abfrage zu passen. Aktuell sieht der VBA Teil so aus:
Option Compare Database
Option Explicit

Private Sub cmdSuche_Click()
   
    Dim SQL As String
   
    SQL = "SELECT tblSpiele.SpielID, tblSpiele.SpielNr, [QuartettKz] & [KartenNr] AS Karte, tblQuKarten.Kartenbezeichnung " _
        & " FROM tblSpiele INNER JOIN (tblQuartette INNER JOIN tblQuKarten ON tblQuartette.QuartettID = tblQuKarten.QuartettID_F) ON tblSpiele.SpielID = tblQuartette.SpielID_F; " _
        & " WHERE Kartenbezeichnung LIKE '*" & Me.txtSuchbegriff & "*' " _
        & " ORDER BY tblQuKarten.Kartenbezeichnung "
         
    Me.subfrmKartenSuche.Form.RecordSource = SQL
    Me.subfrmKartenSuche.Form.Requery
   
End Sub

Laufzeitfehler '3142':
Zeichen nach Ende von SQL-Anweisung gefunden
Beim debuggen springt er auf den gelb markierten, "fehlerhaften" Teil des VBA Abschnittes:
Me.subfrmKartenSuche.Form.RecordSource = SQL

Gruß Andreas
Grüße und Dank im voraus
Andreas

derilzemer

Hallo,
okay, ich musste den ; im SQL entfernen, dann hat er die Suche ausgeführt, bringt jedoch beim Ergebnis bei der Spiel-ID #Name, was ja noch auf einen Fehler hindeutet, oder?
Das deutet doch darauf hin, dass er das Feld nicht finden kann, oder? Die Abfrage funktioniert aber ohne diese Fehlermeldung. Wie kann ich debuggen?

PS: Ich hatte das falsche Feld pPielID ausgewählt bzw. integriert. Nun funktioniert es. Danke für das "Nase drauf stoßen"

Gruß Andreas
Grüße und Dank im voraus
Andreas