Access mehrere Tabellen durchsuchen.

peti45

Newbie
Registriert
Okt. 2017
Beiträge
4
Hallo zusammen,

mein Problem: Ich hab eine Datenbank mit mehreren Tabellen die denn gleichen Aufbau haben ( alle spaltennamen sind gleich). Jede Woche kommt so eine Tabelle ins System hinzu (aktuell etwa 250 stk.). Jetzt hab ich den Auftrag bekommen mit Access ein Formular zu erstellen in dem man das eingibt was man sucht (zeitraum, auftragsnummer, ...) dann alle Tabellen durchgeht und alles (alle Tabellen zeilen) auflistet was zu den Suchbegriffen passt.

Da ich so gut wie gar keine erfahrung mit Access/VBA hab und bis jetzt nur so weit bin das ich nur eine Tabelle durchsuchen kann und absolut (nach 3 Tagen googlen) nichts Hilfreiches gefunden habe bräuchte ich einen kleinen Denkansatz oder vielleicht schon eine Lösung.

Vielen Dank im Voraus!
 
Das wär ein Lösungsansatz, aber laut Verfasser packt diese Methode nicht mehr wie 50 Tabellen und ich müsste jede woche den Code ändern um die eine neue Tabelle hinzuzufügen.

Trotzdem Danke
 
Ich würde folgendermasen vorghehen. Allerdings musst Du in VBA programmieren können.

1. Schritt: Die versteckten Access-Systemobjekte sichtbar machen, damit Du auf die Tabelle "MSysObjects" zugreifen kannst.

2. Dann eine Abfrage auf diese MSysobject-Tabelle mit der Du alle Deine manuell erstellten Tabellen als Ergebnis erhälst: In der WHERE Bedingung müsste folgendes stehen: WHERE (MSysObjects.Type=1) AND (MSysObjects.Flags=0).

Also : SELECT NAME FROM MSysObjects WHERE (MSysObjects.Type=1) AND (MSysObjects.Flags=0)

3. Diese Abfrage enthält alle Deine manuell erstellen Tabellennamen. Mit diesem Erebnis musst Du jetzt mit weiterem VBA Code arbeiten. So kannst Du auf ALLE Deine manuelle generierten Tabellen zugreifen. Jetzt musst Du per VBA mit diesem Ergebnis weitere Abfragen bauen/erstellen damit Du die Ergebnisse der jeweiligen Tabellen erhälst.

Hinweis: Wie Du die versteckten Systemtabellen in einer Access-Datenbank sichtbar machst ist in den einzelnen Access-Versionen unterschiedlich gelöst.

Bei Access 2010 musst Du unter DATEI/OPTIONEN/AKTUELLE DATENBANK/Die Taste "Navigationsoptionen..." anklicken. In dem aufpopenden Fenster musst du die Häkchen setzen bei: "Ausgeblendete Objekte anzeigen" und "Systemobjekte anzeigen"
 
Zuletzt bearbeitet:
Danke,

ich schau mal wie weit ich komm. Die Tabellen sind aufjedenfall schonmal sichtbar :)
 
Zuletzt bearbeitet:
@Gameforce Danke nochmal dein Tipp hat echt geholfen :) nun eine letzte Frage kann ich über VBA eine temporäre Tabelle erstellen dort die ergebnis zeilen eintragen lassen, diese dann anzeigen und nach dem schließen wieder löschen?
 
Zuletzt bearbeitet:
Also ich würde es so machen:

Ich würde zunächst ein Recordset-Objekt mit den Tabellennamen füllen lassen.

Pseudo VBA (da ich es nicht testen kann):
Dim Myrecordset1 as adodb.recordset
Dim Myrecordset2 as adodb.recordset
Dim SQLStr1 as string
Dim SQLStr2 as string

Set MyRecordset1 = new adodb.recordset
Set MyRecordset2 = new adodb.recordset

sqlstr1 = "SELECT NAME FROM MSysObjects WHERE (MSysObjects.Type=1) AND (MSysObjects.Flags=0)"
Myrecordset1.open Sqlstr1

if (Myrecordset1.recordcount >0) then
do while (Myrecordset1.eof = false)
Tabelle = trim(Myrecordset1.fields("Name").value & "")

'*** 1. mit dem Namen in dem String Tabelle musst Du jetzt die Tabellen öffnen und auswerten und die Ergebnisse in Variablen oder Objekten merken.
'*** 2,. Variante Du baust dir mit einer Schleife Eine UNION Abfrage.


sqlstr2 = "SELEC T * FROM " & Tabelle & "
sqlstr2 = sqlstr2 & " WHERE " '... hier nun Deine Abfragebedingungen einbauen
Myrecordset2.open Sqlstr2
if(myrecordset2.recordcount >0) then

'mit den Treffern der Tabelle kannst Du nun arbeiten:

Wert1 = myrecordset2.fields("Feldxy").value & "" 'Feldxy ist ein feldname der Tabelle
'usw....
' Du kannst auch ein neues Recordset-Objekt erstellen und den treffer in diesem 3. neuen 'recordset-Objekt speichern. Du musst natürlioch zuvor dieses 3. recordset-objekt mit den 'entsprechenden feldern anlegen und dann mit den Ergebnissen der einzelnen Tabellen befüllen...
'Aber das ist ein anderes Thema.

end if
myrecordset2.close

Myrecordset1.movenext
loop
end if
 
Zuletzt bearbeitet: (.)
Zurück
Oben