2017-07-11 4 views
0

Ich habe versucht, Access VBA-Code zu schreiben, um die Hinzufügung von Replikaten für Keimtests zu automatisieren.Schleifenfehler, zu viele Datensätze hinzugefügt

Grundsätzlich habe ich ein Formular, wo ich die Gesamtzahl der Wiederholungen (NoofReps) und die Anzahl der Samen pro rep (RepSize) (z. B. 50 Samen) eingeben. Für jeden hinzugefügten Datensatz möchte ich, dass er automatisch einen Rekord für jede Wiederholung hinzufügt und automatisch die Wiederholungszahl berechnet (dh wenn ich 4 Wiederholungen habe, dann sollte er 4 Aufzeichnungen hinzufügen, nummeriert 1-4 Wiederholungen) sowie die RepSize (zB 50) .

Ich habe verschiedene Schleifen basierend auf Informationen aus diesem Forum und andere versucht, aber immer noch Fehler mit der Anzahl der Datensätze, die es generiert. Ich habe sowohl "Do while" als auch "Do Until" ausprobiert, aber ich habe das gleiche Ergebnis.

Könnte mich bitte jemand wissen lassen, wo ich falsch liege? ... Wenn ich 2 Wiederholungen haben möchte, dann fügt das 2 hinzu, wenn ich 3 möchte dann 246, und wenn ich 4 will, fügt es> 30.000 hinzu !!!

Um den Code zu reparieren, habe ich begonnen, die Anzahl der Wiederholungen manuell in den Code in den iNoofReps einzugeben, so dass ich weiß, dass der Fehler im Code und nicht aus dem Formular ist.

Private Sub CmdAddReps3_Click() 
Dim iRepNo As Integer ' stores the current value in the series 

'Open the table 
Set db = CurrentDb() 
Set rstGReps = db.OpenRecordset("tblGReplicates") 

' Initialise the variables 
iRepNo = 1 
iNoofReps = 3 'iNoofReps = Me.txtNoofReps 

' Add the records using a loop 
    rstGReps.movefirst 

Do 'Until rstGReps("RepNo") = (iNoofReps + 1) ' always want to include at least 1 repNo 

rstGReps.AddNew 
rstGReps("GTestID") = Me.GTestID 
rstGReps("RepNo") = iRepNo 
rstGReps("NoofSeed") = Me.txtNoOfSeeds 

' Calculate the next RepNo value in the loop 
iRepNo = iRepNo + 1 
rstGReps.Update 
rstGReps.moveNext 

Loop Until rstGReps("RepNo") = (iNoofReps) + 1 ' so that the loop includes the final repNo. 

MsgBox "Finished Looping" 
rstGReps.Close 

Set rstGReps = Nothing 
Set db = Nothing 

End Sub 

Jede Hilfe würde geschätzt werden !!!

Antwort

0

Nun, Sie bewegen sich als nächstes hier: rstGReps.moveNext, und dann vergleichen Sie rstGReps("RepNo") = (iNoofReps) + 1 nach dem nächsten Verschieben, also auf einem leeren Datensatz, also immer gleich falsch.

Loop Until iRepNo = (iNoofReps) + 1 sollte es behoben werden, dann beziehen Sie sich nicht mehr auf das Recordset, das bereits auf den nächsten Datensatz festgelegt wurde, wenn Sie darauf Bezug nehmen.

könnten Sie auch das Problem beheben, indem Sie gerade diese Linie zu beseitigen:

rstGReps.moveNext

Da rstGReps.AddNew bereits bewegt den Datensatz an einen neuen leeren Datensatz, es nach vorne zu bewegen, nachdem die Aufzeichnung Hinzufügen nicht viel Sinn machen. Wenn Sie es entfernen, möchten Sie möglicherweise die + 1 in Loop Until rstGReps("RepNo") = (iNoofReps) + 1

entfernen
Verwandte Themen