Geht das? in der Abfrage fragen, welche Tabelle?

HI!

Ich habe jede Menge Tabellen, die alle gleich aufgebaut sind, inhaltlich aber verschieden (Angebote von Aldi und Lidl etc im Januar, Februar etc. So isses nicht, aber im Prinzip). Nun will ich eine Abfrage bauen, die als erstes Fragt, auf welche Tabelle sie zugreifen soll, und dann die definierte Abfrage auf die jeweilige TAbelle anwendet. Hintergrund ist klar: ich bin faul! Auf diese Abfrage bauen dann wiederum Berichte auf und die will ich nicht jedesmal neu machen.

Ich hab nicht mal eine Idee, wie das gehen könnte - bin auch ziemlicher Anfänger.

Workaround-Vorschlag dazu …
Ahua.

Aus dem Hut habe ich keinen Vorschlag, wie das aus einer Abfrage heraus zu lösen wäre. Du könntest aber eine Public-Prozedur schreiben, die so etwas kann (Registerkarte „Modul“ und ein neues machen). Ungetestet und einfach so hingezwiebelt jetzt; müsste aber normalerweise klappen tun …

Public Sub MachsMir()
Dim lpm\_str\_SQLStmnt As String 'das wird Deine Abfrage, nur auf SQL
Dim lpm\_str\_TableNam As String 'da kommt der Tabellenname rein
lpm\_str\_TableNam=InputBox("Bitte Tabelle angeben")
lpm\_str\_SQLStmnt="SELECT bim,bam,bum FROM "+ \_
 lpm\_str\_TableNam+ \_
 " WHERE bla=blubb"
CurrentDB.Execute lpm\_str\_SQLStmnt
End Sub

Damit wird eine Abfrage (die SELECT-Anweisung und die WHERE-Klausel kopierst Du Dir am besten aus Deiner vorhandenen Abfrage [SQL-Ansicht]) generiert und ausgeführt. Lässt sich mit Sicherheit noch behübschen - vor allem müsste man den Tabellennamen noch prüfen, weil es sonst bei einer Falscheingabe gnadenlos knallt. Und die InputBox-Funktion ist auch nicht des Eies Gilb …

Die Routine wiederum lässt sich aus einer Abfrage oder einem Formular heraus aufrufen … ist nur eine Lösungsskizze, vielleicht hilft Dir das schon aufs Pferd. Werde aber mal sehen, ob es nicht eine Lösungsmöglichkeit per Parameter-Abfrage gibt. Ebbes Geduld, bitte.

Gruß Eillicht zu Vensre

Hi Jutta!

Ich habe jede Menge Tabellen, die alle gleich aufgebaut sind,

gut, das alle Tabellen gleich aufgebaut sind

inhaltlich aber verschieden (Angebote von Aldi und Lidl etc
im Januar, Februar etc. So isses nicht, aber im Prinzip).

gut, also klar definierte Unterschiede sind vorhanden

Nun will ich eine Abfrage bauen, die als erstes Fragt, auf welche
Tabelle sie zugreifen soll,

das kann eine Abfrage selber nicht, da sie immer auf einer Tabelle als Basis besteht.

und dann die definierte Abfrage auf die jeweilige TAbelle anwendet.

wenn du die FRage in einem formular stellst, und die Antwort als Basis für die Abfrage nimmst, sollte es gehen.

Hintergrund ist klar: ich bin faul!

Wie alle, die einen PC, ein Auto, eine Küchenmaschine etc. nutzen :smile:

Auf diese Abfrage bauen dann wiederum Berichte auf
und die will ich nicht jedesmal neu machen.

da solltest du dir mal überlegen, ob es nicht sinnvoller wäre, alle Inhalte in einer globalen Tabelle zusammenzufassen. Dann reicht eine Abrage zum auswerten.

Grüße aus Essen
Wolfgang

Hi Jutta!

Ich habe jede Menge Tabellen, die alle gleich aufgebaut sind,

gut, das alle Tabellen gleich aufgebaut sind

inhaltlich aber verschieden (Angebote von Aldi und Lidl etc
im Januar, Februar etc. So isses nicht, aber im Prinzip).

gut, also klar definierte Unterschiede sind vorhanden

Nun will ich eine Abfrage bauen, die als erstes Fragt, auf welche
Tabelle sie zugreifen soll,

das kann eine Abfrage selber nicht, da sie immer auf einer
Tabelle als Basis besteht.

und dann die definierte Abfrage auf die jeweilige TAbelle anwendet.

wenn du die FRage in einem formular stellst, und die Antwort
als Basis für die Abfrage nimmst, sollte es gehen.

Scheint mir ein vielversprechender Weg, werde daran rumtesten. Danke!

Hintergrund ist klar: ich bin faul!

Wie alle, die einen PC, ein Auto, eine Küchenmaschine etc.
nutzen :smile:

Auf diese Abfrage bauen dann wiederum Berichte auf
und die will ich nicht jedesmal neu machen.

da solltest du dir mal überlegen, ob es nicht sinnvoller wäre,
alle Inhalte in einer globalen Tabelle zusammenzufassen. Dann
reicht eine Abrage zum auswerten.

Nee, das ist nicht der Weg, das sind Monatstabellen mit jeden Monat neuen Primärschlüsseln, die Tabelle würde arg schnell arg riesig. HAb ich schon überlegt. Leider.

Grüße aus Essen
Wolfgang

HI!

Ich habe jede Menge Tabellen, die alle gleich aufgebaut sind,
inhaltlich aber verschieden (Angebote von Aldi und Lidl etc
im Januar, Februar etc. So isses nicht, aber im Prinzip).

  1. Frage: Kannst du daran was ändern?
    Grund: Die von dir skizzierte Aufteilung hat mit einer bei Datenbanken angestrebten Normalisierung nicht wirklich etwas zu tun.
    Vielmehr müssten alle diese Datensätze in EINE Tabelle und dann anhand ihrer Kriterien gefiltert werden.

Dann würde aus dem hier:

Nun
will ich eine Abfrage bauen, die als erstes Fragt, auf welche
Tabelle sie zugreifen soll, und dann die definierte Abfrage
auf die jeweilige TAbelle anwendet. Hintergrund ist klar: ich
bin faul! Auf diese Abfrage bauen dann wiederum Berichte auf
und die will ich nicht jedesmal neu machen.

nämlich EINE Abfrage und EIN Bericht werden, bei dem jeweils nur der Quelle, also einer zugrundeliegenden Abfrage, ein neuer Filter „Anbieter = ‚Aldi‘ AND Datum = ‚12.12.2012‘“ verpasst werden und du müsstest nicht 1000ende Berichte bzw Abfragen vorhalten.

Gruß
Daniel

HI!

Ich habe jede Menge Tabellen, die alle gleich aufgebaut sind,
inhaltlich aber verschieden (Angebote von Aldi und Lidl etc
im Januar, Februar etc. So isses nicht, aber im Prinzip).

  1. Frage: Kannst du daran was ändern?
    Grund: Die von dir skizzierte Aufteilung hat mit einer bei
    Datenbanken angestrebten Normalisierung nicht wirklich etwas
    zu tun.
    Vielmehr müssten alle diese Datensätze in EINE Tabelle und
    dann anhand ihrer Kriterien gefiltert werden.

Hab ich schon überlegt, macht mich aber nicht wirklich an: Konkret kriege ich in unregelmässigen Abständen sehr grosse Tabellen mit so einer Art Buchungsdaten: Kontonummer, Buchungsschlüssel, Betrag, insgesamt 10 Spalten. Mal für einen Monat, mal für ein Jahr. Dann sind die Kontonummern logischerweise unterschiedlich. Und die Jahresdateien beziehen sich oft auf dasselbe Jahr, haben aber unterschiedliche Stände. Das würde EINE Tabelle schnell arg lang und arg breit machen. Scheint mir auch nicht einfacher im Handling!

Dann würde aus dem hier:

Nun
will ich eine Abfrage bauen, die als erstes Fragt, auf welche
Tabelle sie zugreifen soll, und dann die definierte Abfrage
auf die jeweilige TAbelle anwendet. Hintergrund ist klar: ich
bin faul! Auf diese Abfrage bauen dann wiederum Berichte auf
und die will ich nicht jedesmal neu machen.

nämlich EINE Abfrage und EIN Bericht werden, bei dem jeweils
nur der Quelle, also einer zugrundeliegenden Abfrage, ein
neuer Filter „Anbieter = ‚Aldi‘ AND Datum = ‚12.12.2012‘“
verpasst werden und du müsstest nicht 1000ende Berichte bzw
Abfragen vorhalten.

Gruß
Daniel

Tja, im Brinzib schon, aber eben - siehe oben. Aber danke für die idee!
Fridolinie

Ist es ein Problem, wenn die Tabelle „zu groß“ wird? Wenn ja wieso/was für eins. Für „zu große“ Tabellen gibt’s ja Abfragen etc. :wink: Wenn die Performance unter der Größe leidet, könnte es helfen die Spalten, die als Kriterien für Abfragen und berichte verwendet werden zu indizieren.

(Wahrscheinlich) nicht mehr benötigte Datensätze ließen sich in eine zweite (Archiv-)Tabelle transportiert werden, wo sie außer Platz kein Brot fressen wenn die Berichte die Tabelle mit den aktuellen Daten abgrasen.