Foxtable(狐表)用户栏目专家坐堂 → 对比问题


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

主题:对比问题

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


加好友 发短信
等级:六尾狐 帖子:1495 积分:12175 威望:0 精华:0 注册:2013/3/19 16:41:00
对比问题  发帖心情 Post By:2018/12/1 17:24:00 [显示全部帖子]

请问老师,我有两个表,其中表A中的出差人列的内容是不固定数目的人姓名,每个名字用“,”隔开;在表B中有姓名列和住址列两列。我想每次表A中的出差人列填写完后都与表B中的姓名列对比,如果表A出差人列的人名中在表B中的住是银川,就产生住宿费,否则不产生,代码怎么写呢?
 表A          表  B  
   张三,李四,王五        张三    银川
           李四    天津
           王五    上海

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


加好友 发短信
等级:六尾狐 帖子:1495 积分:12175 威望:0 精华:0 注册:2013/3/19 16:41:00
  发帖心情 Post By:2018/12/3 11:53:00 [显示全部帖子]

为什么编译通不过呢?

 

If  Tables("出差记录").Current("出差地点") Like "小坝"  And   Tables("出差记录").Current("出差天数") > 0.5
    If e.DataCol.name = "出差人" AndAlso e.newvalue > "" Then
        Dim dr As DataRow = DataTables("职工信息总表").Find("小坝住房 = True and 姓名 in ('" & e.newvalue.replace(",","','") & "')")
        If dr IsNot Nothing Then
            msgbox("不产生住宿费")
        End If
    End If
End If


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


加好友 发短信
等级:六尾狐 帖子:1495 积分:12175 威望:0 精华:0 注册:2013/3/19 16:41:00
  发帖心情 Post By:2018/12/3 14:11:00 [显示全部帖子]

红色的行代码还是通不过编译。另出差人也不一定是三个人,人数不固定,有时多,有时少。能对比吗。

 

Dim r = Tables("出差记录").Current

If  r("出差地点") Like "小坝"  And r("出差天数") > 0.5
    If r("出差人") > "" Then
        Dim dr As DataRow = DataTables("职工信息总表").Find("小坝住房 = True and 姓名 in ('" & r("出差人").replace(",","','") & "')")
        If dr IsNot Nothing Then
            msgbox("不产生住宿费")
        End If
    End If
End If


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


加好友 发短信
等级:六尾狐 帖子:1495 积分:12175 威望:0 精华:0 注册:2013/3/19 16:41:00
  发帖心情 Post By:2018/12/3 15:48:00 [显示全部帖子]

老师,我找到问题了,我前面还有一段代码,相互干扰。谢谢你。

但这段代码没有反应,没有起到想要结果。


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


加好友 发短信
等级:六尾狐 帖子:1495 积分:12175 威望:0 精华:0 注册:2013/3/19 16:41:00
  发帖心情 Post By:2018/12/3 16:43:00 [显示全部帖子]

以下是引用有点甜在2018/12/3 16:18:00的发言:

如果写到datacolchanged事件,代码这样测试。

 

msgbox(123)
If e.DataCol.name = "出差人" AndAlso e.newvalue > "" Then    
    msgbox(456)    
    If  e.DataRow("出差地点") Like "*小坝*"  And e.DataRow("出差天数") > 0.5        
        msgbox(789)
        Dim dr As DataRow = DataTables("职工信息总表").Find("小坝住房 = True and 姓名 in ('" & e.newvalue.replace(",","','") & "')")
        If dr IsNot Nothing Then
            msgbox("不产生住宿费")
        End If
    End If
End If

老师你好,想写在BeforeSaveDataRow事件中。

[此贴子已经被作者于2018/12/3 16:46:01编辑过]

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


加好友 发短信
等级:六尾狐 帖子:1495 积分:12175 威望:0 精华:0 注册:2013/3/19 16:41:00
  发帖心情 Post By:2018/12/3 19:57:00 [显示全部帖子]

老师您好,经我测试,只是“出差人”列填写一个人时可以判断正确,2人以上本来有符合条件的人也进入不到

 If dr IsNot Nothing Then
            msgbox("不产生住宿费")
        End If

 

出差人列中的人名中间用“、”分开。

[此贴子已经被作者于2018/12/3 20:04:53编辑过]

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


加好友 发短信
等级:六尾狐 帖子:1495 积分:12175 威望:0 精华:0 注册:2013/3/19 16:41:00
  发帖心情 Post By:2018/12/4 8:11:00 [显示全部帖子]

老师,系统有点大,不方便上传。我再描述一下吧。

有两个表,其中表“出差记录”是这样的:

 

  出差人   出差日期    出差地点    天数    事由    ..    ...     ...
   张三、李四    .....    小坝城区    2    ...            
   王五、李七、张四、邓一    .....    银川    0.5    ...  ....    ....      ...
   马八    ......    天津    1    ...  ...    ...    ....  
  康四    ...    小坝城区    0.5    ..  ...    ..    ...  

 

第二个表:职工信息总表

 

  姓名   .....   ....      小坝住房 
   张三            有
   李四            无
   马八            有
   王五            有
   康四            有
   李七            无
   邓一            无
   ...            ...
   ...            ...
   ...            ...
   ...            ...
               
               
               
               
               
               
               
               

 

想出差表的新增记录信息填写完后,系统自动做一个判断,拿“出差记录”表中差人列的每一个人与“职工信息总表”中的姓名列每个人做对比,如果有家在小坝城区居住并超过0.5天的,就要提醒不产生补助。

出差人列的取值列就是职工信息总表的姓名列,如果能从出差人列输入时解决问题也行。

麻烦老师了,谢谢。


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


加好友 发短信
等级:六尾狐 帖子:1495 积分:12175 威望:0 精华:0 注册:2013/3/19 16:41:00
  发帖心情 Post By:2018/12/4 18:41:00 [显示全部帖子]

老师,问题圆满解决。谢谢了。但能不能知道比对出的是哪个人呢。

 回到顶部