【问题标题】:Problem regarding For Loop using SQL in Access VBA关于在 Access VBA 中使用 SQL 进行 For 循环的问题
【发布时间】:2021-10-06 13:57:11
【问题描述】:

我正在处理一个包含培训表格的员工数据库。我有 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。

我还希望结果如下:

BatchNo TrnID

1101

2101

3101

请帮忙。 谢谢。

【问题讨论】:

    标签: sql vba ms-access


    【解决方案1】:

    您正在执行的 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 语句使用 StartC 与您的原始代码一样。我已将其修改为使用 BCounter,它正在由循环递增。
    • 那就更好了。再次感谢。
    【解决方案2】:

    好的,我想通了。我在 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 为我指明了正确的方向。

    【讨论】:

      猜你喜欢
      • 2016-02-28
      • 1970-01-01
      • 1970-01-01
      • 2015-10-10
      • 2019-06-20
      • 2020-05-22
      • 1970-01-01
      • 1970-01-01
      • 2016-12-18
      相关资源
      最近更新 更多