关于数据窗口中的任何一列的数据修改的记录?

jiery666 2013-01-14 10:38:39
就是将数据窗口中任何一列的数据变化,都能insert日志一条记录(有改变的列记录 ,没有改变的就不用记录了)
比如下列的dw中
id name js tj zl
bh001 鞋子 10 1.22 0.12

现在将【鞋子】 改为【衣服】

在日志中要能记录这么一条记录:某某人将name由【鞋子】改为【衣服】

该怎么做才好呢?
...全文
245 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
PB菜鸟 2013-01-22
  • 打赏
  • 举报
回复
引用 7 楼 jiery666 的回复:
引用 6 楼 smilysoft 的回复:引用 5 楼 jiery666 的回复:JavaScript code ? 123456789101112 int li_i,li_colcount string ls_colname,ls_coltype dwItemStatus l_status li_colcoun……
用触发器来处理方便些。 根据deleted和inserted表判断
jhrm 2013-01-21
  • 打赏
  • 举报
回复
1、首先判断dw.modifiedcount()>0 2、选取一行(row),对该行的状态进行判断 dw.getitemstatus(row,0) 3、对row行的每个字段的状态进行判断 dw.getitemstatus(row,col_num) 4、如果row行的col_num现在值和原始值不同,则在日志中写入一条记录。 具体涉及到的取值方法,前贴都已列出,参考使用即可。
A啦Dbit 2013-01-21
  • 打赏
  • 举报
回复
用触发器喽....
jiery666 2013-01-20
  • 打赏
  • 举报
回复
对于单行的情况 可以用以下的代码

string ls_hwbh
string ls_hwmc_new
string ls_hwmc_old
int ii
for ii = 1 to tab_1.tabpage_1.dw_shd.rowcount()
	ls_hwmc_new = tab_1.tabpage_1.dw_shd.getitemstring(ii,"hwmc",primary!,false)
	ls_hwmc_old = tab_1.tabpage_1.dw_shd.getitemstring(ii,"hwmc",primary!,true)
next 

messagebox('',ls_hwmc_new)
messagebox('',ls_hwmc_old)
if ls_hwmc_new <> ls_hwmc_old then
	is_cwlog_new = is_cwlog_new + "货物名称由【"+ls_hwmc_old +"】改为【"+ls_hwmc_new +"】"
end if
但是多余一行的情况的话 修改第一条记录的时候就没法记录(is_cwlog_new 为空)
jiery666 2013-01-20
  • 打赏
  • 举报
回复
引用 6 楼 smilysoft 的回复:
引用 5 楼 jiery666 的回复:JavaScript code ? 123456789101112 int li_i,li_colcount string ls_colname,ls_coltype dwItemStatus l_status li_colcount = long(dw_1.describ……
自由型的 单个字段的已经用了getitemstring() 前后对比 ls_sxhh_new = tab_1.tabpage_1.dw_main.getitemstring(ll_row,'sxhh',primary!,false) ls_sxhh_old = tab_1.tabpage_1.dw_main.getitemstring(ll_row,'sxhh',primary!,true) 但是对于grid型的dw 比如以下的格式如何对比 id name js tj zl bh001 鞋子 10 1.22 0.12 bh002 衣服 20 3.122 0.232 像这种格式的grid 如何取到前后修改的值的变化
PB菜鸟 2013-01-16
  • 打赏
  • 举报
回复
引用 5 楼 jiery666 的回复:
JavaScript code ? 123456789101112 int li_i,li_colcount string ls_colname,ls_coltype dwItemStatus l_status li_colcount = long(dw_1.describe("DataWindow.Column.Count")) ……
每个列都判断一下 原始值,修改后的值。 如果只是个别表需要做日志记录,可以用触发器来处理。 判断修改前后的值,插入的日志表。
jiery666 2013-01-15
  • 打赏
  • 举报
回复
dwItemStatus dwStatus dwStatus = dw_main.GetItemStatus(1,0,primary!)//预设从第一行开始 IF dwStatus = DataModified! THEN MessageBox("提示信息!","有人修改了数据") END IF 我用了以上的代码 但是我要取到具体的值 怎么拿值?
sjlion 2013-01-15
  • 打赏
  • 举报
回复
update() 提交更改之前, getitemstatus() 确定哪些值被修改,记录被修改的值,然后保存。 不明白的话,看下帮助吧。
jiery666 2013-01-15
  • 打赏
  • 举报
回复
int   li_i,li_colcount      
string   ls_colname,ls_coltype   
dwItemStatus l_status      
li_colcount = long(dw_1.describe("DataWindow.Column.Count"))      
for li_i = 1 to li_colcount      
  ls_colname = dw_1.describe('#' + string(li_i) + '.name')    
  if lower(trim(ls_colname)) = 'p_sup_no' then exit   
next   
l_status = dw_1.GetItemStatus(dw_1.getrow(), li_i, Primary!)    
if l_status = DataModified! then   
  messagebox('提示','供应商已经变更!')   
end if  
以上只是判断一个字段而已,我要的是整个Dw的所有字段
zlf19810306 2013-01-15
  • 打赏
  • 举报
回复
用datawindow.object.primary.current.name[i] 和 datawindow.object.primary.orignal.name[i] 比较就知道你是否真的修改了name数据 dwcontrol.object.primary.current.name[i] 是主缓冲区当前数据 dwcontrol.object.primary.orignal.name[i] 是主缓冲区原始数据,从数据库里检索的时候,这里保存着从数据库里检索出来的原始数据。 也可以用 dwcontrol.GetItemString (i,'name',primary!,True) 获取主缓冲区当前数据 dwcontrol.GetItemString (i,'name',primary!,False) 获取冲区原始数据 要获取其他缓冲区只需把primary改为 delete,filter
pb8 2013-01-15
  • 打赏
  • 举报
回复
getitemstring之类的函数有第三个参数的,就是指定要取的缓冲区,你看一下pb的help

611

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder DataWindow
社区管理员
  • DataWindow社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧