Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 更新MS访问表转置结构和更新字段_Vba_Ms Access_Dao - Fatal编程技术网

Vba 更新MS访问表转置结构和更新字段

Vba 更新MS访问表转置结构和更新字段,vba,ms-access,dao,Vba,Ms Access,Dao,我经常处理导入MS Access的文本文件,并尝试从该文件中提取数据以更新现有表 文本文件: 这个文件有学生的考试成绩,我觉得格式不好(我无法控制),列数(试题)也不尽相同。我已经设法使用其他代码来清理该文件,以便将其放在一个名为ETR的表中,这样,对测试问题的每个响应都以ESid_uu作为前缀,后跟一个ID号,相应的分数以分数作为前缀。因此ETR表中的一行如下所示(SID是学生ID): 目标表: 我试图使用这些数据更新一个名为IS_items的表,该表具有以下结构: IS_itemsID

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

文本文件: 这个文件有学生的考试成绩,我觉得格式不好(我无法控制),列数(试题)也不尽相同。我已经设法使用其他代码来清理该文件,以便将其放在一个名为ETR的表中,这样,对测试问题的每个响应都以ESid_uu作为前缀,后跟一个ID号,相应的分数以分数作为前缀。因此ETR表中的一行如下所示(SID是学生ID):

目标表: 我试图使用这些数据更新一个名为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
管理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(逻辑是如果Points>0,那么Correct=1,我意识到这是多余的)


提前谢谢你的指导——我知道这是一个很大的要求,但我完全被难住了

考虑使用
步骤按字段索引进行迭代,因为每3,5,7。。。将是点域。然后回顾其中一个,查找ItemID、Choice和正确的值。注意:字段索引从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,如果有人能提供一个链接,我可以在那里了解更多关于它的信息,我也会非常感谢你的帮助。太好了!很高兴它起作用了。请参阅上的MS文档
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