PDA

Vollständige Version anzeigen : Schleife im Formular


Connie
07.10.2001, 18:41
Das traue ich mich kaum zu fragen ... bin absolute Anfängerin (Access97).
Ich habe ein berechnetes Steuerelement in einem Unterformular. Wenn dieses Feld nicht leer (oder null) ist, sollen die Werte in eine Tabelle übernommen werden. Schaffe ich leider immer nur für einen Datensatz.
Die OL-Hilfe hat mich nur zusätzlich verwirrt. Wie kann ich diese Bedingung in einer Schleife unterbringen?
Ihr dürft ruhig lachen ...

uke
07.10.2001, 22:02
Wenn der Wert in einem UF steht, gilt er ja sicherlich auch nur für einen Datensatz...

Was willst Du? Alle Datensätze durchgehen und dann für jeden den Inhalt des Steuerelementes berechnen und dann in Abhängigkeit davon speichern? Soll das so geschehen das dieser Vorgang von außen angestoßen werden soll? Oder soll der einzelne Datensatz nur dann betrachtet werden, wenn er auch aufgerufen wird.

Mir ist nicht ganz klar, was Deine Aufgabe ist?

Uke

Connie
07.10.2001, 23:46
Hmmm,
gar nicht so einfach zu erklären, was ich will. Ich probier mal:
Das Formular kommt aus Tabelle1, das Unterformular aus Tabelle2 mit 1:n-Beziehung, enthält also mehrere Datensätze zu Tabelle1.
Ich möchte nun nicht das berechnete Steuerelement sofort berechnen lassen, sondern per Mausklick alle Werte in Tabelle2 schreiben lassen, die nicht Null sind. (Es geht um Überweisungen, die nicht sofort nach Eingabe erfolgen sollen). Ich brauche also alle Werte für Tabelle2.
Etwas klarer geworden?

Connie
13.10.2001, 12:34
on top

md
13.10.2001, 19:52
Hallo Connie!
Probier mal
Dim i As Integer, a As Integer
' Bezug auf aktuelle Datenbank zurückgeben.
Set dbs = CurrentDb
' Recordset-Objekt vom Typ Tabelle öffnen.
Set rst = dbs.OpenRecordset("Tabelle1")
a = rst.RecordCount
rst.Close

DoCmd.RunCommand acCmdRecordsGoToFirst

For i = 1 To a
Hier gibts Du den Namen der Ereignisprozedur ein mit der es bisher geklappt hat,etwa Button_klick DoCmd.RunCommand acCmdRecordsGoToNext
Next i

Md

Connie
13.10.2001, 21:41
Danke für den Tipp, habe ich probiert. Aber offenbar komme ich hier nicht mehr lebend raus, das Ergebnis ist dasselbe. Es wird nur der Datensatz aktualiert, der markiert ist. Ich kriege auch kurioserweise keine Fehlermeldung.
Noch ne Idee?

md
14.10.2001, 09:46
Hallo Connie!
Verrat mal die Prozedur, die den aktuellen Satz aktualisiert.
MD

Connie
14.10.2001, 13:34
Aber gerne, sollte ja eigentlich nicht so schwierig sein:
CurrentDb.Execute "UPDATE Tabelle2 SET Ergebnis1 = " & Me!Ergebnis2 & " WHERE IDTabelle2 = " & Me!IDTabelle2 & ";"
Wobei ich den Wert für Ergebnis2 nur neu in die Tabelle schreiben möchte, wenn er nicht Null ist. (Das sind gezahlte Beiträge, deren realter Wert sich ja nicht bei jeder neuen Berechnung ändert.)
Wäre toll, wenn dir was einfällt

md
14.10.2001, 15:31
Hallo Conni!
Noch ein versuch:

Dim i As Integer, a As Integer
' Bezug auf aktuelle Datenbank zurückgeben.
Set dbs = CurrentDb
' Recordset-Objekt vom Typ Tabelle öffnen.
Set rst = dbs.OpenRecordset("Tabelle1")
a = rst.RecordCount
rst.Close

DoCmd.RunCommand acCmdRecordsGoToFirst
For i = 1 To a
me.refresh
CurrentDb.Execute "UPDATE Tabelle2 SET Ergebnis1 = " & Me!Ergebnis2 & " WHERE IDTabelle2 = " & Me!IDTabelle2 & ";"
Next i

MD

md
14.10.2001, 15:33
Oder
Dim i As Integer, a As Integer
' Bezug auf aktuelle Datenbank zurückgeben.
Set dbs = CurrentDb
' Recordset-Objekt vom Typ Tabelle öffnen.
Set rst = dbs.OpenRecordset("Tabelle1")
a = rst.RecordCount
rst.Close

DoCmd.RunCommand acCmdRecordsGoToFirst
For i = 1 To a
me.refresh
If not isnull(me!ergebnis2) then

CurrentDb.Execute "UPDATE Tabelle2 SET Ergebnis1 = " & Me!Ergebnis2 & " WHERE IDTabelle2 = " & Me!IDTabelle2 & ";"
Else
End if
Next i


MD