Hallo ihr Wissenden!
Ich habe in einer Datenbank an der ich bastle, eine Abfrage erstellt, die mir bestimmte Werte zurückliefern soll. Das klappt soweit auch super. Mit den Ergebnissen dieser Abfrage sollen bestimmte Felder in einem Formular gefüllt werden. Auch dieses klappt beim ersten Feld noch tadellos. Wie bekomme ich jetzt aber z.B. den zweiten Wert der Abfrage im ausgegeben?
Beispiel: Meine Abfrage gibt das Alter der Mitarbeiter, das in der "tbl_personal" im Feld "Lebensalter" gespeichert ist, aus. Über eine WHERE-Klausel im SQL-Code der Abfrage wird das Ergebnis eingegrenzt, etwa auf alle über 50 jährigen.
SELECT tbl.personal.lebensalter
FROM tbl_personal
WHERE lebensalter > 50
In meinem Beispiel würde die Abfrage, wenn ich sie ausführen lassen, die Ergebnisse 51, 55, 59 und 63 zurückliefern.
In das erste Textfeld des Formular wird nun auch treu und brav der Wert 51 eingetragen. Wie bekomme ich jetzt aber in das zweite Textfeld die 55, in das dritte Textfeld die 59 usw.?
Ich hoffe auf Hilfe von eurer Seite, durch googeln bin ich schon auf die TOP... Funktion von SQL gestoßen, jedoch bekomme ich noch nicht so ganz den Durchblick, wie ich damit den zweiten Wert ins zweite Feld bekomme usw.
Es grüßt von der sonnigen Küste
Samurai2_de
Hallo,
ich denke, Du brauchst sonst nichts wie ein Endlosformular, dann werden die gefundenen Datensätze einfach untereinander angezeigt. Die Felder können nicht nebeneinander angezeigt werden, denn das sind ja verschiedene Datensätze (Personen).
Zitatdas in der "tbl_personal" im Feld "Lebensalter" gespeichert ist,
es macht keinen Sinn, das Alter in die Tabelle zu schreiben. Das Alter kann sich täglich Ändern. Das Alter ermittelt man ohne zu Speichern nur in einer Abfrage.
Okay, ich denke meine Frage war nicht genau genug gestellt und das Beispiel war auch Mist, daher alles nochmal auf Anfang. :-[
Nach dem Ratschlag von MzKlMu habe ich nun ein Endlosformular erstellt, in dem es u.a. ein Textfeld gibt. Dieses Textfeld soll nun, wenn das Formular geöffnet wird, mit dem Ergebnis einer Abfrage gefüllt werden. Die Abfrage wurde auch schon erstellt und gibt als Ergebnis wenn ich sie ausführe z.B. "Fall 1", "Fall 5", "Fall 7" zurück. In dem Textfeld im Endlosformular erscheint nun aber immer nur "Fall 1" und es wird nur eine Zeile im Formular ausgegeben. Wie erreiche ich, dass das Endlosformular drei Zeilen bekommt, wobei in der ersten Zeile "Fall 1", in der zweiten Zeile "Fall 5" und in der dritten Zeile "Fall 7" steht?
Zur Info: Je nach Konstellation kann das Abfrageergebnis auch mehr oder weniger "Fälle" anzeigen. Ich brauche also immer genau so viele Zeilen in meinem Formular, wie Ergebnisse der Auswahlabfrage vorliegen.
Geht sowas überhaupt?
Entschuldigt bitte meine ungenaue Fragestellung in meinem Ursprungspost, ist eine schlechte Angewohnheit von mir, mich zu nächtlicher Stunde mit solchen Problemen herumzuwälzen.
Vielen Dank schon einmal für eure weitere Hilfe!
Mit Gruß von der Küste
Samurai2_de
Hallo,
zeige bitte mal den SQL Text dieser Abfrage.
Wenn das Endlosformular an diese Abfrage gebunden wird, werden automatisch die entsprechenden Datensätze der Abfrage angezeigt.
SELECT tbl_zaehlfaelle.ZFName
FROM tbl_zaehlfaelle
WHERE (((tbl_zaehlfaelle.ZFGruppen.Value) = (SELECT tbl_login.gruppen FROM tbl_login)))
ORDER BY tbl_zaehlfaelle.ZFName DESC;
(ich hoffe, ich habe den Code richtig abgetippt, kann gerade kein Copy & Paste anwenden)
Zur Erklärung:
In dieser Datenbank soll eine Art von Kosten- und Leistungsrechnung geführt werden. In unregelmäßigen Abständen bekommen alle Abteilungen im Betrieb des Auftrag, zuvor festgelegt Zählfälle zu zählen (z.B.: Lohnbuchhaltung -> Lohnabrechung erstellen). In der tbl_personal werden die im Betrieb tätigen Personen verwaltet und ihrer Arbeitseinheit zugewiesen. (z.B. "Meyer" arbeitet in der "Lohnbuchhaltung"). In der tbl_zaehlfaelle werden die zu zählenden Arbeitsfälle erfasst und den jeweiligen Abteilungen im Betrieb zugewiesen. Dies geschieht über das Feld "ZFGruppen" in "tbl_zaehlfaelle". Das Feld "ZFName" gibt den Namen des Zählfalls an (z.B. "Lohnabrechnung erstellen"). Das Feld "ZFGruppen" ist ein Feld, dass eine Mehrfachauswahl zulässt, da einzelne Arbeitsfälle in mehreren Abteilungen durchgeführt werden können und dann in jeder Abteilung gezählt werden müssten.
In der tbl_login werden die Login-Daten der Person gespeichert, die sich (über ein selbstgebautes Login-Formular) in der Datenbank angemeldet haben. In diese Tabelle wird in das Feld "Gruppen" der Wert aus der tbl_personal übergeben, in welcher Abteilung der Anmelder tätig ist. Hier im Beispiel also: Loggt sich Herr Meyer in die Datenbank ein, wird der Wert 2 (stellvertretend für die Lohnbuchhaltung) an die tbl_login übergeben und zwischengespeichert.
Mit der oben beschriebenen Abfrage werden mir, wenn ich die Abfrage ausführe, alle Zählfälle ausgegeben, die der Abteilung "Lohnbuchhaltung" zugewiesen sind. Beim testweisen einloggen mit unterschiedlichen Personen klappt die Abfrage auch immer, so dass mir immer die Zählfälle für die Abteilung ausgegeben werden, in der die Person tätig ist.
Und jetzt folgt halt mein Problem, dass die Leute nun ein Formular zum Erfassen der Zählfälle bereitgestellt bekommen sollen. Hierbei soll Meyer aber natürlich nur die für ihn relevanten Zählfälle sehen und nicht, was z.B. in der Fertigung gezählt werden muss. Wie gesagt: die Abfrage funktioniert wunderbar und gibt mir auch treu und brav die Zählfälle aus, die relevant sind. Nur mein Textfeld weigert sich noch, die Zählfälle nacheinander anzuzeigen.
Frage hierzu: woran sollte ich denn die Abfrage binden? Ich habe sie zur Zeit an das Ereignis "Beim Anzeigen" des Formulars gebunden und benutze dazu über VBA den DLookup-Befehl für das Textfeld. Mir kommen gerade Zweifel, dass dies korrekt ist. Nur leider habe ich gerade ein Brett vor dem Kopf, woran ich die Abfrage richtigerweise binden muss... :-[
Für weitere Hilfe wäre ich euch sehr dankbar und verbleibe mit fröhlichem Gruß aus der Nachtschicht
Samurai2_de
Okay, Hilfe zur Selbsthilfe oder wie man bei mir beim Bund noch sagte: "Denken, drücken, sprechen!"
Ich habe mein Endlosformular noch einmal neu aufgebaut und diesmal die Abfrage als Herkunft angegeben. Dann wird mir in meinem Formular auch sehr sauber das Ergebnis der Abfrage untereinander ausgegeben, so wie es sein soll.
Nun stellt sich mir aber noch die nächste Frage: wie kann ich nun die Felder aus der tbl_buchungen (in der die Arbeitsfälle der Mitarbeiter nachher gespeichert werden) mit in das Formular einbauen, so dass ich z.B. auch die Anzahl der getätigten Arbeitsfälle in diesem Formular mit eintragen kann und diese Eintragungen dann in der tbl_buchungen gespeichert werden. Das Formular soll nachher in etwa so aussehen:
------------------------------------------------------------------------------------------------------------------------------------------
[Datum für das gebucht werden soll]
[Name des Bearbeiter]
[von Uhrzeit1][bis Uhrzeit1] [von Uhrzeit2][bis Uhrzeit2] [von Uhrzeit3 usw.][bis Uhrzeit3 usw.]
[Zählfall 1] [Anzahl der Zählfälle] [Anzahl der Zählfälle] [Anzahl der Zählfälle]
[Zählfall 2] [Anzahl der Zählfälle] [Anzahl der Zählfälle] [Anzahl der Zählfälle]
[Zählfall 3 usw.] [Anzahl der Zählfälle] [Anzahl der Zählfälle] [Anzahl der Zählfälle]
-------------------------------------------------------------------------------------------------------------------------------------------
Beispiel:
------------------------------------------------------------------------------------------------------------------------------------------
[12.05.2016]
[Meyer]
[06:00][bis 08:00] [08:00][bis 10:00] [10:00][bis 12:00]
[Lohnabrechnung erstellen] [5] [13] [1]
[Telefonate in Minuten] [3] [15] [25]
[Verteilzeit in Minuten] [10] [7] [7]
-------------------------------------------------------------------------------------------------------------------------------------------
(Bitte nicht über Sinn und Unsinn der unterschiedlichen Arten der Zählfälle diskutieren (mal Anzahl, mal Minuten usw.), diese Diskussion bin ich mit meiner Chefetage inzwischen leid. Es gibt halt Fälle, für die ein fester Zeitansatz besteht, andere sollen minütlich erfasst werden... ist halt so. ;-) )
Den Namen des Bearbeiters entnehme ich wieder der tbl_login, dahin wurde er beim einloggen eines Bearbeiters in die Datenbank übergeben.
Der Inhalt des Datumsfelds wird über eine Kalendertabelle bereitgestellt.
Die Zählfälle komme wie schon beschrieben aus der Abfrage.
Die Zeiträume (Uhrzeit), in denen gezählt werden soll, werden über VBA mit dem DLookup herausgesucht, wenn der Wert im Formularfeld [Datum] geändert wird (klappte in meinem alten Formular auch schon super).
Wenn das Formular nun ausgefüllt wird, müssen die Werte für das Buchungsdatum, den Zeitraum, den Zählfall, den Bearbeiter und die Menge an eine Tabelle übergeben und dort gespeichert werden. Angedacht war, dass dies in der tbl_buchungen geschehen soll.
Ist das so realisierbar?
Wenn ja: wie erreiche ich, dass ich die Felder aus der Tabelle tbl_buchungen in dem Endlosformular, das auf der Abfrage für die Zählfälle basiert, verarbeiten kann.
Wenn nein: wie müsste ich die Datenbank dann korrekt aufbauen, um meine Buchungen speichern und hinterher im Rahmen eines Reports auch auswerten zu können?
Verwirrte Grüße aus der Nachtschicht
Samurai2_de
Hallo,
zeige bitte einen Screenshot des Beziehungsfensters so, dass man alle Tabellenfelder daraus entnehmen kann.
Dein Beispiel zeigt eine Kreuztabelle, die als solche nicht editiert werden kann und deshalb nicht zum gewünschten Ziel führt.