Access-o-Mania

Access-Forum (Deutsch/German) => Formular => Thema gestartet von: Umbauwfb am Februar 01, 2022, 12:15:48

Titel: Fehler 3065 durch SQL (Filter)
Beitrag von: Umbauwfb am Februar 01, 2022, 12:15:48
Hallo,
ich erhalte Fehler 3065....eine Auswahlabfrage kann nicht durchgeführt werden...
und finde den Fehler einfach nicht...
Vielleicht kann sich das mal jemand anschauen
Vielen Dank  :)

Zum Zusammenhang:
Ich habe 4 separate optButtons
Zu jedem optButton habe ich ein Textfeld zugeordnet
Das Textfeld hat jeweils den Standardwert ""

Hat der zugehörige optButton den Wert -1
schreibe ich einen Text in das jeweilige Textfeld

txtSerienEmail        wird "SerienEmail"  oder bleibt ""
txtEmail              wird "Email"        oder bleibt ""
txtGespraech          wird "Gespräch"     oder bleibt ""
txtTelefonat          wird "Telefonat"    oder bleibt ""

Mit den Werten dieser Textfelder filtere ich dann die Abfrage
"ProtokollNotizUF_SelectQ" (Datenquelle des Unterformulars) in der Spalte "ProtokollTyp"

Der String sSQL soll die Feldinhalte zusammenführen und die Spalte filtern

Private Sub cmdFilterProtokollTyp_Click()

Dim db As Database
Dim sSQL As String
Dim strSuchbegriff As String

Set db = CurrentDb

     strSuchbegriff = "Me!txtSerienMail.Text & Me!txtMail.Text & Me!txtGespraech.Text & Me!txtTelefonat.Text"
           
     If Len(strSuchbegriff) > 0 Then
     
         Dim vSerienEmail As String
         Dim vEmail As String
         Dim vGespraech As String
         Dim vTelefonat As String
         
         vSerienEmail = Me.txtSerienEmail           'werden diese 4 Variablen gebraucht?
         vEmail = Me.txtEmail                       'oder kann ich mit Me. ....in sSQL gehen?
         vGespraech = Me.txtGespraech               '
         vTelefonat = Me.txtTelefonat               '
         
         
       
        sSQL = sSQL & " SELECT * "
   
        sSQL = sSQL & " FROM ProtokollNotizUF_SelectQ "
   
        sSQL = sSQL & " WHERE ProtokollTypT.ProtokollTyp = vSerienEmail"

        sSQL = sSQL & " Or ProtokollTypT.ProtokollTyp = vGespraech"
       
        sSQL = sSQL & " Or ProtokollTypT.ProtokollTyp = vTelefonat"
       
        sSQL = sSQL & " Or ProtokollTypT.ProtokollTyp = vEmail"
   
       
        db.Execute sSQL, dbFailOnError              'Laufzeitfehler 3065: "Eine Auswahlabfrage kann nicht ausgeführt werden"

        MsgBox "Filter wurde ausgeführt"

     End If

End Sub
Titel: Re: Fehler 3065 durch SQL (Filter)
Beitrag von: DF6GL am Februar 01, 2022, 14:23:38
Hallo,


1) Der Zusammenbau des SQL-Strings ist falsch. Die (VBA-)Variablen müssen aus dem String ausgelagert werden.

2) Mit .Execute werden Aktions-Abfragen ausgeführt, keine Auswahlabfragen (wie die Fehlermeldung selber schon sagt).

3) Wenn das (Unter-)Formular die gefilterten DS anzeigen soll, so ist der SQL-String der Datenherkunft des UFOs zuzuweisen.

4) Die Zwischenvaraiblen werden nicht gebraucht (kannst Du ja selber testen).



ZitatPrivate Sub cmdFilterProtokollTyp_Click()

Dim db As Database
Dim sSQL As String
Dim strSuchbegriff As String

Set db = CurrentDb

     strSuchbegriff = "Me!txtSerienMail.Text & Me!txtMail.Text & Me!txtGespraech.Text & Me!txtTelefonat.Text"
           
     If Len(strSuchbegriff) > 0 Then





sSQL = sSQL & " SELECT * "
   
        sSQL = sSQL & " FROM ProtokollNotizUF_SelectQ "
   
        sSQL = sSQL & " WHERE ProtokollTyp = '" & Me!SerienEmail     'Qualifizierer hier nicht erforderlich

        sSQL = sSQL & "' Or ProtokollTyp = '" & Me!Gespraech
       
        sSQL = sSQL & "' Or ProtokollTyp = '" & Me!Telefonat
       
        sSQL = sSQL & "' Or ProtokollTyp = '" & Me!Email & "'"   

   
       Me!ProtokollNotizUF_SelectQ.Form.Recordsource = sSQL   ' Wenn das UFO-Steuerelement ProtokollNotizUF_SelectQ heißt
       
        MsgBox "Filter wurde ausgeführt"

     End If

End Sub
Titel: Re: Fehler 3065 durch SQL (Filter)
Beitrag von: Umbauwfb am Februar 01, 2022, 15:35:19
Vielen Dank für die schnelle Antwort, die umfassende Erklärung ...und den jetzt sehr übersichtlichen Code :)

Leider hängt er sich in der letzten Zeile auf...
Bis zur letzten Zeile stimmen auch die Werte, wenn ich Sie mit F8 verfolge...


Alle genannten Felder sind im UF im Kopf angelegt

Müssen die Felder ins Hauptformular?

Schöne Grüße aus Lüneburg
Harry

Private Sub cmdFilterProtokollTyp_Click()

        Dim sSQL As String
       
        sSQL = sSQL & " SELECT * "
   
        sSQL = sSQL & " FROM ProtokollNotizUF_SelectQ "
   
        sSQL = sSQL & " WHERE ProtokollTyp = '" & Me!txtSerienEmail

        sSQL = sSQL & "' Or ProtokollTyp = '" & Me!txtGespraech
       
        sSQL = sSQL & "' Or ProtokollTyp = '" & Me!txtTelefonat
       
        sSQL = sSQL & "' Or ProtokollTyp = '" & Me!txtEmail
   
       
        Me!ProtokollNotizUF_SelectQ.Form.RecordSource = sSQL    'Hier Laufzeitfehler 2465:
                                                                'Microsoft Access kann das in Ihrem Ausdruck
                                                                'angesprochene Feld
                                                                'ProtokollNotizUF_SelectQ nicht finden
                                                               
                                                                'ProtokollNotizUF_SelectQ ist die
                                                                'Datensatzquelle des UF

End Sub
Titel: Re: Fehler 3065 durch SQL (Filter)
Beitrag von: DF6GL am Februar 01, 2022, 16:00:40
Hallo,



nochmal: wenn Du die Abfrageergebnisse in einem Unterformular anzeigen willst, so muss der Name des UFO-Steuerelementes, das das (U-) Formular anzeigt, mit dessen Eigenschaft "Datenherkunft" (RecordSource) angegeben werden:


Me!UFO-SteuerelementName.Form.RecordSource = sSQL

Den Namen musst Du ja selber kennen...

Die Formular-Steuerelemente (Textfelder), die an die Abfragefelder gebunden sind, gehören natürlich in den Detailbereich.

ZitatMüssen die Felder ins Hauptformular?

Welche Felder meinst Du?  Die Eingabefelder für die Kriterien oder die (Anzeige-)Felder für die Ergebnisse?

Titel: Re: Fehler 3065 durch SQL (Filter)
Beitrag von: Umbauwfb am Februar 01, 2022, 16:50:36
Ich habe die Information jetzt wie beschrieben nach bestem Wissen eingetragen...
Die Fehlermeldung ändert sich leider nur namentlich...
Nachfolgend der aktuelle Code
Anhängend ein jpeg zur Info
Tut mir leid, dass sich das so zäh entwickelt...

Private Sub cmdFilterProtokollTyp_Click()

        Dim sSQL As String
       
        sSQL = sSQL & " SELECT * "
   
        sSQL = sSQL & " FROM ProtokollNotizUF_SelectQ "
   
        sSQL = sSQL & " WHERE ProtokollTyp = '" & Me!txtSerienEmail

        sSQL = sSQL & "' Or ProtokollTyp = '" & Me!txtGespraech
       
        sSQL = sSQL & "' Or ProtokollTyp = '" & Me!txtTelefonat
       
        sSQL = sSQL & "' Or ProtokollTyp = '" & Me!txtEmail
       
         
       
        Me!ProtokollNotizUF.Form.RecordSource = sSQL  'Hier Laufzeitfehler 2465:
                                                                'Microsoft Access kann das in Ihrem Ausdruck
                                                                'angesprochene Feld
                                                               
                                                               
                                                                'Jetzt ersetzt durch
                                                                'ProtokollNotizUF   >>>>> in der Anlage ein jpg
                                                                'nicht finden
                                                               
                                                               
                                                                'ProtokollNotizUF_SelectQ ist die
                                                                'Datensatzquelle des UF

End Sub


Titel: Re: Fehler 3065 durch SQL (Filter)
Beitrag von: DF6GL am Februar 01, 2022, 16:58:27
Hallo,



und in welchen Form läuft der Code ab, bzw. wo befindet sich der Button "cmdFilterProtokollTyp" (Haupt- oder Unterformular) ?




Am besten lädst Du die DB hier hoch, komprimiert/repariert und gezippt.
Titel: Re: Fehler 3065 durch SQL (Filter)
Beitrag von: ebs17 am Februar 01, 2022, 17:30:54
ZitatLeider hängt er sich in der letzten Zeile auf...
Natürlich. Ein Fehler in der erzeugten SQL-Anweisung zeigt sich dann, wenn die Anweisung verwendet wird => Zuweisung als RecordSource

sSQL = sSQL & "' Or ProtokollTyp = '" & Me!txtEmail ? ? ?
... oder vollständig abschreiben/kopieren.

Dieser Fehler schließt weitere nicht aus.
Titel: Re: Fehler 3065 durch SQL (Filter)
Beitrag von: Umbauwfb am Februar 01, 2022, 17:38:59
Danke für die Antwort,

ich verstehe aber leider nicht, was Du mir sagen willst...
das steht doch genau so im Code...
Ist da was falsch?
Titel: Re: Fehler 3065 durch SQL (Filter)
Beitrag von: Umbauwfb am Februar 01, 2022, 17:43:37
der Button "cmdFilterProtokollTyp"
steht im Unterformular neben den optButtons und den txt-Feldern...

Der Code läuft ja auch bis zur letzten Zeile durch und bringt beim drüberhoovern auch die richtigen Aussagen zum Inhalt der txt-Felder...
Titel: Re: Fehler 3065 durch SQL (Filter)
Beitrag von: ebs17 am Februar 01, 2022, 17:49:23
Im Vorschlag von Franz hat die letzte Zeile der Zusammenstellung von sSQL folgenden Abschluss, der für die korrekte Syntax zwingend nötig ist:

& "'"

Eine Kette ist so kräftig wie das schwächste Glied.

Erst wenn Syntaxprobleme ausgeräumt sind, kann der Versuch, die SQL-Anweisung auszuführen, weitergehen. Dann ginge es um die wörtliche Meldung: Tabellenname wird nicht gefunden (Tippfehler, nicht erreichbar o.ä.).
Titel: Re: Fehler 3065 durch SQL (Filter)
Beitrag von: Umbauwfb am Februar 01, 2022, 18:06:53
Danke für den Hinweis...
Den Fehler habe ich gerade auch schon gefunden und nachgebessert...
Der Code bleibt dennoch in der letzten Zeile mit der gleichen Meldung hängen...

Ich komprimiere und repariere die dB jetzt, starte den Rechner neu und melde mich...

danke erstmal...
Titel: Re: Fehler 3065 durch SQL (Filter)
Beitrag von: ebs17 am Februar 01, 2022, 18:20:01
Daneben, was man immer tun sollte, bei Problemen sowieso:
Wenn man schon so eine schöne Variable sSQL hat, kann man prüfen, was die am Ende ausgibt.

=> Ausgabe ins Direktfenster mit Debug.Print

Komfortabler mit einem kleinen Add-In: SqlDebugPrint (https://www.ms-office-forum.net/forum/showthread.php?t=352915)
Titel: Re: Fehler 3065 durch SQL (Filter)
Beitrag von: DF6GL am Februar 01, 2022, 18:53:41
Hallo,

wenn

Zitatder Button "cmdFilterProtokollTyp"
steht im Unterformular neben den optButtons und den txt-Feldern...

dann:

Me.RecordSource = sSQL


Sorry für die Unterschlagung des  abschließenden Hochkommas..  :(  :D
Titel: Re: Fehler 3065 durch SQL (Filter)
Beitrag von: Umbauwfb am Februar 01, 2022, 20:35:20
Gute Nachricht...der Code läuft :)
Ich habe die ganzen Bezüge noch einmal neu aufgesetzt und benannt...

Ich habe den Verdacht, dass mir Google-Drive Ärger gemacht hat. Normalerweise schalte ich Google-Drive immer aus, wenn ich an der Datenbank arbeite. Weil ich vermeiden möchte, dass ich die Datenbank komprimiere, schließe und wieder öffne... und Google-Drive die Datei dann gerade in die Cloud lädt und sperrt...da kam es des Öftern schon zu Fehlermeldungen...
Das hatte ich heute vergessen...

Nachdem dann alles schön ordentlich eingetragen war, lief der Code und sieht jetzt wie nachfolgend aus!
In der letzten Zeile war auch noch eine winzige Optimierung hilfreich...

Herzlichen Dank für die Zeit, die Geduld, die Mühe und die wertvolle Hilfe!
Mit einem schönen Gruß aus Lüneburg
Harry

Private Sub cmdFilterProtokollTyp_Click()

        Dim sSQL As String
     
        sSQL = sSQL & " SELECT * "
   
        sSQL = sSQL & " FROM ProtokollNotizUF_SelectQ "
   
        sSQL = sSQL & " WHERE ProtokollTyp = '" & Me!txtSerienEmail

        sSQL = sSQL & "' Or ProtokollTyp = '" & Me!txtGespraech
       
        sSQL = sSQL & "' Or ProtokollTyp = '" & Me!txtTelefonat
       
        sSQL = sSQL & "' Or ProtokollTyp = '" & Me!txtEmail & "'"
               
             
        Me.RecordSource = sSQL

End Sub

An diesem kurzen Elend habe ich ganze 2 Tage gearbeitet...man glaubt es nicht...
Titel: Re: Fehler 3065 durch SQL (Filter)
Beitrag von: Umbauwfb am Februar 03, 2022, 11:13:16
Hallo Eberhard (ebs17),

ich hoffe dass Du diese Nachricht noch liest...
nachdem die dringlichsten Probleme jetzt gelöst sind, möchte ich noch einmal auf Deinen Tipp zurückkommen:

(Komfortabler mit einem kleinen Add-In: SqlDebugPrint)

In Access ist dieses Add-In nicht verfügbar (genauer: KEIN Add-In ist verfügbar...)

Ich würde es gerne einbauen...wo ist es zu beziehen?

Danke nochmal für die Unterstützung :)
Titel: Re: Fehler 3065 durch SQL (Filter)
Beitrag von: MzKlMu am Februar 03, 2022, 11:22:06
Hallo,
Zitatwo ist es zu beziehen?
hat doch Eberhard bereits in #11 beschrieben. Dort ist ein Link.
Titel: Re: Fehler 3065 durch SQL (Filter)
Beitrag von: ebs17 am Februar 03, 2022, 12:02:51
Klar, Add-Ins kommen meist von Drittanbietern, um die Funktionalität aufzupeppen. Hätte Microsoft solche Funktionalitäten von Haus aus integriert, bräuchte man keine Lösungen von außerhalb.

Im gegebenen Link ist im Erstbeitrag ein Download-Link, für ein ZIP-Archiv. Entpacken und Install ausführen.
Titel: Re: Fehler 3065 durch SQL (Filter)
Beitrag von: Beaker s.a. am Februar 03, 2022, 18:15:00
Eine kurze Installationsanweisung findest du in der ReadMe.txt (im zip-Archiv enthalten).
Titel: Re: Fehler 3065 durch SQL (Filter)
Beitrag von: Umbauwfb am Februar 04, 2022, 10:13:03
Danke für die Hinweise...ich habe das Add-In installiert, komme aber noch nicht klar damit (wo und wie rufe ich auf???) ...für einen Programmierer ist das sicherlich alles selbstverständlich...ich fange gerade mühsam an, mit VBA vor mich hinzubrabbeln... :)

Ich muss mir das bei Gelegenheit noch einmal in Ruhe anschauen...

Grüße aus Lüneburg
Harry
Titel: Re: Fehler 3065 durch SQL (Filter)
Beitrag von: Beaker s.a. am Februar 04, 2022, 14:46:29
Hallo Harry,
Zitathabe das Add-In installiert,
Aber das Installationsformular nicht ordentlich gelesen.
Da wird zunächst die übliche Vorgehensweise zum Testen von SQL-Anweisungen
mit Debug.Print (siehe OH zu dieser Methode) ohne AddIn beschrieben und,
mit Beispiel, die Vereinfachung mit dem AddIn. Die Anwendung im deinem Code
ist die gleiche, - statt
Debug.Print DeinSQLString(damit kannst du dir den geparsten String nur im Direktfenster ansehen)
schreibst du
SqlDebug DeinSQLString(öffnet ein Formular mit dem geparsten String in einem Textfeld und einer
Fehlermeldung in einem zweiten)

gruss ekkehard

P.S. @Eberhard
Weil es mir schon mal aufgefallen ist; -
warum verlinkst du nicht auch deinen QueryHelper? Ich weiss gar nicht wieso
mir die Ehre dieser Exklusivität zu Teil wird.
Titel: Re: Fehler 3065 durch SQL (Filter)
Beitrag von: ebs17 am Februar 05, 2022, 11:33:47
@ekkehard:
SqlDebugPrint ist punktgenau auf das Testen ausgerichtet, ausprogrammiert und selbständig in Betrieb zu nehmen entsprechend Benutzerführung, auch für Neulinge (eigentlich).

Der QueryHelper ist im Beta-Status, also nicht bedingungslos für Unwissende nutzfähig. Der Ansatz ist zudem ein anderer: Neben der übersichtlichen Anzeige von SQL soll das Neuerstellen und Editieren von SQL-Anweisungen unterstützt werden, um bspw. sehr viel mehr auf die Entwurfsansicht verzichten zu können (die wegen der eingebauten Anfängerfreundlichkeit auch gute Anweisungen wieder verschandelt).
Im Vordergrund steht also, möglichst unterstützt sofort richtige Anweisungen zu erstellen, nicht nur zu prüfen, ob das Ergebnis ausführbar ist. Das dann auch für die Einbettung von SQL in VBA-Code.
Daneben gibt es noch eine Reihe von Baustellen und von eigenen unerfüllten Wünschen, die abgeschlossen und erledigt sein sollten, ehe ich in Sachen Empfehlung offensiver werde.
Derzeit spiele ich mit Syntax-Highlighting, IntelliSense u.ä.
Titel: Re: Fehler 3065 durch SQL (Filter)
Beitrag von: Beaker s.a. am Februar 06, 2022, 11:33:34
@Eberhard
O.K., kann ich verstehen.