Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Unterformular gefiltert exportieren

Begonnen von Mezcalero, August 05, 2020, 18:37:28

⏪ vorheriges - nächstes ⏩

Mezcalero

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

DF6GL

Hallo,

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


Wie lautet der ausgegebene  sSQL-String ?
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

Mezcalero

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'

DF6GL

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 , ";","")
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

Mezcalero

Ah  ::)

Das macht Sinn und läuft einwandfrei!

Vielen herzlichen Dank!  :) 

Beaker s.a.

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.
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

ebs17

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.
Mit freundlichem Glück Auf!

Eberhard