Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: Knopf am Juli 15, 2017, 12:17:31

Titel: Abfragen wenn Tabellenname ... enthält?
Beitrag von: Knopf am Juli 15, 2017, 12:17:31
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!
Titel: Re: Abfragen wenn Tabellenname ... enthält?
Beitrag von: Lachtaube am Juli 15, 2017, 12:53:07
Platzhalterzeichen sind für Feld- und Tabellennamen in SQL-Abfragen nicht erlaubt.
Titel: Re: Abfragen wenn Tabellenname ... enthält?
Beitrag von: markusxy am Juli 15, 2017, 13:10:38
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;
Titel: Re: Abfragen wenn Tabellenname ... enthält?
Beitrag von: ebs17 am Juli 15, 2017, 13:15:31
Es stellt sich die Frage, warum Du nicht gleich in EINE Tabelle importierst?
Titel: Re: Abfragen wenn Tabellenname ... enthält?
Beitrag von: Lachtaube am Juli 15, 2017, 13:41:19
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
Titel: Re: Abfragen wenn Tabellenname ... enthält?
Beitrag von: Knopf am Juli 22, 2017, 11:42:24
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!!