Hallo zusammen und eine schönen guten Abend,
ich habe folgendes Problem:
Ich möchte ein Unterformular über eine Optionsgruppe filtern, in eine temporäre Query packen und in einem Excel File ablegen. Das Filtern des Unterformulars klappt damit schon ganz gut. Das erstellen der temporären Query mit meinem SQL String scheint aber nicht zu funktionieren. Ich erhalte den Fehler 3131: Fehler in der FROM Klausel. Was passt hier nicht zusammen?
Private Sub Befehl43_Click()
If IsNull(Me.Rahmen36) Then 'Filtert über Optionsgruppe MeinUnterformular
MsgBox ("Wähle eine Filteroption aus")
End If
Select Case Me.Rahmen36
Case 1
Forms!meinFormular!MeinUnterformular.Form.Filter = "MeinFeld1 LIKE '" & Me!Text44 & "'"
Forms!meinFormular!MeinUnterformular.Form.FilterOn = True
Case 2
Forms!meinFormular!MeinUnterformular.Form.Filter = "MeinFeld2 LIKE '" & Me!Text44 & "'"
Forms!meinFormular!MeinUnterformular.Form.FilterOn = True
End Select
End Sub
---------------------------------------------------------------------------------------------------------------
Private Sub Befehl46_Click()
Dim sSQL As String
Dim qdf As DAO.QueryDef
sSQL = "SELECT * " & _
"FROM " & Me!MeinUnterformular.Form.RecordSource & _
" WHERE " & Me!MeinUnterformular.Form.Filter
Debug.Print sSQL
On Error Resume Next
DoCmd.DeleteObject acQuery, "tmpAbfrage" 'bei mir noch nicht vorhanden...
On Error GoTo Fehler
Set qdf = CurrentDb.CreateQueryDef("tmpAbfrage", sSQL)
Liebe Grüße aus Mainz
Hallo,
die Formularverweise halte ich für kritisch, bzw. mit latenten Fehlern behaftet..
Wie lautet der ausgegebene sSQL-String ?
MsgBox sSQL spuckt folgendes aus:
SELECT * FROM SELECT [meineQry].[meinFeld1],
[meineQry].[meinFeld1],
[meineQry].[meinFeld2],
[meineQry].[meinFeld3],
[meineQry].[meinFeld4],
[meineQry].[meinFeld5],
[meineQry].[meinFeld6],
[meineQry].[meinFeld7],
[meineQry].[meinFeld8],
[meineQry].[meinFeld9],
[meineQry].[meinFeld10] FROM meineQuery; WHERE meinFeld1 LIKE '13'
Hallo,
eigentlich müsstest Du selber darauf kommen, wo die Fehler sitzen....
Im Fall, das in der Datenherkunft ein SQL-String steht:
sSQL = Replace (Me!MeinUnterformular.Form.RecordSource & _
" WHERE " & Me!MeinUnterformular.Form.Filter , ";","")
Ah ::)
Das macht Sinn und läuft einwandfrei!
Vielen herzlichen Dank! :)
Hallo,
Ich kann's nicht lassen ;)
LIKE ohne Joker (*,?) macht keinen Sinn, ausser man weiss, dass die
Anwender so versiert sind und sie von sich aus verwenden.
Wenn mit dem kompletten Inhalt von "Me!Text44" verglichen werden
soll muss der Operator "=" sein. Ansonsten sind eben an der richtigen
Stelle Jokerzeichen einzufügen.
Aber LIKE bei einem Zahlenfeld zu verwenden ist noch unsinniger; - eine
Zahl ist eine Zahl in Gänze.
Dein Fehler in der FROM-Klausel rührt von dem ";" vor dem WHERE. Das hat
da nichts zu suchen. Und auch am Ende muss es nicht sein, - da schadet es
aber auch nicht.
gruss ekkehard
P.S. Viel Spass in der Zukunft mit deinen nichtssagenden Objektnamen.
Zur Vollständigkeit: Eine Formularrecordset, auch und besonders wenn es besondere Filterungen hat (in ein Hauptformular verknüpftes Unterformular, zusätzliche Filterungen), kann man auch als solches nehmen und mit der CopyFromRecordset-Methode in ein Exceltabellenblatt einfügen, dann auch einfach an beliebige Positionen im Blatt.
Dazu müsste man vorher Excel und die Arbeitsmappe geöffnet haben (per Automation oder schon vorhanden).
Das Extra-Öffnen würde wegen des großen Objektes auch etwas länger dauern als ein Export per TransferSpreadsheet. Es könnte aber auch sein, dass man an der Mappe sowieso weiteres vorhat (Tabellenformatierung, weitere Maßnahmen).
Man würde sich aber das Nachstellen einer SQL-Anweisung, die das gewünschte Formularrecordset wiedergibt, sparen.