Foxtable(狐表)用户栏目专家坐堂 → [求助]怎样在同一单元格内追加字符串


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

主题:[求助]怎样在同一单元格内追加字符串

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


加好友 发短信
等级:幼狐 帖子:124 积分:1202 威望:0 精华:0 注册:2015/12/27 21:01:00
[求助]怎样在同一单元格内追加字符串  发帖心情 Post By:2016/8/7 19:59:00 [只看该作者]

老师您好!

我想将下图中“卷1”表中的每个同学的两到题答案与“答案”表中对应的答案对比找到它们之间的不同点,例如,甲同学的“卷1”表中“题1答”列的录入结果是“abc”,而“答案”表中的“题1答案”列是“ab”,那么它们之间的不同点是c。然后,将这名学生姓名填到“统计”表中对应单元格中,例如甲同学作答结果和实际答案之间不同点是c,那么就在“统计”表中“试卷名”行为1、列名为C的的对应单元格中填入“甲”。又如,甲同学的“卷1”表中“题2答”列的录入结果是“b”,而“答案”表中的“题2答案”列是“c”,那么它们之间的不同点是bc。那么就在“统计”表中“试卷名”行为1、列名为b和c的两个单元格中都写入“甲”。如果在“卷1”表中乙同学的题1答”列的录入结果是“ac”,他作答结果和实际答案之间不同点是bc,应该在统计”表中“试卷名”行为1、列名为b、c两列的对应单元格中分别追加写入“乙”。但是由于我在看帮助时,没有找到相关语句,无法实现相关功能,请老师帮我看看如何实现这一功能。


图片点击可在新窗口打开查看此主题相关图片如下:整合.jpg
图片点击可在新窗口打开查看

下面是我写的相关代码,但是执行后只能将甲同学的名字写入,如果到乙同学时,甲同学的数据都被覆盖了,请老师帮助看看,我应该改动代码才能达到目的。

Dim tjdr As DataRow = DataTables("统计").find("试卷号 = '" & DataTables("卷1").name.chars(1) & "'")
Dim kfdr As DataRow = DataTables("答案").find("试卷号 = '" & DataTables("卷1").name.chars(1) & "'")
Dim A1dr,B1dr,C1dr,D1dr,A2dr,B2dr,C2dr,D2dr As String
Dim kegtdr1 As String = e.DataRow("题1答")
Dim kegtdadr1 As String = kfdr("题1答案")
Dim kegtdr2 As String = e.DataRow("题2答")
Dim kegtdadr2 As String = kfdr("题2答案")
If kfdr("题1答案") IsNot Nothing Then  '判断学生作答的试题答案中是否包括ABCD四个选项,如果包括就将相应学生的姓名添加到"统计"表中对应的单元格中
    If kegtdr1.contains("a") = True And kegtdadr1.contains("a") = True
    Else If kegtdr1.contains("a") = True Or kegtdadr1.contains("a") = True Then
        A1dr = e.DataRow("姓名")
           End If
End If
If kfdr("题2答案")  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
      A2dr = e.DataRow("姓名")
    End If
End If
tjdr("A") = A1dr & ";" & A2dr
If kfdr("题1答案") IsNot Nothing Then
    If kegtdr1.contains("b") = True And kegtdadr1.contains("b") = True
    Else If kegtdr1.contains("b") = True Or kegtdadr1.contains("b") = True Then
       B1dr = e.DataRow("姓名")
    End If
End If
If kfdr("题2答案")  IsNot Nothing Then
    If kegtdr2.contains("b") = True And kegtdadr2.contains("b") = True
    Else If kegtdr2.contains("b") = True Or kegtdadr2.contains("b") = True Then
       B2dr = e.DataRow("姓名")
        End If
End If
tjdr("B") = B1dr & ";" & B2dr
If kfdr("题1答案") IsNot Nothing Then
    If kegtdr1.contains("c") = True And kegtdadr1.contains("c") = True
    Else If kegtdr1.contains("c") = True Or kegtdadr1.contains("c") = True Then
       C1dr = e.DataRow("姓名")
    End If
End If
If kfdr("题2答案")  IsNot Nothing Then
    If kegtdr2.contains("c") = True And kegtdadr2.contains("c") = True
    Else If kegtdr2.contains("c") = True Or kegtdadr2.contains("c") = True Then
        C2dr = e.DataRow("姓名")
    End If
End If
tjdr("C") = C1dr & ";" & C2dr
If kfdr("题1答案") IsNot Nothing Then
    If kegtdr1.contains("d") = True And kegtdadr1.contains("d") = True
    Else If kegtdr1.contains("d") = True Or kegtdadr1.contains("d") = True Then
       D1dr = e.DataRow("姓名")
    End If
End If
If kfdr("题2答案")  IsNot Nothing Then
    If kegtdr2.contains("d") = True And kegtdadr2.contains("d") = True
    Else If kegtdr2.contains("d") = True Or kegtdadr2.contains("d") = True Then
        D2dr = e.DataRow("姓名")
    End If
End If
tjdr("D") = D1dr & ";" & D2dr
If e.DataRow.Isnull("题1答") And e.DataRow.Isnull("题2答") Then '如果学生没有作答,则"统计"表对应的单元格中为空
tjdr("A") = Nothing
tjdr("B") = Nothing
tjdr("C") = Nothing
tjdr("D") = Nothing
End If

这是我的源文件。


 

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:管理项目1.foxdb

[此贴子已经被作者于2016/8/8 8:11:19编辑过]

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


加好友 发短信 F6
等级:狐精 帖子:3030 积分:19188 威望:0 精华:2 注册:2008/9/1 7:50:00
  发帖心情 Post By:2016/8/7 23:01:00 [只看该作者]

你的项目目的以及问题描述,确实让人感觉迷糊,可能你的代码也让人迷糊。也许是我的理解能力有问题,呵呵




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


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

老师您好!我将设计思路再详细地叙述如下,您看能明白吗?

我想将下图中“卷1”表中的每个同学的两到题答案与“答案”表中对应的答案对比找到它们之间的不同点,例如,甲同学的“卷1”表中“题1答”列的录入结果是“abc”,而“答案”表中的“题1答案”列是“ab”,那么它们之间的不同点是c。然后,将这名学生姓名填到“统计”表中对应单元格中,例如甲同学作答结果和实际答案之间不同点是c,那么就在“统计”表中“试卷名”行为1、列名为C的的对应单元格中填入“甲”。又如,甲同学的“卷1”表中“题2答”列的录入结果是“b”,而“答案”表中的“题2答案”列是“c”,那么它们之间的不同点是bc。那么就在“统计”表中“试卷名”行为1、列名为b和c的两个单元格中都写入“甲”。如果在“卷1”表中乙同学的题1答”列的录入结果是“ac”,他作答结果和实际答案之间不同点是bc,应该在统计”表中“试卷名”行为1、列名为b、c两列的对应单元格中分别追加写入“乙”。但是由于我在看帮助时,没有找到相关语句,无法实现相关功能,请老师帮我看看如何实现这一功能。

[此贴子已经被作者于2016/8/8 8:10:43编辑过]

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


加好友 发短信
等级:二尾狐 帖子:569 积分:4210 威望:0 精华:0 注册:2015/5/13 8:32:00
  发帖心情 Post By:2016/8/8 8:31:00 [只看该作者]

你统计乙 的时候,应该在统计,新增一行,来保存 乙 的数值!

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


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

谢谢,但是这不符合我的要求。


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


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

单独做一个按钮执行

 

Dim tjdr As DataRow = DataTables("统计").find("试卷号 = '1'")
Dim kfdr As DataRow = DataTables("答案").find("试卷号 = '1'")
tjdr("A") = Nothing
tjdr("B") = Nothing
tjdr("C") = Nothing
tjdr("D") = Nothing
For Each dr As DataRow In DataTables("卷1").DataRows
    Dim t1 As String = dr("题1答")
    Dim d1 As String = kfdr("题1答案")
    Dim t2 As String = dr("题2答")
    Dim d2 As String = kfdr("题2答案")
    Dim ts() As String = {t1, t2}
    Dim ds() As String = {d1, d2}
    Dim name As String = dr("姓名")
    For i As Integer = 0 To ts.length-1
        For Each s As String In ts(i)
            If ds(i).Contains(s) = False Then
                If tjdr.DataTable.DataCols.Contains(s) Then
                    tjdr(s) = tjdr(s) & name & ","
                End If
            End If
        Next
    Next
Next
tjdr("A") = tjdr("A").trim(",")
tjdr("B") = tjdr("B").trim(",")
tjdr("C") = tjdr("C").trim(",")
tjdr("D") = tjdr("D").trim(",")


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


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

谢谢大红袍老师,我现在还没有进行到按钮设置这一步。如果想在“卷1”表中输入内容回车后就能执行,怎样编写代码呢?在“卷1”事件datacolchanged中编写代码。请老师指导!!!

刚才在将您提供的代码放到该事件中执行后结果有些出入,具体见下图


图片点击可在新窗口打开查看此主题相关图片如下:整合1.jpg
图片点击可在新窗口打开查看
[此贴子已经被作者于2016/8/8 11:23:33编辑过]

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


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

 写到 mainTableChanged 事件

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


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

刚才在将您提供的代码放到该事件中执行后结果有些出入,具体见下图


图片点击可在新窗口打开查看此主题相关图片如下:整合1.jpg
图片点击可在新窗口打开查看


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


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

Dim tjdr As DataRow = DataTables("统计").find("试卷号 = '1'")
Dim kfdr As DataRow = DataTables("答案").find("试卷号 = '1'")
tjdr("A") = Nothing
tjdr("B") = Nothing
tjdr("C") = Nothing
tjdr("D") = Nothing
For Each dr As DataRow In DataTables("卷1").DataRows
    Dim t1 As String = dr("题1答")
    Dim d1 As String = kfdr("题1答案")
    Dim t2 As String = dr("题2答")
    Dim d2 As String = kfdr("题2答案")
    Dim ts() As String = {t1, t2}
    Dim ds() As String = {d1, d2}
    Dim name As String = dr("姓名")
    For i As Integer = 0 To ts.length-1
        For Each s As String In ts(i)
            If ds(i).Contains(s) = False Then
                If tjdr.DataTable.DataCols.Contains(s) AndAlso tjdr(s).contains(name) = False Then
                    tjdr(s) = tjdr(s) & name & ","
                End If
            End If
        Next
    Next
    For i As Integer = 0 To ts.length-1
        For Each s As String In ds(i)
            If ts(i).Contains(s) = False Then
                If tjdr.DataTable.DataCols.Contains(s) AndAlso tjdr(s).contains(name) = False Then
                    tjdr(s) = tjdr(s) & name & ","
                End If
            End If
        Next
    Next
Next
tjdr("A") = tjdr("A").trim(",")
tjdr("B") = tjdr("B").trim(",")
tjdr("C") = tjdr("C").trim(",")
tjdr("D") = tjdr("D").trim(",")

 回到顶部
总数 15 1 2 下一页