关于在 Access VBA 中使用 SQL 的 For 循环的问题
Problem regarding For Loop using SQL in Access VBA
我正在处理一个员工数据库,其中有一个培训表格。我有 2000 多名员工不时需要培训。我需要以这种形式创建一批预定数量(即 50 名)的员工。此外,我需要为每次新培训创建它们。所以培训链接到 TrainingID。我创建了一个 for 循环语句,如下所示:
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
(注:TBatchtxt为需要创建的总批次)
但是当我 运行 时,会出现一个弹出窗口说 StartC。
另外我希望结果如下:
批号 TrnID
1 101
2 101
3 101
请帮助。
谢谢
您正在执行的 SQL 语句不“知道”您要插入的值 - 您必须将这些值连接到 SQL 字符串中。作为调试提示,您可以在连接值后在线上放置一个 Debug.Print StrSQL
以查看它的实际内容。
此外,SQL 语句不在循环内,因此值永远不会改变。相反,无需在循环内更改 SetWarnings
- 您只需在循环外更改即可。
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
此致,
好的,我已经弄明白了。我在 SQL 中再次插入了 DMax 函数。具体如下:
Dim BCounter As Integer '''I forgot to mention this line in my question
Dim StartC As Integer
Dim EndC As Integer
StartC = Nz(DMax("BatchNo", "T25TrnBatch", "T25TrnBatch.TrnID= " & Forms!F13NewTraining!TrnId), 0) + 1
EndC = Me.TBatchtxt
DoCmd.SetWarnings False
For BCounter = StartC To EndC
StrSQL = "INSERT INTO Table1Test(TID,BID) " _
& " VALUES(" & Forms!TestForm1!TIDtxt & "," & Nz(DMax("BatchNo", "T25TrnBatch", "T25TrnBatch.TrnID= " & Forms!F13NewTraining!TrnId), 0) + 1 & ");"
DoCmd.RunSQL StrSQL
Next BCounter
DoCmd.SetWarnings True
感谢@Applecore 为我指明了正确的方向。
我正在处理一个员工数据库,其中有一个培训表格。我有 2000 多名员工不时需要培训。我需要以这种形式创建一批预定数量(即 50 名)的员工。此外,我需要为每次新培训创建它们。所以培训链接到 TrainingID。我创建了一个 for 循环语句,如下所示:
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
(注:TBatchtxt为需要创建的总批次)
但是当我 运行 时,会出现一个弹出窗口说 StartC。
另外我希望结果如下:
批号 TrnID
1 101
2 101
3 101
请帮助。 谢谢
您正在执行的 SQL 语句不“知道”您要插入的值 - 您必须将这些值连接到 SQL 字符串中。作为调试提示,您可以在连接值后在线上放置一个 Debug.Print StrSQL
以查看它的实际内容。
此外,SQL 语句不在循环内,因此值永远不会改变。相反,无需在循环内更改 SetWarnings
- 您只需在循环外更改即可。
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
此致,
好的,我已经弄明白了。我在 SQL 中再次插入了 DMax 函数。具体如下:
Dim BCounter As Integer '''I forgot to mention this line in my question
Dim StartC As Integer
Dim EndC As Integer
StartC = Nz(DMax("BatchNo", "T25TrnBatch", "T25TrnBatch.TrnID= " & Forms!F13NewTraining!TrnId), 0) + 1
EndC = Me.TBatchtxt
DoCmd.SetWarnings False
For BCounter = StartC To EndC
StrSQL = "INSERT INTO Table1Test(TID,BID) " _
& " VALUES(" & Forms!TestForm1!TIDtxt & "," & Nz(DMax("BatchNo", "T25TrnBatch", "T25TrnBatch.TrnID= " & Forms!F13NewTraining!TrnId), 0) + 1 & ");"
DoCmd.RunSQL StrSQL
Next BCounter
DoCmd.SetWarnings True
感谢@Applecore 为我指明了正确的方向。