Foxtable(狐表)用户栏目专家坐堂 → 不同表间字符对比和计算


  共有3061人关注过本帖树形打印复制链接

主题:不同表间字符对比和计算

帅哥哟,离线,有人找我吗?
33chyh
  21楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:124 积分:1202 威望:0 精华:0 注册:2015/12/27 21:01:00
  发帖心情 Post By:2016/3/3 21:39:00 [只看该作者]

大红袍老师:我经过多次运行代码,通过messagebox.show确定应该是If fdr1 IsNot Nothing Then没有运行。如果将fdr1改成dr就可以运行。会出现下列信息:
.NET Framework 版本:2.0.50727.8670
Foxtable 版本:2015.12.22.1
错误所在事件:表,答题数据1,DataColChanged
详细错误信息:
调用的目标发生了异常。
未将对象引用设置到对象的实例。
[此贴子已经被作者于2016/3/3 21:45:48编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  22楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/3/3 21:44:00 [只看该作者]

Dim kgt1,kgt2,zgt1,zgt2 As Integer
For Each dr As DataRow In DataTables("答题数据1").datarows
    Dim fdr1 As DataRow = DataTables("客观题答案").find("客观题1 = '" & dr("客观题1") & "' And 试卷号 = '" & DataTables("答题数据1").name & "'")
    Dim fdr2 As DataRow = DataTables("客观题答案").find("客观题2 = '" & dr("客观题2") & "' And 试卷号 = '" & DataTables("答题数据1").name & "'")
    Dim ndr As DataRow = DataTables("成绩表").Find("学号 = '" & dr("学号") & "'")
    If ndr Is Nothing Then
        ndr = DataTables("成绩表").AddNew
        ndr("学号") = dr("学号")
    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 dr("主观题1") = "t" Then
        zgt1 = 1
    Else
        zgt1=0
    End If
    If dr("主观题2") = "t" Then
        zgt2 = 1
    Else
        zgt2=0
    End If      '给相关列赋值
    ndr("成绩1") = kgt1 + kgt2 + zgt1+ zgt2
    Dim kmdr As DataRow = DataTables("客观题描述").find("试卷号='" & DataTables("答题数据1").Name & "'")  '从这以下是对比客观题答案和答题数据1录入客观题1找出不同选项,并将这些选项对应的内容从客观题描述中提取出来填到问题总结中
    Dim wtzj As DataRow = DataTables("问题总结").find("学号 = '" & dr("学号") & "'")
    fdr1 = DataTables("客观题答案").find("试卷号 = '" & DataTables("答题数据1").name & "'")
   
    If fdr1 IsNot Nothing Then
        Dim kegtdr1 As String = dr("客观题1")
        Dim kegtdadr1 As String = fdr1("客观题1")
       
        If kegtdr1.contains("a") = True And kegtdadr1.contains("a") = True
        Else If kegtdr1.contains("a") = True Or kegtdadr1.contains("a") = True Then
            wtzj("问题总结") = kmdr("选项A")
        End If
        If kegtdr1.contains("b") = True And kegtdadr1.contains("b") = True
        Else If kegtdr1.contains("b") = True Or kegtdadr1.contains("b") = True Then
            If wtzj.IsNull("问题总结") Then
                wtzj("问题总结") = kmdr("选项B")
            Else wtzj("问题总结") = wtzj("问题总结") & kmdr("选项B")
            End If
        End If
        If kegtdr1.contains("c") = True And kegtdadr1.contains("c") = True
        Else If kegtdr1.contains("c") = True Or kegtdadr1.contains("c") = True Then
            If wtzj.IsNull("问题总结") Then
                wtzj("问题总结") = kmdr("选项C")
            Else wtzj("问题总结") = wtzj("问题总结") & kmdr("选项C")
            End If
        End If
        If kegtdr1.contains("d") = True And kegtdadr1.contains("d") = True
        Else If kegtdr1.contains("d") = True Or kegtdadr1.contains("d") = True Then
            If wtzj.IsNull("问题总结") Then
                wtzj("问题总结") = kmdr("选项D")
            Else wtzj("问题总结") = wtzj("问题总结") & kmdr("选项D")
            End If
        End If
    End If
Next

 


 回到顶部
帅哥哟,离线,有人找我吗?
33chyh
  23楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:124 积分:1202 威望:0 精华:0 注册:2015/12/27 21:01:00
  发帖心情 Post By:2016/3/5 10:51:00 [只看该作者]

大红袍老师:经过这两天的实验,发现一个问题,成绩表中的成绩1列在经过数据录入过程中其他行会有数字0出现,同时问题总结表中出现其他行将录入数据和答案数据对应的问题描述一起写入的情况。我尝试一些解决方法,都没有成功。请您帮助我解决。

 回到顶部
帅哥哟,离线,有人找我吗?
Hyphen
  24楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:5015 积分:25363 威望:0 精华:0 注册:2015/8/18 9:21:00
  发帖心情 Post By:2016/3/5 11:20:00 [只看该作者]

http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&Id=81769

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  25楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/3/6 12:01:00 [只看该作者]

你提问的时候,最好说明一下你逻辑,你的代码可能是错,别人理解不了你的逻辑。

[此贴子已经被作者于2016/3/6 12:02:36编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
33chyh
  26楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:124 积分:1202 威望:0 精华:0 注册:2015/12/27 21:01:00
  发帖心情 Post By:2016/3/6 13:47:00 [只看该作者]

 

大红袍老师:正像您说的那样,这个项目比起财务管理等软件开发有相当复杂的逻辑关系,我与其他人交流时,也感到逻辑有些不清楚。这个项目是一个教学检测软件,通过各种表之间关系对老师教学和学生学习状况进行评价。它不仅涉及到软件编程的知识还涉及到教学流程和测评方法的知识。涉及的表很多,所以显得逻辑关系不清晰。由于人到中年,没有利用一些软件进行编程的学习经历,一切是从零开始,同时项目的逻辑关系复杂,可能造成叙述问题不清晰,所以是您想帮助我也不能切中问题的要害,给您带来很大麻烦。对您的及时耐心的帮助,我深表感谢!!!

现在有这样一个问题请您看看帮助我怎样解决。请先阅读蓝色字体,这是说明几个表间关系,以及想要达到的目的。红色字体是说明存在问题。下面我写的一段代码,无法实现目的。根据您前面的指导,通过messagebox找到是这段代码编写问题,结合软件输出结果分析,应该是这段代码的find条件错误。请您看看应该怎样书写这样的代码呢?

 

Dim kgt1,kgt2,zgt1,zgt2 As Integer
Dim fdr1 As DataRow = DataTables("客观题答案").find("客观题1 = '" & e.DataRow("客观题1") & "' And 试卷号 = '" & DataTables("答题数据1").name & "'")
Dim fdr2 As DataRow = DataTables("客观题答案").find("客观题2 = '" & e.DataRow("客观题2") & "' And 试卷号 = '" & DataTables("答题数据1").name & "'")
Dim ndr As DataRow = DataTables("成绩表").Find("学号 = '" & e.DataRow("学号") & "'")
If ndr Is Nothing Then
    ndr = DataTables("成绩表").AddNew
    ndr("学号") = e.DataRow("学号")
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 e.DataRow("主观题1") = "t" Then
    zgt1 = 1
Else
    zgt1=0
End If
If e.DataRow("主观题2") = "t" Then
    zgt2 = 1
Else
    zgt2=0
End If      '给相关列赋值
ndr("成绩1") = kgt1 + kgt2 + zgt1+ zgt2
'从这以下是对比客观题答案和答题数据1录入客观题1找出不同选项,并将这些选项对应的内容从客观题描述中提取出来填到问题总结中
Dim wtzj As DataRow = DataTables("问题总结").find("学号 = '" & e.DataRow("学号") & "'")
Dim kmdr1 As DataRow = DataTables("客观题描述").find("题号 = '" & e.DataRow("客观题1") & "'And 试卷号= '" & DataTables("答题数据1").Name & "'") 
Dim kgt1wz As String
Dim kfdr1 As DataRow = DataTables("客观题答案").find("试卷号 = '" & DataTables("答题数据1").name & "'" )
Dim x1a,x1b,x1c,x1d As String
If wtzj Is Nothing Then
    wtzj = DataTables("问题总结").AddNew
    wtzj("学号") = e.DataRow("学号")
End If
If kfdr1 IsNot Nothing Then
    Dim kegtdr1 As String = e.DataRow("客观题1")
    Dim kegtdadr1 As String = kfdr1("客观题1")
    If kegtdr1.contains("a") = True And kegtdadr1.contains("a") = True
    Else If kegtdr1.contains("a") = True Or kegtdadr1.contains("a") = True Then
MessageBox.show("1")
        x1a = kmdr1("选项A")
    End If
    If kegtdr1.contains("b") = True And kegtdadr1.contains("b") = True
    Else If kegtdr1.contains("b") = True Or kegtdadr1.contains("b") = True Then
        x1b = kmdr1("选项B")
    End If
    If kegtdr1.contains("c") = True And kegtdadr1.contains("c") = True
    Else If kegtdr1.contains("c") = True Or kegtdadr1.contains("c") = True Then
        x1c = kmdr1("选项C")
    End If
    If kegtdr1.contains("d") = True And kegtdadr1.contains("d") = True
    Else If kegtdr1.contains("d") = True Or kegtdadr1.contains("d") = True Then
        x1d = kmdr1("选项D")
    End If
End If
kgt1wz = x1a & ";" & x1b & ";" &  x1c & ";" &  x1d
Dim kgt2wz As String
Dim kmdr2 As DataRow = DataTables("客观题描述").find("试卷号='" & DataTables("答题数据1").Name & "'And 题号 = '" & e.DataRow("客观题2") & "'") 
Dim kfdr2 As DataRow = DataTables("客观题答案").find("试卷号 = '" & DataTables("答题数据1").name & "'" )

Dim kegtdr2 As String = e.DataRow("客观题2")
Dim kegtdadr2 As String = kfdr2("客观题2")
Dim x2a,x2b,x2c,x2d As String
If kfdr2 IsNot Nothing Then
If kegtdr2.contains("a") = True And kegtdadr2.contains("a") = True
Else If kegtdr2.contains("a") = True Or kegtdadr2.contains("a") = True Then
    x2a = kmdr2("选项A")
End If
If kegtdr2.contains("b") = True And kegtdadr2.contains("b") = True
Else If kegtdr2.contains("b") = True Or kegtdadr2.contains("b") = True Then
    x2b = kmdr2("选项B")
End If
If kegtdr2.contains("c") = True And kegtdadr2.contains("c") = True
Else If kegtdr2.contains("c") = True Or kegtdadr2.contains("c") = True Then
    x2c = kmdr2("选项C")
End If
If kegtdr2.contains("d") = True And kegtdadr2.contains("d") = True
Else If kegtdr2.contains("d") = True Or kegtdadr2.contains("d") = True Then
    x2d = kmdr2("选项D")
End If
kgt2wz = x2a & ";" & x2b & ";" &  x2c & ";" &  x2d
End If
wtzj("问题总结1") =kgt1wz & ";" & kgt2wz


图片点击可在新窗口打开查看此主题相关图片如下:寻找结果.jpg
图片点击可在新窗口打开查看

 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  27楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/3/6 13:53:00 [只看该作者]

没看懂你什么意思啊,对比的逻辑是什么啊,为什么和B、D列比较,而不是A列或C列啊

 回到顶部
帅哥哟,离线,有人找我吗?
33chyh
  28楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:124 积分:1202 威望:0 精华:0 注册:2015/12/27 21:01:00
  发帖心情 Post By:2016/3/6 14:04:00 [只看该作者]

是这样的,这是一个多选题,正确答案是ab,输入答案是ad。这就需要找出为什么选择bd的原因,又因为c选项已经判断不是这道题的答案,所以是选择B列和和选择D列。
[此贴子已经被作者于2016/3/6 14:06:06编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
33chyh
  29楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:幼狐 帖子:124 积分:1202 威望:0 精华:0 注册:2015/12/27 21:01:00
  发帖心情 Post By:2016/3/6 14:18:00 [只看该作者]

这是项目文件
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:跨表识别、统计和计算.foxdb


 回到顶部
帅哥哟,离线,有人找我吗?
大红袍
  30楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/3/6 20:23:00 [只看该作者]

这样查,具体你要做什么逻辑不知道你怎么弄。

 

Dim tname As String = "答题数据1"
For Each dr As DataRow In DataTables("问题总结").DataRows
    Dim dr_sj As DataRow = DataTables(tname).Find("学号 = '" & dr("学号") & "'")
    Dim dr_da As DataRow = DataTables("客观题答案").find("试卷号 = '" & tname & "'")
    Dim dr_dams As DataRow = DataTables("客观题描述").find("试卷号 = '" & tname & "' and 题号 = '客观题1'")
    For Each s As String In dr_sj("客观题1")
        msgbox(s & ":" & dr_dams("选项" & s) & " 正确答案:" & dr_da("客观题1"))
    Next
Next

 


 回到顶部
总数 30 上一页 1 2 3