Skip to content
Advertisement

Problem regarding For Loop using SQL in Access VBA

I am working on a employee DB in which there is a training form. I have over 2000 employees who need trainings from time to time. I need to create batches of predetermined number (i.e. 50) of employees in that form. Also, I need to create them for each new training. So trainings are linked to TrainingID. I have created a for loop statement just as the following:

Dim StartC As Integer
Dim EndC As Integer

Set StartC = Nz(DMax("BatchNo", "T25TrnBatch", "T25TrnBatch.TrnID= " & Forms!F13NewTraining!TrnId), 0) + 1
Set EndC = Me.TBatchtxt

StrSQL = "INSERT INTO T25TrnBatch(TrnID,BatchNo) VALUES((Forms!F13NewTraining!TrnId),StartC);"

For BCounter = StartC To EndC
    DoCmd.SetWarnings False
    DoCmd.RunSQL StrSQL
    DoCmd.SetWarnings True
Next BCounter

(Note: TBatchtxt is the total batches need to be created)

But when I run it a pop up appears saying StartC.

Also I want the result to like the following:

BatchNo TrnID

1 101

2 101

3 101

Please HELP. Thanks.

Advertisement

Answer

The SQL statement that you are executing doesn’t “know” what values you are trying to insert – you must concatenate the values into the SQL string. As a tip for debugging, you could place a Debug.Print StrSQL on the line after you have concatenated the values in to see what it actually is.

Also, the SQL statement is not inside the loop, so the values will never change. Conversely, there is no need to change SetWarnings inside the loop – you can just change it outside the loop.

Dim StartC As Integer
Dim EndC As Integer

Set StartC = Nz(DMax("BatchNo", "T25TrnBatch", "T25TrnBatch.TrnID= " & Forms!F13NewTraining!TrnId), 0) + 1
Set EndC = Me.TBatchtxt


DoCmd.SetWarnings False
For BCounter = StartC To EndC
    StrSQL = "INSERT INTO T25TrnBatch(TrnID,BatchNo) " _   
        & " VALUES(" & Forms!F13NewTraining!TrnId & "," & BCounter & ");"
    DoCmd.RunSQL StrSQL
Next BCounter
DoCmd.SetWarnings True

Regards,

1 People found this is helpful
Advertisement