Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Mehrere Datensätze im Formzular einmal anlegen

Begonnen von pahiti78, Juli 14, 2012, 21:33:57

⏪ vorheriges - nächstes ⏩

pahiti78

Hallo Zusammen,

ich habe folgendes Problem. Ich habe eine DB in der meine Trainingsfortschritte (krafttraining gespeichert werden). Beim Krafttraining macht man ja verschiedene Übungen und verschiedene viele Sätze bzw. WHd mit verschiedenen Gewichten. Ich habe dazu Tabelle "tbl_training", welche die Spalten Datum, Übung, Wiederholung und Gewicht speichert.
Ich muss jetzt jeden Satz einzeln im Formular anlegen und speichern. Ich würde gern mehrere Sätze auf einmal speichern können. Ich stell mir dies ungefähr so vor: Ich leg im Formular ein Datum und habe dann ca.10 Eingabefelder für meine Übungen, weitere 10 Felder für die dazugehöroigen Wdh und den dazugehörigen Gewichten. Ich hatte die Vorstellung die Tablle um die Spalten Übung1-Übung10, Wdh1-Wdh10, Gewicht1-Gewicht10 zu ergänzen. Da allerdings mehrere Berichte ebenfalls im Projekt integriert sind, müsste ich diese und alle Abfragen ebenfalls umschreiben.
Gibt es eine Möglichkeit dies zu umgehen. Ich würde gern die alte Tabellenstruktur beibehalten und pro Eingabe im Formlar halt 10 Datensätze mit gleichen Datum anlegen können. Hat jemand ne Idee?
Danke schonmal vorab.
Gruß
Matze

Beaker s.a.

Hallo pahiti,
ZitatIch würde gern die alte Tabellenstruktur beibehalten und pro Eingabe im Formlar halt 10 Datensätze mit gleichen Datum anlegen können.
Auf jeden Fall so lassen; nummerierte Spalten widersprechen den Normalisierungsregeln.
Zum Problem; lege Dir eine Hilfstabelle an, die nur eine Spalte mit durchlaufender
Nummerierung hat.
Um dann gleichzeitig n (bei Dir 10) DS auf einen Rutsch einzufügen, joinst Du diese
Tabelle in eine INSERT-Abfrage.
Luftcode:

            "INSERT INTO tbl_training( " _
                & "trainingDatum, " _
                & "Uebung, " _
                & "Wiederholung, " _
          & "SELECT " _
                & Date & ", " _
                & HerkunftUebung & ", " _     '<-- z.B. KombiFeld im Form
                & HT.Nr " _
          & "FROM tbl_training AS T " _
                & "INNER JOIN Hilfstabelle AS HT " _
                & "ON T.ID = HT.Nr" _
          & "WHERE HT.Nr <= 10"

hth
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

pahiti78

Hallo Ekkehard,
danke für die Info. Was soll die Hilfstabelle bewirken? Ich kann dir nicht so richtig folgen.
Gruß
Matze

Beaker s.a.

Hallo pahiti,
Die bewirkt, dass automatisch 10 DS gleichzeitig eingefügt werden.
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

pahiti78

Ja nach mehrfachen Lesen wurde mir halbwegs klar, worauf es hinausläuft. Kannst du mir noch schreiben, wie man eine laufende Nummer kreiert. Oder soll dies einfach über den Primärschlüssel laufen lassen?
Gruß
Matze

pahiti78

Hallo Ekkehard,
wäre es auch möglich die ungebundenen Textfelder mittels SQl der Tabelle anzufügen?
Gruß
Matze

Beaker s.a.

Hallo pahiti,
Zitatwie man eine laufende Nummer kreiert. Oder soll dies einfach über den Primärschlüssel laufen lassen?
Du meinst per Autowertfeld?
Ja, das sollte funzen, Du musst halt auf eine lückenlose Reihenfolge achten.
wäre es auch möglich die ungebundenen Textfelder mittels SQl der Tabelle anzufügen?
Ja, sicher, musst Du nur darauf achten, dass die auch befüllt sind,
also codemässig prüfen bevor das INSERT gefeuert wird, oder im SQL mit Nz abfangen.
Ich würde ersteres bevorzugen.
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

ebs17

#7
@ekkehard: Ein INNER JOIN ist zum Vervielfältigen nicht geeignet, dieser filtert (Gleichheit des Schlüssels)! In Verbindung mit einer Hilfstabelle würde ein OUTER JOIN vervielfältigen, allerdings nur den Schlüssel.

"Gnadenlose" Vervielfältigung findet über CROSS JOIN's statt:
SELECT HT.Nr, T.Feld, T.WeiteresFeld
FROM Hilfstabelle HT, tbl_training T
WHERE HT.Nr Between 1 AND 10


Bezüglich Thementitel: In einem Formular kann man nur jeweils einen neuen Datensatz anlegen. Bei mehreren würde eine Schleife benötigt werden.

Mehrere Datensätze auf einmal kann man in einer Tabelle anlegen, und das über ein Abfrage wie gezeigt (Massendatenverarbeitung).

MfGA
ebs
Mit freundlichem Glück Auf!

Eberhard

Maxel

Würde es evtl. nicht genügen, dem Datum und ggf. weiteren Feldern den Standardwert aus dem vorigen Datensatz mitzugeben?
Viele Grüße
Maxel

Beaker s.a.

Hallo Eberhard,
Danke für Deine Korrektur. Hast natürlich recht, hier
braucht man ein Kreuzprodukt.
ZitatIn einem Formular kann man nur jeweils einen neuen Datensatz anlegen.
Bei mehreren würde eine Schleife benötigt werden.
In einem Endlosform könnte ich doch per Schaltfläche die
diskutierte Abfrage starten, und dann genau diese neuen DS zur
Weiterbearbeitung/Ergänzung im Form anzeigen, was IMO auch das
Begehren des TS ist.
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

ebs17

Ja, ein Formular kann Datensätze einer Tabelle/Abfrage anzeigen. Das ist ja eine Grundfunktionalität eines Formulares.
Erzeugen kannst Du mehrere Datensätze auf einmal aber nur über eine Anfügeabfrage auf eine Tabelle oder über eine passende Abfragekonstruktion.

Ein Formular selber beruht auf einem Recordset(objekt) und kann damit nur dessen Aktionen, und das sind dann Einzelaktionen.
ZitatIn einem Endlosform könnte ich doch per Schaltfläche die
diskutierte Abfrage starten, und dann genau diese neuen DS zur
Weiterbearbeitung/Ergänzung im Form anzeigen
Wie gesagt, die Anfügeabfrage erweitert die Tabelle, zur Anzeige im Formular benötigt man ein Neuabrufen der Datenherkunft (Requery).
Das Ergebnis der mehreren Schritte ist dann natürlich im Sinne des Threaderstellers, aber es bleibt dabei: Es können nicht mehrere Datensätze auf einmal in einem Formular erzeugt werden.

MfGA
ebs
Mit freundlichem Glück Auf!

Eberhard