Foxtable(狐表)用户栏目专家坐堂 → [求助]有关BeforeSaveDataRow事件用法(已解决)


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

主题:[求助]有关BeforeSaveDataRow事件用法(已解决)

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


加好友 发短信
等级:小狐 帖子:352 积分:3192 威望:0 精华:0 注册:2008/9/1 9:38:00
[求助]有关BeforeSaveDataRow事件用法(已解决)  发帖心情 Post By:2013/7/23 11:47:00 [只看该作者]

请教如何在BeforeSaveDataRow事件中使用新旧值比较,例如:

if e.newvalue<>e.oldvalue then

msgbox(1)

end if

运行代码报错,请教想要在此事件中实现这样的比较该怎样写代码?

[此贴子已经被作者于2013-7-24 15:29:19编辑过]

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


加好友 发短信
等级:版主 帖子:5246 积分:33163 威望:0 精华:8 注册:2013/1/17 21:28:00
  发帖心情 Post By:2013/7/23 11:52:00 [只看该作者]

If e.DataTable.HasChanges Then
    'XXXXX
End If


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


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

你好.BeforeSaveDataRow事件并没有newvalue oldvalue 参数哦

 只有在行改变事件 例如DataColChanged事件才会有对应的参数的. 才能进行新旧值比较.

 回到顶部
帅哥,在线噢!
狐狸爸爸
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:47448 积分:251060 威望:0 精华:91 注册:2008/6/17 17:14:00
  发帖心情 Post By:2013/7/23 15:03:00 [只看该作者]


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


加好友 发短信
等级:小狐 帖子:352 积分:3192 威望:0 精华:0 注册:2008/9/1 9:38:00
  发帖心情 Post By:2013/7/24 10:19:00 [只看该作者]

请问如果要频繁获取后台值,

1、select * from A where _identify='123'

2、LoadPhysicalValue

 

这两种方法哪个效率更高


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


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

实际上都是执行了一段SQL语句 效率上应该没有太大区别.

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


加好友 发短信
等级:小狐 帖子:352 积分:3192 威望:0 精华:0 注册:2008/9/1 9:38:00
  发帖心情 Post By:2013/7/24 14:04:00 [只看该作者]

使用LoadPhysicalValue获取后台值,当为数值类型时,当数值类型为空时后台调取显示为空值,和表中的值比较时会出现报错,请检查是否为bug

if dr("A")=dic(key)

msgbox("B")

end if

 

报错为“标准表达式中数据类型不匹配”

.NET Framework 版本:2.0.50727.3053
Foxtable 版本:2012.11.29.1
错误所在事件:
详细错误信息:
System.Data.OleDb.OleDbException: 标准表达式中数据类型不匹配。
   在 System.Data.OleDb.OleDbCommand.ExecuteCommandTextErrorHandling(OleDbHResult hr)
   在 System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)
   在 System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)
   在 System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)
   在 System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
   在 System.Data.OleDb.OleDbCommand.ExecuteNonQuery()
   在 Foxtable.SQLCommand.ExecuteNonQuery()

[此贴子已经被作者于2013-7-24 14:05:23编辑过]

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


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

因为空值是不能和数值比较的.不是BUG 是正常现象,自己手动判断一下即可.

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


加好友 发短信
等级:小狐 帖子:352 积分:3192 威望:0 精华:0 注册:2008/9/1 9:38:00
  发帖心情 Post By:2013/7/24 14:13:00 [只看该作者]

需要检查所有列,如何判断

if dr(dc.name)=dic(key)

msgbox("B")

end if

 


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


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

先判断一下是否为空 再做等于判断

if dr.isnull(dc.name)=false andAlso dic(key) isnot nothing then


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