更新 MS Access Table 转置结构和更新字段
Updating a MS Access Table Transposing Structure and Updating Fields
我经常处理导入到 MS Access 中的文本文件,并且我试图从该文件中提取数据以更新现有的 table。
文本文件:
这个文件有学生的考试成绩,我觉得格式很差(我无法控制)并且列数(试题)各不相同。我已经设法使用其他代码来清理文件,以便它最终在一个名为 ETR 的 table 中,以便对测试问题的每个响应都以 ESid_ 为前缀,后跟一个 ID 号,并以相应的分数为前缀与点。所以 ETR table 中的一行看起来像这样(SID 是学生 ID):
SID ESid_123 points_123 ESid_124 points_124 ...
A1 C 1 A 2
A2 D 0 B 1
目标Table:
我正在尝试使用这些数据来更新名为 IS_items 的 table,它具有以下结构:
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 存储在另一个 table 中。到目前为止,这是我的代码:
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
这会正确更新 IS_Items SID、ItemID 和 Points,但显然缺少 Choice 和 Correct 字段。我确实需要更新 IS_Items 中的 Choice 字段,但我也想知道如何更新 Correct(逻辑遵循如果 Points > 0 然后 Correct = 1 并且我意识到这是多余的)。
提前感谢您的指导---我知道这是一个很大的问题,但我完全被难住了。
考虑使用 Step
按字段索引进行迭代,因为每 3、5、7... 将是 点 字段。然后回头看 ItemID、Choice 和 Correct 值。请注意:字段索引从 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
我经常处理导入到 MS Access 中的文本文件,并且我试图从该文件中提取数据以更新现有的 table。
文本文件: 这个文件有学生的考试成绩,我觉得格式很差(我无法控制)并且列数(试题)各不相同。我已经设法使用其他代码来清理文件,以便它最终在一个名为 ETR 的 table 中,以便对测试问题的每个响应都以 ESid_ 为前缀,后跟一个 ID 号,并以相应的分数为前缀与点。所以 ETR table 中的一行看起来像这样(SID 是学生 ID):
SID ESid_123 points_123 ESid_124 points_124 ...
A1 C 1 A 2
A2 D 0 B 1
目标Table: 我正在尝试使用这些数据来更新名为 IS_items 的 table,它具有以下结构:
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 存储在另一个 table 中。到目前为止,这是我的代码:
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
这会正确更新 IS_Items SID、ItemID 和 Points,但显然缺少 Choice 和 Correct 字段。我确实需要更新 IS_Items 中的 Choice 字段,但我也想知道如何更新 Correct(逻辑遵循如果 Points > 0 然后 Correct = 1 并且我意识到这是多余的)。
提前感谢您的指导---我知道这是一个很大的问题,但我完全被难住了。
考虑使用 Step
按字段索引进行迭代,因为每 3、5、7... 将是 点 字段。然后回头看 ItemID、Choice 和 Correct 值。请注意:字段索引从 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