以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  不同表间字符对比和计算  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=81460)

--  作者:33chyh
--  发布时间:2016/2/28 13:50:00
--  不同表间字符对比和计算
我想将答题数据1中的客观题列所有内容与客观题答案中的第一行第一列内容逐一比较,如果一致,则将成绩表中成绩1相应内容赋值为1。
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:多表数据引用和计算.foxdb

[此贴子已经被作者于2016/2/28 13:50:59编辑过]

--  作者:大红袍
--  发布时间:2016/2/28 14:49:00
--  
For Each dr As DataRow In DataTables("答题数据1").datarows
    Dim fdr As DataRow = DataTables("客观题答案").find("客观题 = \'" & dr("客观题") & "\'")
    Dim ndr As DataRow = DataTables("成绩表").Find("学号 = \'" & dr("学号") & "\'")
    If ndr Is Nothing Then
        ndr = DataTables("成绩表").AddNew
        ndr("学号") = dr("学号")
    End If
    If fdr Is Nothing Then
        ndr("成绩1") = 0
    Else
        ndr("成绩1") = 1
    End If
Next

--  作者:33chyh
--  发布时间:2016/2/28 18:00:00
--  衷心感谢
谢谢大红袍老师提供的代码!!!图片点击可在新窗口打开查看图片点击可在新窗口打开查看图片点击可在新窗口打开查看

--  作者:33chyh
--  发布时间:2016/2/28 22:34:00
--  
大红袍老师,感谢您提供的代码,我试验了,确实能实现相关要求。由于我是一名初学者有一些代码看不明白,能否请您在下面代码后面加上说明呢?
If ndr Is Nothing Then
        ndr = DataTables("成绩表").AddNew
        ndr("学号") = dr("学号")
    End If
    If fdr Is Nothing Then
        ndr("成绩1") = 0
    Else
        ndr("成绩1") = 1
    End If

--  作者:大红袍
--  发布时间:2016/2/29 9:21:00
--  
For Each dr As DataRow In DataTables("答题数据1").datarows \'循环表的每一行
    Dim fdr As DataRow = DataTables("客观题答案").find("客观题 = \'" & dr("客观题") & "\'") \'在答案表查找对应条件的行
    Dim ndr As DataRow = DataTables("成绩表").Find("学号 = \'" & dr("学号") & "\'") \'在成绩表查找
    If ndr Is Nothing Then \'如果成绩表没有找到对应学号的人,就增加一行
        ndr = DataTables("成绩表").AddNew
        ndr("学号") = dr("学号")
    End If
    If fdr Is Nothing Then \'如果在答案表没有找到对应的行
        ndr("成绩1") = 0
    Else \'如果找到了
        ndr("成绩1") = 1
    End If
Next

--  作者:33chyh
--  发布时间:2016/2/29 15:23:00
--  
谢谢老师!我看明白了。


--  作者:33chyh
--  发布时间:2016/2/29 17:04:00
--  

大红袍老师:我在运行时发现如果客观题答案表中有两行数据,答案数据1的客观题答案与客观题答案表中的第二行一致,也能得分。根据您给我写的程序代码,结合自己学的帮助文件,做了一些改动。想让答案数据1的客观题答案只与客观题答案表中第一行的答案进行比较,但没有成功。请您帮助我看看哪个地方出了问题。还可以有哪些改进的地方。代码如下:

Dim kgt1,kgt2,zgt1,zgt2 As Integer
For Each dr1 As DataRow In DataTables("答题数据1").datarows
    Dim fdr1 As DataRow = DataTables("客观题答案").find("客观题1 = \'" & dr1("客观题1") & "\'","试卷号")
    Dim fdr2 As DataRow = DataTables("客观题答案").find("客观题2 = \'" & dr1("客观题2") & "\'","试卷号")
    Dim ndr As DataRow = DataTables("成绩表").Find("学号 = \'" & dr1("学号") & "\'")
    If ndr Is Nothing Then
        ndr = DataTables("成绩表").AddNew
        ndr("学号") = dr1("学号")
    End If
    If fdr1 Is Nothing Then
        kgt1 = 0
    Else
        kgt1= 1
    End If
    If fdr2 Is Nothing Then
        kgt2 = 0
    Else
        kgt2= 1
    End If
    If dr1("主观题1") = "t" Then
        zgt1 = 1
    Else
        zgt1=0
    End If
    If dr1("主观题2") = "t" Then
        zgt2 = 1
    Else
        zgt2=0
    End If      \'给相关列赋值
    ndr("成绩1") = kgt1 + kgt2 + zgt1+ zgt2
Next

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:多表数据引用和计算.foxdb

[此贴子已经被作者于2016/2/29 17:04:08编辑过]

--  作者:大红袍
--  发布时间:2016/2/29 17:08:00
--  
 逻辑就有问题。你可以用试卷号作为区分,而不是什么第一行第二行。如果只需要第一行,就把第二行删掉。
--  作者:33chyh
--  发布时间:2016/2/29 17:14:00
--  
我想将所有试卷的客观题答案都在同一个表中体现。这样就不用用了再写,不用就删除。这为以后进行统计学生失误原因做准备。
[此贴子已经被作者于2016/2/29 17:15:48编辑过]

--  作者:大红袍
--  发布时间:2016/2/29 17:21:00
--  

那你就加上试卷号或者题号区分哪题是哪题的

 

Dim fdr1 As DataRow = DataTables("客观题答案").find("客观题1 = \'" & dr1("客观题1") & "\' and 试卷号 = \'" & dr1("试卷号") & "\'","试卷号")