In 2 Tabellen gleichzeitig speichern

  • VB.NET

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von Skaletti.

    In 2 Tabellen gleichzeitig speichern

    Guten Morgen.
    Ich habe in meinem Projekt ein Dataset mit mehreren Tabellen(Access).Wenn ich zum Beispiel die Details der Tabelle "Schüler" auf ein Form ziehe
    werden ja automatisch die Textfelder angelegt. In die Textfelder eigegebene Werte kann man jetzt in der Tabelle "Schüler" speichern, und beim Form-Load
    wieder in einem Datagridview sichtbar machen (Datagriedview auch auf die Form gezogen).

    Quellcode

    1. Private Sub Jugend_LG_freiBindingNavigatorSaveItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Jugend_LG_freiBindingNavigatorSaveItem.Click
    2. Me.Validate()
    3. Me.Jugend_LG_freiBindingSource.EndEdit()
    4. Me.TableAdapterManager.UpdateAll(Me.Data_Anmeldungdb1DataSet)
    5. End Sub
    6. Private Sub Jugend_LG_frei_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    7. 'TODO: Diese Codezeile lädt Daten in die Tabelle "Data_Anmeldungdb1DataSet.Jugend_LG_frei". Sie können sie bei Bedarf verschieben oder entfernen.
    8. Me.Jugend_LG_freiTableAdapter.Fill(Me.Data_Anmeldungdb1DataSet.Jugend_LG_frei)
    9. End Sub


    Ich möchte jetzt die gleichen Werte auch in die Tabelle "Teilnehmerliste" übertragen. Hab schon stundenlang gegoogelt und nichts passendes gefunden.
    Habe schon mal eine Verbindung zwischen den beiden Tabellen hergestellt, das funzt auch, aber das geht ja nur mit einer Tabelle, es werden ja mehrere.
    Wer kann mir einen Tip geben??
    Gruß Ulli!

    Skaletti schrieb:

    Ich möchte jetzt die gleichen Werte auch in die Tabelle "Teilnehmerliste" übertragen.

    Also wenn du die Daten tatsächlich in eine zweite Tabelle speichern willst, wäre das Redundanz und Redundanz ist sch... (Thema Normalisierung). Brächte nur Ärger. Mit dem Verknüpfen biste schon auf dem richtigen Weg. Sind alle Schüler auch Teilnehmer oder sind manche Schüler nur Schüler und nicht Teilnehmer. Oder gibt es auch Teilnehmer, die keine Schüler sind.
    Hast du im DataSet ne Relation zwischen Schülertabelle und Teilnehmertabelle hergestellt?

    Ohne Genaueres zu wissen würde ich vermuten, es gibt ne Schülertabelle und eine Kurs-(oder sonstiges wo man teilnehmen kann)-Tabelle. Und dann muss man Schüler und Kurse verknüpfen. Das wäre dann wahrscheinlich eine n:m-Beziehung, die man über eine separate Verknüpfungstabelle herstellt (Inhalt: Schüler_ID und Kurs_ID). Aus der lieste dann alle Schüler für deine Teilnehmerliste zum Kurs X aus (SELECT Schüler_ID FROM SchülerKursTabelle WHERE Kurs_ID = X). Dann hättest du eine Liste aller Schüler_IDs zu dem Kurs.
    Ich code nur 'just for fun'! Damit kann ich jeden Mist entschuldigen, den mein Interpreter verdauen muss :D

    Skaletti schrieb:

    Ich möchte jetzt die gleichen Werte auch in die Tabelle "Teilnehmerliste" übertragen.
    Wenn, dann wird in der Teilnehmertabelle bestenfalls ein Verweis (Die SchülerID) gespeichert.
    Ich vermute mal es gibt Schüler die an Veranstaltungen teilnehmen.
    Also gibt es die Tabelle Schüler (ID, Name, Geb-Datum...) und die Tabelle Veranstaltung (ID, Name, Datum...). Da ein Schüler an mehreren Veranstaltungen teilnehmen kann und jede Veranstaltung mehrere Teilnahmer hat ist das ne m:n-Beziehung. Es braucht also eine Mittlertabelle Teilnehmer (ID, SchülerID, VeranstaltungsID, Datum, Ergebnis...). Mit diesem Datenmodell kannst du beliebig viele Veranstaltungen mit beliebigen Schülern abbilden.

    Schüler >> Teilnehmer << Veranstaltung

    Fiel Fergnügen

    Vatter
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:
    Hi, und Danke für die schnellen Antworten.

    Meine Erklärung war wohl nicht ganz o.k.
    Es geht hier um Sport.
    Es gibt Schülerklassen, Jugendklassen, Juniorenklassen usw.
    Tabelle Schülerklassen Spalten = ID,Verein,Name,Klasse, Serie1, Serie2, Serie3, Serie4, Gesamt.
    Tabelle Teilnehmer Spalten=ID,Verein, Name, Klasse.
    Bei der Anmeldung werden die Daten für die ersten 4 Spalten eingegeben.
    Serie1, Serie2, Serie3, Serie4, Gesamt werden später eingetragen, müssen nicht in die Teilnehmertabelle, können aber.
    Die Tabelle Teilnehmer soll also nur eine Gesamtübersicht aller Teilnehmer aus allen Klassen werden.

    Gruß Ulli!
    Serie sagt mir jetz nix....
    Aber die Teilnehmer sind Personen und gehören in eine Tabelle > Tabelle Personen.
    Dann gibt es Klassen (Schüler-, Jugend-, Junioren, Senioren, Alterssenjoren, Altersdebile...) > ebenfalls 1 Tabelle Klassen
    Dann gibt es Vereine, die ebenfalls in einer Tabelle geführt werden sollten (oder willste bei jedem Teilnehmer den Vereinsnamen "1.FC VorwärtsRückwärts e.V." eintippen) > Tabelle Vereine.
    Dann erstellst du dir die Tabelle Teilnehmer mit ID, IDPerson, IDKlasse, IDVerein, IDVeranstaltung
    Die Klasse sollte evtl. als Spalte IDKlasse in der Personentabelle abgelegt sein. Weil 1 Person kann ja immer nur in einer Klasse sein. Beim Anlegen des Datensatzes für die Teilnehmertabelle würde ich den Wert dieser Spalte in den neuen Satz übernehmen, weil der Lümmel, der heute Junior ist, kann schon morgen Senior werden.
    Die Teilnehmertabelle kannst du dann bequem nach Personen, Klassen oder was auch immer filtern.

    Fiel Fergnügen

    Vatter
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:

    Vatter schrieb:

    Die Klasse sollte evtl. als Spalte IDKlasse in der Personentabelle abgelegt sein
    Die Klasse geht indirekt aus dem Geburtsdatum bzw. dem Alter der Person hervor, weshalb ich das Geburtsdatum bei der Person ablegen würde und die Klasse daraus berechnen.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --

    petaod schrieb:

    Die Klasse geht indirekt aus dem Geburtsdatum bzw. dem Alter der Person hervor, weshalb ich das Geburtsdatum bei der Person ablegen würde und die Klasse daraus berechnen.

    Ist Ansichtssache, mir wäre das zu unsicher. Kinder können später eingeschult werden (zB bei längerer Krankheit). Sie können eine Klasse wiederholen. Bei den Kids, die um den Stichtag rum Geburtstag haben, ist es meines Wissens eine Ermessensentscheidung, ob sie früher oder später in die Schule kommen.
    Du hast mit dem Alter sicher in 95% der Fälle recht, aber ne ID ist einfach sicherer.
    Ich code nur 'just for fun'! Damit kann ich jeden Mist entschuldigen, den mein Interpreter verdauen muss :D
    Danke für eure Bemühungen und Tips.
    Hallo Marsianer, es geht hier nicht um Schulklassen.
    Aber die Vorgeschichte ist eingestielt.
    Die Vereine melden ihre Sportler mit einem auf unserer Hompage bereit gestellten Formular an, welches ich meistens per E-Mail
    oder Fax bekomme. Ich habe Tabellen mit allen Vereinen und Sportlernahmen, Comboboxen für Startnummer ,Klassen und Disziplinen,
    deren Werte ich per Mausclick in die Textboxen übertrage.
    Da sich bei der Anmeldung von Jahr zu Jahr vieles ändert, habe ich diesen Weg gewählt.
    Nach der Veranstaltung bringe ich diese Daten auf den neuesten Stand, fürs nächste Jahr. Das funzt soweit, könnte natürlich noch
    verfeinert werden, aber das später.
    Ich brauche jetzt als Anfänger einen Tip oder Rat wie ich jetzt bei der Eingabe die gleichen Werte die z.B. in die Jugendtabelle übertragen
    werden (aus TextBoxen),zur gleichen Zeit, in die Teilnehmertabelle übertragen werden. Wie gesagt, das sind Tabellen in einem Dataset (Access).
    Aus der Teilnehmertabelle sollen dann Anhand der Startnummern die Mannschaften gebildet werden, aber auch dies später.

    Gruß Ulli!

    Skaletti schrieb:

    wie ich jetzt bei der Eingabe die gleichen Werte die z.B. in die Jugendtabelle übertragen
    werden (aus TextBoxen),zur gleichen Zeit, in die Teilnehmertabelle übertragen werden
    Wenn es dieselben Daten sind, dann werden sie nicht in zwei Tabellen gehalten.

    Da wird höchstens eine View "Jugend" erzeugt, die z.B. aus "Teilnehmer" alle Personen unter 18 Jahren selektiert.
    Die Abfrage muss halt der Aufgabenstellung heraus entsprechend definiert werden.

    Zieh dir mal den Beitrag zur Normalisierung rein.
    Von diesen Prinzipien abzuweichen ist zwar in Ausnahmefällen erlaubt, aber nur wenn gute Gründe vorliegen.

    Vielleicht gibt es auch noch weniger theoretische Tutorials, aber ich hab gerade keinen Link.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    @Skaletti
    Es nutzt nix, du mußt, gerade weil du später noch diese und jene Funktion hinzufügen willst, beim Datenmodell anfangen. Du verrennst dich mit deiner momentanen Vorstellung "Ich möchte jetzt die und das haben" in einer Sackgasse, weil du Codeseitig immer mehr aufsatteln mußt, um iwelche Kopfstände anzustellen.
    Auch wenns wehtut: Lass dein Proggi mal so liegen und fang nochma mit dem Datenmodell ohne Redundanzen an. Überlege genau, wie du die Realität in deinem Dataset abbilden kannst. Damit steht und fällt dein Projekt.
    Passt das Datenmodell erstmal, ist der Rest ein "Klacks" und nur noch reine Viaualisierung.

    Fiel Fergnügen

    Vatter
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup: