Neuigkeiten:

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

Mobiles Hauptmenü

Abfragen wenn Tabellenname ... enthält?

Begonnen von Knopf, Juli 15, 2017, 12:17:31

⏪ vorheriges - nächstes ⏩

Knopf

Hallo!
Ich bins mal wieder...Diesmal mit folgendem Problem:
ich möchte eine Union-Abfrage erstellen. Es sollen alle Tabellen zusammengeführt werden, die in ihrem Namen das Wort "Import" haben. Ist sowas möglich? Ich habe dashier schon testweise probiert:
SELECT * FROM 0_Test1
UNION ALL SELECT * FROM 0Test*;
(Alle Tabellen bei denen der Name mit "0Test" beginnt sollen übertragen werden.
Surprise, Surprise...eso geht es nicht

Danke für eure Hilfe!

Lachtaube

Platzhalterzeichen sind für Feld- und Tabellennamen in SQL-Abfragen nicht erlaubt.
Grüße von der (⌒▽⌒)

markusxy

Ich nehme an deine Tabelle heißt nicht "0Test*", sondern du willst damit alle Tabellen einbinden die mit 0Test beginnen.

Du musst aber für jede Tabelle einzeln den Union Select schreiben.

SELECT * FROM 0_Test1
UNION ALL SELECT * FROM 0Test2
UNION ALL SELECT * FROM 0Test3;

ebs17

Es stellt sich die Frage, warum Du nicht gleich in EINE Tabelle importierst?
Mit freundlichem Glück Auf!

Eberhard

Lachtaube

Eberhards Anmerkung genießt natürlich Priorität. Mit einem kleinen Schluck Kreativgeist aus der Flasche, könnte man aber auch zu einer solchen Lösung gelangen.
'Beispielaufruf: CreateCustomUnionQuery "DeinZielabfragename", "0Test*"
Public Sub CreateCustomUnionQuery(QName As String, Pattern As String)
   Dim tn() As String
   Dim i    As Long
   Dim o    As AccessObject
   
   If QueryExists(QName) Then CurrentDb.QueryDefs(QName).Delete
   ReDim tn(CurrentData.AllTables.Count - 1)
   For Each o In CurrentData.AllTables
      If o.Name Like Pattern Then
         tn(i) = o.Name
         i = i + 1
      End If
   Next
   
   If i > 0 Then
      ReDim Preserve tn(i - 1)
      Call CurrentDb.CreateQueryDef(QName, "SELECT * FROM " & _
                                           Join(tn, vbCrLf & "UNION ALL" & _
                                           vbCrLf & "SELECT * FROM ") & ";")
   End If
   
End Sub

Public Function QueryExists(QName As String) As Boolean
   Dim o As AccessObject
   
   For Each o In CurrentData.AllTables
      If o.Name = QName Then
         QueryExists = True
         Exit Function
      End If
   Next
End Function
Grüße von der (⌒▽⌒)

Knopf

Hallo!

Der Kreativitätsgeist hat geholfen ;)
Ein bisschen musst ich noch ändern:
Aus
If QueryExists(QName) Then CurrentDb.QueryDefs(QName).Delete
wurde
If QueryExists(QName) Then db.QueryDefs.Delete QName
und aus
For Each o In CurrentData.AllTables
wurde
For Each o In CurrentData.AllQueries

Vielen Dank euch allen!!