Supportnet Computer
Planet of Tech

Supportnet / Forum / Datenbanken

Auswertungen aus Tabelle A in Tabelle B schreiben?





Frage

Hi, wer kann mir helfen? Ich möchte die Ergebnisse einer Abfrage aus Tabelle A in Tabelle B schreiben. Wie mach ich das? Konkret: Tabelle A enthält die Datenfelder Name, Geburtsdatum, Sterbedatum. Diese Tabelle enthält beliebig viele Datensätze, die vom Benutzer manuell eingegeben werden. Tabelle B enthält die Datenfelder Jahreszahl, Anzahl Geburten, Anzahl Sterbefälle. Das Datenfeld Jahreszahl ist manuell gefüllt (Bsp.: 2000, 2001, 2002, ...). Die anderen beiden Datenfelder sollen aus den Angaben der Tabelle A berechnet werden. Wie geht das? Danke schon Mal für Eure Hilfe, Ideen, Anregungen RaBa

Antwort 1 von Toadie

Öffne beide Tabellen.

Mit dem Menü Fenster / Anordnen... kannst du beide Tabellen nebeneinanderlegen.

Nun kannst du wie üblich deine Berechnungen einfügen. Um Werte oder Wertbereiche aus der ersten Tabelle in die zweite zu übernehmen (z.B. für eine Formel) musst du diese Felder einfach markieren.

Beispiel:
=[Datei1.xls]Tabelle1!$A$1+[Datei1.xls]Tabelle1!$B$2
In der zweiten Datei werden die Felder A1 und B2 der Tabelle1 aus Datei1 addiert.

Gruß
dasUngeheuer

Antwort 2 von rabasoft

Sorry!
Es geht nicht um eine Tabellenkalkulation sondern um Tabellen in Datenbanken, im speziellen MS Access XP.
Hatte ich nicht beigeschrieben - war wohl so ins PRoblem vertieft :-o.
Tut mir leid.

Aber vielleicht kannst Du hier ja auch weiterhelfen?

Gruss
RaBa

Antwort 3 von trekking

Verstehe ich es richtig, dass du in deiner Tabelle den Wert der Geburten aus Tabelle A ableiten willst. Sprich alle die in dem WErt Jahreszahl geboren sind sollen addiert werden und ergeben dann das Feld Anzahl der Geburten.
Wenn das so ist, dann erstelle eine Abfrage aufgrund der Tabelle A. Hier schreibst du dann als Kriterium fürs Datum Zwischen#01.01.2001# und #31.12.2001# rein. Oder über entsprechende Felder in einem Formular.
Dann betätigst du das Summenzeichen und gibst als funktion für das feld Geburten Summe ein.
Als ergebnis erhälst du die Summe der Personen die in diesem Zeitraum liegen. Jetzt machst du aus dieser Abfrage eine ANfügeabfrage und fügst die Werte an Tabelle B an.
Eleganter gehts mit VBA. Habe aber vor nächster Woche keine Zeit dir da zu helfen.

Gruß trekking

Antwort 4 von rabasoft

Danke Trekking.
Hab es ausprobiert und es funktioniert.

Aber wie Du schon sagtest: Es wird sehr unschön und führt zu einem Datenwirrwarr, wenn ich nicht nur eine, sondern mehrere Auswertungen in die Tabelle B bekommen will.

Idealerweise sieht das Resultat in Tabelle B am Ende so aus:
#Geburten #Gestorben
2000 3 4
2001 1 7
2002 5 2
2003 0 3
...

Dann kann ich die Tabelle B nachher Zeilenweise (Datensatzweise) für einen Bericht verwenden.

VBA-Hilfe würde ich sehr gerne annehmen, da bin ich nämlich ein ziemlicher Laie! Hab aber schon öfter das Gefühl gehabt, damit könnte es eleganter gehn.

Gruss
Ralf

Antwort 5 von trekking

da empfehle ich dir ein tolles Buch:
Access in 21 Tagen. Denke aus dem Markt und Technik Verlag. Anschaffung lohnt. (*hatmirauchgehilft*)

VBA Hilfe bei deinem Problem kann ich Dir momentan aus Teitgründen nicht gewähren. Wenn du mir aberDeine db schickst und die Problemstellung nochmal aufzeigst, dann denke ich, dass ich Dir ende nächster Woche mal was schreiben kann.
Viele Grüße trekking

Antwort 6 von rabasoft

Danke trekking.

Da würde ich gerne beide Wege verfolgen ...
Literatur und Nachhilfe :-)

Wie kann ich Dir eine Test-DB (ca. 300 KB) schicken? eMail-Adresse?
Erläuterungen würde ich selbstverständlich beifügen. Und Ende nächster Woche ist für mich auch OK.

Gruss
RaBa

Antwort 7 von Knubbel

Hallo RaBa,

habe mal den Vorschlag von Trecking aufgegriffen (Anfügeabfrage erstellen). Mit einigen Tricks funzt dies auch:

Zunächst erstellst du die Tabelle B mit den Feldern Jahr, AnzahlvonGeburtsdatum, AnzahlvonSterbefälle.
Format für alle Felder Zahl.

Nun erstellst du auf Basis deiner Tabelle A die Auswahlabfrage "Geburten"
mit dem berechneten Feld
Jahr:Jahr([Geburtsdatum] und dem Feld Geburtsdatum
Bei Funktion (Summenzeichen anklicken) gibst du ein bei Jahr : Gruppierung, und bei Geburtsdatum : Summe, zusätzlich als Kriterium: <>0

Eine 2. Abfrage in gleicher Form erstellst du als Auswahlabrage "Sterbedaten"
Berechnetes Feld Jahr:Jahr([Sterbedatum]) und Sterbedatum
Auch wieder Gruppierung und Summe.

Nun erstellst du aus der Datenquelle "Abfrage Geburten" eine Anfügeabfrage "Anfügen Geburten" und ordnest die beiden Felder den Feldern deiner Tabelle B zu.

Eine 2. Anfügeabfrage "Anfügen Sterbefälle" erstellst du auf Basis der Datenquelle "Sterbedaten"

Jetzt aber Achtung:
Deine Tabelle B muss leer sein!
Erst dann solltest du die Anfügeabfragen "Anfügen Geburten" und "Anfügen Sterbefälle" je nur 1x ausführen. Deine Tabelle B ist nun aktuell (aber noch unübersichtlich).

Als letztes erstellst du noch eine Auswahlabfrage auf Basis der Tabelle B mit den Feldern Jahr, AnzahlvonGeburtsdatum, AnzahlvonSterbefällen
und gibst die Funktionen
bei Jahr Gruppierung und den beiden anderen Feldern Summe vor. Nun kannst du noch bei Jahr die Sortierubg aufsteigend wählen, und schon hast du das gewünschte Ergebnis.
Mit diesem Dynaset kannst du anschliessend deinen Bericht speisen.

mfg Knubbel

Antwort 8 von trekking

@knubbel
Sieht auch gut aus. Danke.

@rabasoft

schicke es auf vertrieb-de dann den Klammeraffen und dann gmx und im Bereich net
(Mail Adresse wegen Spam so zerüttet*g*)

Antwort 9 von Knubbel

@ rabasoft , @ trekking,

anknüpfend an meine Antwort 7, es geht auch einfacher und eleganter:

1) Tabelle B anlegen mit den Feldern Jahr, AnzahlvonGeburtsdatum, AnzahlvonSterbefälle

2) Auf Basis der Tabelle A eine Abfrage Geburten gestalten (wie in A7 beschrieben) mit den Feldern
Jahr:Jahr([Geburtsdatum]), Geburtsdatum mit den Funktionen Gruppierung und Summe sowie <>0
Diese Abfrage sofort als "Anfügeabfrage" deklarieren und die beiden Felder der Tabelle B zuordnen.

3) Eine gleiche Abfrage gestalten Sterbedaten mit den Feldern Jahr:Jahr([Sterbedatum]), Sterbedatum. Auch wieder Gruppierung, Summe und <>0 als Anfügeabfrage.

4) Auswahlabfrage Gesamtabfrage Geburten/Sterbefälle mit der Basis Tabelle B und den Funktionen Gruppierung (bei Jahr) und Summe (bei den beiden anderen Feldern), Jahr aufsteigend sortiert.

5) Damit das alles auch gut harmoniert, erstellen eines Makros (ohne VBA):
Makroname: Geburtsdaten
Aktion(en):
* ÖffnenTabelle -----> TabelleB
* AusführenBefehl ----> AlleDatensätzeMarkieren
* AusführenBefehl ----> DatensatzLöschen
* ÖffnenAbfrage ----> Anfügen Geburten
* AusführenBefehl ----> Ausführen
* ÖffnenAbfrage ----> Anfügen Sterbefälle
* AusführenBefehl ----> Ausführen
* ÖffnenAbfrage ----> Gesamtabfrage Geburten/Sterbefälle
* Schließen ----> Tabelle ----> TabelleB

Wichtig ist jedoch, dass beim ersten Start des Makros in der Tabelle B mindestens 1 Datensatz vorhanden ist. Einfachste Methode: eine der Anfügeabfragen manuell ausführen. Danach das Makro starten.
Dies bewirkt:
* Alle Datensätze in Tabelle B werden gelöscht
* Alle Geburtsdaten werden in Tab B übertragen
* Alle Sterbedaten werden in Tab B übertragen
* Eine sortierte Zusammenfassung wird erstellt.

Mit der letzten Abfrage (Gesamtabfrage Geburten/Sterbefälle) können dann weitere Berichte / Formulare gespeist werden.

Die Sicherheitsabfragen bei der Ausführung des Makros müssen jeweils mit JA bestätigt werden (ich weiß nicht, wie man diese umgehen kann).

mfg Knubbel

Antwort 10 von rabasoft

Hi Knubbel,

ich habe Deine Antwort 7 ausprobiert und es hat prima geklappt - danke schön :-)

Bei den beiden Anfügeabfragen hast Du Dich allerdings in der Funktion für die "Geburts-" bzw. "Sterbedaten" vertan!
Nicht "Summe" (sonst wird die Summe der Daten berechnet) sonder "Anzahl", dann klappts hervorragend.

Deinen Makro-Ansatz werd ich ebenfalls ausprobieren, ggf. auch Mal probieren, ob ich über den Bericht selbst und ggf. Ereignisprozeduren etwas automatisieren kann.

Um die Automation noch weiter zu verfeinern sollte ich noch prüfen, ob die Tabelle B existiert und wenn ja, ob sie mindestens einen Datensatz enthält!

Danke, das Ihr mich so unterstützt.
Das bringt mich echt weiter

Schöne Grüsse
RaBa

Antwort 11 von 64Bit-Pinguin

Hi Leute,

ich habe zwar keine Zeit Euch hier eine ausführliche Darstellung zu geben, aber was Ihr da gemacht habt ist nicht gerade das Optimum. Wenn Ihr Euer Vorgehen mal aus Access in ein "richtiges" RDBMS übertragen wollt werdet Ihr scheitern. Das Ausgangsproblem läßt sich lösen mit...
...einer SQL-Query (select...) und dem Übertragen dieser Daten aus dem Recordset in die Tabelle B (insert...). In dem select-Befehl wird die Zählung und Gruppierung mittels SQL-spezifischer Operationen durchgeführt.

cu

Euer Pinguin

Antwort 12 von Knubbel

@ rabasoft ,
sorry.
Natürlich muss die Funktion bei den Anfügeabfragen "Anzahl" und nicht "Summe" lauten.

@ Pinguin
Mir ist sehr wohl bewussst, dass mit VBA eine elegantere Lösung möglich ist. Allerdings muss man VBA beherrschen! Da ich keine VBA-Kenntnisse habe, versuche ich halt Lösungen mit den eingebauten Funktionen.
Aber scheinbar ist eine VBA-Lösung nicht so einfach, sonst hätte es bereis Lösungsvorschläge zu diesm Thread gegeben

mfg Knubbel