Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: Mezcalero am August 05, 2020, 18:37:28

Titel: Unterformular gefiltert exportieren
Beitrag von: Mezcalero am August 05, 2020, 18:37:28
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
Titel: Re: Unterformular gefiltert exportieren
Beitrag von: DF6GL am August 05, 2020, 18:42:14
Hallo,

die Formularverweise halte ich für kritisch, bzw. mit latenten Fehlern behaftet..


Wie lautet der ausgegebene  sSQL-String ?
Titel: Re: Unterformular gefiltert exportieren
Beitrag von: Mezcalero am August 05, 2020, 18:58:19
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'
Titel: Re: Unterformular gefiltert exportieren
Beitrag von: DF6GL am August 05, 2020, 19:35:15
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 , ";","")
Titel: Re: Unterformular gefiltert exportieren
Beitrag von: Mezcalero am August 05, 2020, 20:11:14
Ah  ::)

Das macht Sinn und läuft einwandfrei!

Vielen herzlichen Dank!  :) 
Titel: Re: Unterformular gefiltert exportieren
Beitrag von: Beaker s.a. am August 06, 2020, 18:29:32
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.
Titel: Re: Unterformular gefiltert exportieren
Beitrag von: ebs17 am August 06, 2020, 19:05:04
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.