更新记录集的嵌套循环不起作用 Access

Posted

技术标签:

【中文标题】更新记录集的嵌套循环不起作用 Access【英文标题】:Nested loop to update recordset not working Access 【发布时间】:2022-01-20 14:49:49 【问题描述】:

我计划通过表格在我的表格中搜索和更新符合我的条件的记录。 我希望我的代码在匹配时搜索 OrderNo 和 OrderNoItem(对于每个 orderno,我的表中有多个 OrderNoItem,例如 10,20,30 ...),我想从我的更新客户名称(Text18.Value)表格。

我有以下代码。出于某种原因,它只是只更新第一条记录。例如,当我输入 Text25.Value = 12345、Text27.Value = 20 和 Text49.Value = 40 时,它只更新 12345 和 20 行的客户名称。有人可以帮忙吗??

Set logDB1 = CurrentDb()
Set logRS1 = logDB1.OpenRecordset("Log")   

For i = Text27.Value To Text49.Value Step 10
    Do Until logRS1.EOF
         If (logRS1![OrderNo] = Text25.Value And logRS1![OrderNoItem] = Text27.Value) Then
    
            logRS1.Edit
            logRS1![DTN-#] = Text18.Value
            logRS1.Update
          
         End If
    logRS1.MoveNext
    Loop
        
    Next

【问题讨论】:

什么是数据结构?为什么客户名称会保存在 Log 表中?为什么你甚至需要这样做? 您是否在 [DTN-#] 中保存客户名称或客户 ID? 客户 ID 但也设置为文本字段 【参考方案1】:

因为代码设置为执行此操作。这正是 If 条件所要求的。您应该打开按 OrderNo 和 OrderNoItem 范围过滤的记录集,然后循环这些记录。

Set logDB1 = CurrentDb()
Set logRS1 = logDB1.OpenRecordset("SELECT [DTN-#] FROM Log WHERE OrderNo='" & _
                Me.Text25 & "' AND Val(OrderNoItem) BETWEEN " & Me.Text27 & " AND " & Me.Text49)   

    Do Until logRS1.EOF
        logRS1.Edit
        logRS1![DTN-#] = Me.Text18
        logRS1.Update
        logRS1.MoveNext
    Loop

或者不是打开和循环记录集,而是执行一个 UPDATE 操作 SQL:

CurrentDb.Execute "UPDATE Log SET [DTN-#]='" & Me.Text18 & _
     "' WHERE OrderNo = '" & Me.Text25 & "' AND Val(OrderNoItem) BETWEEN " & Me.Text27 & " AND " & Me.Text49

如果 OrderNo 是数字字段,请删除撇号分隔符。

强烈建议不要在命名约定中使用标点符号/特殊字符(下划线除外)。最好是 DTN_Num。

【讨论】:

感谢您的回复!但我在标准表达式中得到数据类型不匹配。我有 OrderNo 是短文本字段 SQL 设置为 OrderNo 作为文本字段,因此不应触发错误。 [DTN-#] 和 OrderNoItem 是什么数据类型?你在尝试哪个代码? 两者都设置为文本字段 文本字段中的数字将无法正确排序 - 因为 alpha 排序规则适用,所以 12 将排在 2 之前。因此范围标准将失败。可以处理(见修改后的答案),但为什么是这些文本字段?

以上是关于更新记录集的嵌套循环不起作用 Access的主要内容,如果未能解决你的问题,请参考以下文章

嵌套的 for 循环将不起作用。句法?

python嵌套循环使用循环和文件

使用 p 标签的嵌套 v-for 循环在 Vue.js 中不起作用

JavaScript:嵌套For循环不起作用

jQuery - 在现有的 each() 事件中嵌套另一个 each() 循环不起作用

在 for(int i=0;...) for(int j=0; ...)summation 嵌套 for 循环中求和势能不起作用