Foxtable(狐表)用户栏目专家坐堂 → [求助]跨表引用的自动更新,表达式修改为代码


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

主题:[求助]跨表引用的自动更新,表达式修改为代码

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


加好友 发短信
等级:幼狐 帖子:122 积分:1191 威望:0 精华:0 注册:2017/7/15 8:33:00
[求助]跨表引用的自动更新,表达式修改为代码  发帖心情 Post By:2019/1/14 11:17:00 [只看该作者]

以下是用表达式列实现的,现在想改为代码:

iif([节点]='①审稿', Parent(jgrw).审稿, 
iif([节点]='②组稿', Parent(jgrw).组稿, 
null))

iif(Convert(SubString(Parent(gjrw).年级,1,1),'System.Single') > 6 and Parent(gjrw).科目='语文','文',
iif(Convert(SubString(Parent(gjrw).年级,1,1),'System.Single') > 6 and Parent(gjrw).科目='物理','理',
'小'))

iif([节点]='①审稿' and [分级] = '文', Parent(jgrw).编文 * Convert(SubString(Parent(jgrw).编效,1,2),'System.Single')/100, 
iif([节点]='②组稿' and [分级] = '文', Parent(jgrw).编文 * Convert(SubString(Parent(jgrw).编效,3,2),'System.Single')/100, 
null))


参考帮助文件中《跨表引用的自动更新》一节,有无关联的代码都试了,3个小时也没试出来。。。求助

If e.DataCol.Name = "产品编号" Then
    If e.NewValue Is Nothing Then
        e.DataRow("品名") = Nothing
        e.DataRow("型号") = Nothing
        e.DataRow("规格") = Nothing
        e.DataRow("单价") = Nothing
    Else
        Dim dr As DataRow
        dr = e.DataRow.GetParentRow("产品")
        If dr IsNot Nothing 
            e.DataRow("品名") = dr("品名")
            e.DataRow("型号") = dr("型号")
            e.DataRow("规格") = dr("规格")
            e.DataRow("单价") = dr("单价") 
        End If
    End If
End If

有疑惑的是,=e.DataRow("列名") 之后,怎么对其数据如表达式列一样进行函数处理,比如:SubString(e.DataRow("品名") ,1,2)提示错误,不知道如果使用才是正确的,或者本身就不能用这个函数?
[此贴子已经被作者于2019/1/14 11:19:35编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/1/14 11:59:00 [只看该作者]


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


加好友 发短信
等级:幼狐 帖子:122 积分:1191 威望:0 精华:0 注册:2017/7/15 8:33:00
  发帖心情 Post By:2019/1/14 12:10:00 [只看该作者]

谢谢,正在测试!!!
[此贴子已经被作者于2019/1/14 12:23:05编辑过]

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


加好友 发短信
等级:幼狐 帖子:122 积分:1191 威望:0 精华:0 注册:2017/7/15 8:33:00
  发帖心情 Post By:2019/1/14 18:24:00 [只看该作者]

If e.DataCol.Name = "第一列" Then '如果内容发生变动的是品名列
    If e.NewValue Is Nothing Then '如果新值是空白,也就是品名列的内容为空
        
    Else
        Dim dr As DataRow
        '否则在产品表查找同名的产品行,将找到的行赋值给变量dr
        dr = DataTables("表A").Find("[第一列] = '" & e.OldValue & "'")
        If dr IsNot Nothing Then '如果找到了同名的产品行,也就是dr不是Nothing
            dr("第一列")= e.DataRow("第一列")
        End If
    End If
End If

如图,以上代码修改表B内容后,只能更新表A相同内容的第一行,如何遍历更改
图片点击可在新窗口打开查看此主题相关图片如下:更新表a.jpg
图片点击可在新窗口打开查看
表A中所有的行呢?

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


加好友 发短信
等级:超级版主 帖子:105948 积分:538809 威望:0 精华:9 注册:2015/6/24 9:21:00
  发帖心情 Post By:2019/1/14 20:16:00 [只看该作者]

If e.DataCol.Name = "第一列" Then '如果内容发生变动的是品名列
    If e.NewValue Is Nothing Then '如果新值是空白,也就是品名列的内容为空
        
    Else
        DataTables("表A").ReplaceFor("第一列",e.newvalue,"[第一列] = '" & e.OldValue & "'")
    End If
End If

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


加好友 发短信
等级:幼狐 帖子:122 积分:1191 威望:0 精华:0 注册:2017/7/15 8:33:00
  发帖心情 Post By:2019/1/15 9:41:00 [只看该作者]

嗯,上面的已经会用,现在用了个多条件的,Filter只有客户的时候正常,后面的And不会加,加了就出错,请问该如何加呢?

Select Case e.DataCol.Name
    Case "客户","产品","结构"
        Dim Filter As String =  "[客户] = '" & e.DataRow("客户") & "' And [产品] = '" & e.DataRow("产品") & "' And [结构] = '" & e.DataRow("结构") & "'"
        DataTables("稿件名称").ReplaceFor(e.DataCol.Name, e.NewValue, Filter)
End Select

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/1/15 10:01:00 [只看该作者]

 

代码没问题,语法没问题。你执行的时候,报什么错?

 

 


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


加好友 发短信
等级:幼狐 帖子:122 积分:1191 威望:0 精华:0 注册:2017/7/15 8:33:00
  发帖心情 Post By:2019/1/15 10:04:00 [只看该作者]

只有客户的时候,正常执行,加上And产品和结构后
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:多条件替换.foxdb

,代码不执行
[此贴子已经被作者于2019/1/15 10:21:09编辑过]

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


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/1/15 10:21:00 [只看该作者]

1、你把产品、结构、客户的值都填入了没有?

 

2、代码改成

 

Select Case e.DataCol.Name
    Case "客户","产品","结构"
        Dim Filter As String = ""
        If e.DataCol.name = "客户" Then
            filter = "[客户] = '" & e.oldvalue & "' And [产品] = '" & e.DataRow("产品") & "' And [结构] = '" & e.DataRow("结构") & "'"
        ElseIf e.DataCol.name = "产品" Then
            filter = "[客户] = '" & e.DataRow("客户") & "' And [产品] = '" & e.oldvalue & "' And [结构] = '" & e.DataRow("结构") & "'"
        ElseIf e.DataCol.name = "结构" Then
            filter = "[客户] = '" & e.DataRow("客户") & "' And [产品] = '" & e.DataRow("产品") & "' And [结构] = '" & e.oldvalue & "'"
        End If
        msgbox(filter)
        DataTables("稿件名称").ReplaceFor(e.DataCol.Name, e.NewValue, Filter)
End Select


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


加好友 发短信
等级:幼狐 帖子:122 积分:1191 威望:0 精华:0 注册:2017/7/15 8:33:00
  发帖心情 Post By:2019/1/15 10:27:00 [只看该作者]

嗯,我也在改if,上面的可以
然后在Select Case中也加了个
msgbox(filter)
提示的结果是新值,所以搜索不到吧

图片点击可在新窗口打开查看此主题相关图片如下:条件显示.png
图片点击可在新窗口打开查看

[此贴子已经被作者于2019/1/15 10:28:57编辑过]

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