Foxtable(狐表)用户栏目专家坐堂 → 自定义函数问题


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

主题:自定义函数问题

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


加好友 发短信
等级:二尾狐 帖子:597 积分:4974 威望:0 精华:0 注册:2012/12/27 12:34:00
自定义函数问题  发帖心情 Post By:2015/5/8 16:05:00 [只看该作者]

Dim oldV = args(0)
Dim newV = args(1)
Dim r As Row = CurrentTable.Current
Dim colIndex As Integer = CurrentTable.ColSel
Dim colName As String = CurrentTable.Cols(colIndex).Name
For Each dt As DataTable In DataTables
    For Each dCol As DataCol In dt.DataCols
        If dCol.Name = colName Then
            For Each dr As DataRow In dt.Select("[" & colName & "] = '" & oldV & "'")  
                dr(colName) = newV
            Next
        End If
    Next
    dt.Save
Next

这段代码,执行后会显示数据类型转换错误,具体状况如下,不知道如何修改。

---------------------------
错误
---------------------------
自定义函数"同步更新数据函数"执行出错,错误信息如下:



System.Data.EvaluateException: 无法在 System.Decimal 和 System.String 上执行“=”操作。

   在 System.Data.BinaryNode.SetTypeMismatchError(Int32 op, Type left, Type right)

   在 System.Data.BinaryNode.BinaryCompare(Object vLeft, Object vRight, StorageType resultType, Int32 op, CompareInfo comparer)

   在 System.Data.Select.Eval(BinaryNode expr, DataRow row, DataRowVersion version)

   在 System.Data.Select.Evaluate(Int32 record)

   在 System.Data.Select.FindFirstMatchingRecord()

   在 System.Data.Select.GetBinaryFilteredRecords()

   在 System.Data.Select.SelectRows()

   在 System.Data.DataTable.Select(String filterExpression, String sort, DataViewRowState recordStates)

   在 Foxtable.DataTable.Select(String filterExpression, String Sort, DataViewRowState RowState)

   在 Foxtable.DataTable.Select(String filterExpression)

   在 UserCode.A0mHatAwMtDcXrvv4(Object[] Args)
---------------------------
确定   
---------------------------


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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2015/5/8 16:08:00 [只看该作者]

 dr(colName) = newV 

不能一股脑的这样赋值,你要确定你列类型和 你NewV的类型是否匹配

数值类型和字符串类型是不可以互相赋值的

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


加好友 发短信
等级:二尾狐 帖子:597 积分:4974 威望:0 精华:0 注册:2012/12/27 12:34:00
  发帖心情 Post By:2015/5/8 16:11:00 [只看该作者]

那请问该如何判断列类型是否与NewV的类型是否匹配呢

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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2015/5/8 16:13:00 [只看该作者]

For Each dCol As DataCol In dt.DataCols
        If dCol.Name = colName Then
            For Each dr As DataRow In dt.Select("[" & colName & "] = '" & oldV & "'")  
                dr(colName) = newV
            Next
        End If
    Next

像这个你不需要遍历所有列啊.你传入的时候就应该知道该列是否对应.
[此贴子已经被作者于2015/5/8 16:14:06编辑过]

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


加好友 发短信
等级:二尾狐 帖子:597 积分:4974 威望:0 精华:0 注册:2012/12/27 12:34:00
  发帖心情 Post By:2015/5/8 16:15:00 [只看该作者]

我是想通过自定义函数来同步所有表中的内容。
不想在每个表的datacolchanged里写代码。

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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2015/5/8 16:16:00 [只看该作者]

那个遍历是多余的,如果要判断列是否存在用

    
if dt.datacols.Contains(colName) then
For Each dr As DataRow In dt.Select("[" & colName & "] = '" & oldV & "'")  
                dr(colName) = newV
Next
end if

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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2015/5/8 16:16:00 [只看该作者]

你传入值的时候,就应该传入对应的值.

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


加好友 发短信
等级:二尾狐 帖子:597 积分:4974 威望:0 精华:0 注册:2012/12/27 12:34:00
  发帖心情 Post By:2015/5/8 16:17:00 [只看该作者]

我是在项目设置的datacolchanged里调用这个函数。
Functions.Execute("同步更新数据函数",e.OldValue,e.NewValue)

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


加好友 发短信
等级:二尾狐 帖子:597 积分:4974 威望:0 精华:0 注册:2012/12/27 12:34:00
  发帖心情 Post By:2015/5/8 16:18:00 [只看该作者]

如果不遍历所有列的话,程序怎么判断当前表中内容已改变的列在其他表中的位置呢

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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2015/5/8 16:20:00 [只看该作者]

不需要知道位置. 没看懂你想做什么,又遍历所有表,又遍历列的.  你直接说明你想实现什么

 回到顶部
总数 22 1 2 3 下一页