Loop Trough

Status
Niet open voor verdere reacties.

RonaldRoenhorst

Gebruiker
Lid geworden
25 dec 2008
Berichten
188
Onderstaand geeft alleen een waarde in de 1e record.

HTML:
Private Sub Form_Load()
Dim x As Integer
x = DSum("Nz(Monday)+Nz(Tuesday) +Nz(Wednesday)+Nz(Thursday) ", "Query1", "ID = " & Forms!Query1222!ID _
        & "And Week = " & Forms!Query1222!Week _
        & "And CustomerID = " & Forms!Query1222!CustomerID)

Dim i As Integer
Dim db As Database
Dim rs As Recordset

     Set db = CurrentDb
Set rs = db.OpenRecordset("Query1")

For i = 0 To rs.RecordCount - 1
    If rs.Fields("ID") >= 80000 Then
        
        rs.Edit
        rs.Fields("test") = x
        rs.Update
        
    End If
    rs.MoveNext
Next i

rs.Close
Set rs = Nothing
db.Close

End Sub
 
Waarom niet dit?
Code:
    Do While Not rs.EOF
        If rs.Fields("ID") >= 80000 Then
            rs.Edit
            rs.Fields("test") = x
            rs.Update
        End If
        rs.MoveNext
    Loop
 
Of, nog handiger lijkt mij, aangezien je tóch niet alle records wilt zien:
Code:
    Set rs = CurrentDb.OpenRecordset("SELECT Test FROM Query1 WHERE ID >=80000")
    Do While Not rs.EOF
        rs.Edit
        rs.Fields("test") = x
        rs.Update
        rs.MoveNext
    Loop
 
Of, nog handiger lijkt mij, aangezien je tóch niet alle records wilt zien:
Code:
    Set rs = CurrentDb.OpenRecordset("SELECT Test FROM Query1 WHERE ID >=80000")
    Do While Not rs.EOF
        rs.Edit
        rs.Fields("test") = x
        rs.Update
        rs.MoveNext
    Loop
 
Op een 1 of ander manier neemt hij telkens de waarde over van de record waar de pointer staat, dit getal slaat hij op in de x en geeft bij alle records dezelfde uitkomst.
 
Laatst bewerkt:
Dat snap ik niet helemaal, want de Load wordt maar één keer uitgevoerd. Je weet zeker dat hij de waarden dan goed uitleest? Wat zie je als je door de procedure heenstapt met <F8>?
 
Bij Load neemt hij het getal over van de eerste record, heb het geprobeerd met on click en dan de waarde van de record waar de pointer staat.
Ik zie met <F8> dat hij de procedure doorloopt maar niet de Sum van de nieuwe regel overneemt.

Code:
Private Sub Form_Load()
Dim i As Integer
Dim x As Integer
 x = DSum("Nz(Monday)+Nz(Tuesday) +Nz(Wednesday)+Nz(Thursday) ", "Tabel1", "CSBID = " & Forms!Query1222!ID _
        & "And Week = " & Forms!Query1222!Week _
        & "And CustomerID = " & Forms!Query1222!CustomerID)
Dim db As Database
Dim rs As Recordset
 
     Set db = CurrentDb
Set rs = CurrentDb.OpenRecordset("SELECT test FROM Tabel1 WHERE ID >=80000")
 
For i = 0 To rs.RecordCount - 1
        
    Do While Not rs.EOF
            rs.Edit
            rs.Fields("test") = x
            rs.Update
            rs.MoveNext
    Loop
Next i
 
rs.Close
Set rs = Nothing
db.Close

End Sub
 
Laatst bewerkt:
Wat wil je precies bereiken? Want ik snap eerlijk gezegd niet zoveel van wat je aan het doen bent. Laat staan dat ik kan beoordelen of het de slimste manier is (al denk ik van niet).
Zoals ik al zei: de Load wordt maar één keer uitgevoerd. Dat betekent dus dat je variabele x maar één keer wordt gevuld, en dat is logischerwijs met de waarden van het eerste record. Tot zover is het niet meer dan logisch. Vermoedelijk haal je de waarden die x vormen niet van het actieve formulier, anders had je de formule wel anders gemaakt.

Daarna open je een recordset, op dezelfde tabel als waarmee je x hebt gevuld, en ga je een aantal records bijwerken. Gedurende die loop wordt x nooit bijgewerkt, dus het is allemaal heel logisch wat er gebeurt.

Het enige dat ik uit jouw verhaal begrijp, is dat je dit dus niet wilt :). Als je de hele procedure elke keer opnieuw, bij elk record dat je activeert wilt uitvoeren, moet je de gebeurtenis <Bij aanwijzen> (OnCurrent) gebruiken. Of je daar iets mee opschiet kan ik dus niet beoordelen, omdat mij de hele procedure nogal omslachtig en onhandig voorkomt.
 
Ja, maar dan krijg je dus altijd maar één waarde voor DSUM. En dan is het logisch dat je alle records die je daarna in de recordset opent dezelfde waarde krijgen. En ik krijg op een vage manier de indruk dat je wat anders wilt.
Bij Load neemt hij het getal over van de eerste record, heb het geprobeerd met on click en dan de waarde van de record waar de pointer staat. Ik zie met <F8> dat hij de procedure doorloopt maar niet de Sum van de nieuwe regel overneemt.
Hieruit maak ik toch echt op dat je bij elk actief record wilt dat de nieuwe waarde wordt berekend en opgeslagen. En dat heb ik al in #8 gezegd: dan moet je de procedure bij de OnCurrent laten uitvoeren. Ik snap overigens niet waar je de OnClick hebt neergezet, want dan moet je dus nog een object hebben waar je op moet klikken. Lijkt mij helemaal omslachtig :).
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan