更新 MS Access 表转置结构和更新字段

Posted

技术标签:

【中文标题】更新 MS Access 表转置结构和更新字段【英文标题】:Updating a MS Access Table Transposing Structure and Updating Fields 【发布时间】:2018-07-08 19:18:56 【问题描述】:

我经常使用导入到 MS Access 中的文本文件,并尝试从该文件中提取数据以更新现有表。

文本文件: 这个文件有学生的考试成绩,我觉得它的格式很差(我无法控制),并且列数(测试题)各不相同。我已经设法使用其他代码来清理文件,以便它最终出现在一个名为 ETR 的表中,以便对测试问题的每个响应都以 ESid_ 为前缀,后跟一个 ID 号,相应的分数以分数为前缀。所以 ETR 表中的一行看起来像这样(SID 是学生 ID):

SID  ESid_123  points_123  ESid_124  points_124 ...
A1   C           1         A           2
A2   D           0         B           1

目标表: 我正在尝试使用这些数据来更新名为 IS_items 的表,该表具有以下结构:

IS_itemsID     Administration_ID  SID  ItemID    Choice   Correct   Points
(autonumber)   (user input)       A1  ESid_123  C        1         1
                                  A1  ESid_124  A        1         2
                                  A2  ESid_123  D        0         0
                                  A2  ESiD_124  B        1         1

administration_ID 是根据用户在表单上的输入生成的,而 SID 存储在另一个表中。到目前为止,这是我的代码:

AdminID = Me.Administration_ID
Dim rsA As dao.Recordset
Dim rsB As dao.Recordset
Dim fld As dao.Field

Set rsA = CurrentDb.OpenRecordset("ETR", dbOpenDynaset)
Set rsB = CurrentDb.OpenRecordset("IS_Items", dbOpenDynaset)

Do Until rsA.EOF
For Each fld In rsA.Fields
    If fld.Name Like "points*" Then
        rsB.AddNew
        rsB!Administration_ID = AdminID
            Filter01 = Chr(34) & rsA!StudentID & Chr(34)
        rsB!SID = DLookup("Students_Tbl_ID", "Students(Main)", "[Student 
Identification Number] = " & Filter01)
        rsB!ItemID = fld.Name
        rsB!Points = fld.Value
        rsB.Update
    End If
Next
rsA.MoveNext
Loop

rsA.Close
rsB.Close

Set rsA = Nothing
Set rsB = Nothing

这会正确更新 SID、ItemID 和 Points 的 IS_Items,但显然缺少 Choice 和 Correct 字段。我确实需要更新 IS_Items 中的 Choice 字段,但我也想知道如何更新 Correct(逻辑将遵循如果 Points > 0 然后 Correct = 1,我意识到这是多余的)。

提前感谢您的任何指导——我知道这是一个很大的问题,但我完全被难住了。

【问题讨论】:

【参考方案1】:

考虑使用 Step 按字段索引进行迭代,因为每 3、5、7... 将是 points 字段。然后回头查看 ItemIDChoiceCorrect 值。请注意:字段索引从 0 开始,而不是 1。

For i = 3 To rsA.Fields.Count Step 2

    rsB.AddNew

    rsB!Administration_ID = AdminID
    rsB!SID = DLookup("Students_Tbl_ID", "Students(Main)", "[Student Identification Number] = '" & rsA!StudentID & "'")
    rsB!ItemID = rsA.Fields(i-2).Name
    rsB!Choice = rsA.Fields(i-2).Value
    If rsA.Fields(i-1).Value > 1 Then
        rsB!Correct = 1
    Else
        rsB!Correct = 0
    End If
    rsB!Points = rsA.Fields(i-1).Value

    rsB.Update

Next i

【讨论】:

是的,这行得通!非常感谢。我以前从未见过 Step,如果有人可以提供一个链接,让我可以了解更多关于它的信息,我也将不胜感激。 太棒了!很高兴它有效。请参阅For ... Next statement 上的 MS 文档

以上是关于更新 MS Access 表转置结构和更新字段的主要内容,如果未能解决你的问题,请参考以下文章

更新 MS - 通过 MS-Excel 单元格访问字段

使用 MS Access 和 VBA 更新 Ms Word 文档中的(字段代码:数据库)字段

Ms Access中更新主窗体时更新子窗体的相关字段

MS Access VBA 更新组合框表字段

MS Access 03 - 更新查询条件的一个字段中有多个“ifs”?

数据结构:广义表转置