none
Inhalt eines Unterformulars mit verschiedenen Abfragen füllen

    Frage

  • Hallo liebe Access-Programmierer, 

    trotz eigentlich zahlreicher Forenbeiträge zu dem Thema komme ich irgendwie nicht zum Ziel. :( 

    Was will ich machen?  

    Ich habe ein Hauptformular mit einem Button. Wenn ich den betätige soll das Unterformular nacheinander mit Datensätzen gefüllt werden. Mal ist es nur ein Datensatz und mal sind es 20. 

    Hauptformular: "Tabellenabfrage"

    Unterformular: "Status1" 

    'Ziel: ersten Datensatz einfügen'
    Forms![Tabellenabfrage]![Status1].Form.RecordSource = "Select 1 as KA"
    
    Forms![Tabellenabfrage]![Status1].Form.Requery
    
    Forms![Tabellenabfrage]![Status1].Form.AllowAdditions = True
    
    Forms!Tabellenabfrage!Status1.SetFocus
    
    'Ziel: Springe zur letzten Zeile des Unterformulars'
    DoCmd.GoToRecord , , acLast
    
    'Ziel: Füge in der letzten Zeile den zweiten Datensatz ein '
    Forms![Tabellenabfrage]![Status1].Form.RecordSource = "Select 2 as KA"

    Ich weiß, dass meine Abfragen hier jetzt wenig Sinn ergeben. Mir geht es nur darum, dass am Ende in meinem Unterformular in der Spalte "KA" ich zwei Zeilen habe, die einmal den Wert "1" und einmal den Wert "2" enthalten.  Bisher wird immer nur der erste Datensatz überschrieben. :( 

    Für mein endgültiges Programm würde ich über while-Schleifen und dynamischen Abfragen das Unterformular füllen. Aber Eins nach dem Anderen. 

    Ich habe Access 2007. Vielen Dank für eure Hilfe! 

    Christian

    Donnerstag, 16. Februar 2017 15:14

Antworten

  • Hallo!

    Grundsätzlich könnte man das - mit dem richtigen Code - schon so machen, also Datensätze (DS) ins Unterformular (UFo) zu schreiben. Tut man aber nicht, besonders bei mehreren DS. Schon wegen der wackeligen Speicherei und Hüpferei.

    Stattdessen schreibt man die DS in die dahinter liegende Tabelle und aktualisiert anschließend das UFo, damit es alle DS anzeigt. z.B.

    Dim db As DAO.Database
    Set db = CurrentDb

    db.Execute "INSERT INTO DeineTabelle (DeinFeldName) VALUES(1)", dbFailOnError
    db.Execute "INSERT INTO DeineTabelle (DeinFeldName) VALUES(2)", dbFailOnError

    Me!Status1.Requery

    Je nachdem, wo die Daten herkommen, wieviele Felder betroffen sind etc. könnte man statt der zwei Executes eine Anfügeabfrage mit mehreren DS aus einer anderen Tabelle starten oder die Tabelle per DAO-Recordset mit Schleifendaten füllen.


    Karl

    Access Developers Conference


    Donnerstag, 16. Februar 2017 15:55

Alle Antworten

  • Hallo!

    Grundsätzlich könnte man das - mit dem richtigen Code - schon so machen, also Datensätze (DS) ins Unterformular (UFo) zu schreiben. Tut man aber nicht, besonders bei mehreren DS. Schon wegen der wackeligen Speicherei und Hüpferei.

    Stattdessen schreibt man die DS in die dahinter liegende Tabelle und aktualisiert anschließend das UFo, damit es alle DS anzeigt. z.B.

    Dim db As DAO.Database
    Set db = CurrentDb

    db.Execute "INSERT INTO DeineTabelle (DeinFeldName) VALUES(1)", dbFailOnError
    db.Execute "INSERT INTO DeineTabelle (DeinFeldName) VALUES(2)", dbFailOnError

    Me!Status1.Requery

    Je nachdem, wo die Daten herkommen, wieviele Felder betroffen sind etc. könnte man statt der zwei Executes eine Anfügeabfrage mit mehreren DS aus einer anderen Tabelle starten oder die Tabelle per DAO-Recordset mit Schleifendaten füllen.


    Karl

    Access Developers Conference


    Donnerstag, 16. Februar 2017 15:55
  • Danke für deine Hilfe! 

    Ja, den Gedanken hatte ich auch schon. Ich hatte mich allerdings dagegen entschieden, weil ich dachte, dass das Befüllen der Tabelle und dann das anschließende Löschen der Daten a.) schlecht für die Performance wäre und b.) keine "schöne" Programmierung wäre. 

    Aber was weiß ich schon als Anfänger.  Ich werde deinen Vorschlag umsetzen. 

    Danke und viele Grüße

    Christian 

    Donnerstag, 16. Februar 2017 16:18