hur.cn - 华软网

 热门搜索

数据窗口的update()函数是如何实现的——麻烦高手解释,分不够另开帖!!

  作者:未知    来源:网络    更新时间:2018/7/4
各位大哥,
数据窗口用update()进行更新的时候,
好像只是对新插入的行,进行insert;
         修改过的行进行update,
但是数据窗口是怎么知道哪些行是新插入的,
哪些行是修改过的?

比如我们的7、8行是新插入的;第3行是修改过的
当我们用update()的时候数据窗口
好像是直接用insert语句把7、8行插入数据库
           用update语句对第3行进行更新,
           而对其他没有相干的行没有任何操作!

好像不是从第1行起逐行进行比较然后作出相应的
操作的——如果那样的话,数据窗口中的数据多
的时候执行速度很慢!(我试着逐行取出数据窗口中
的数据然后用select去核对然后进行相应的操作,结果很慢)

如果我们也想知道那些需要操作的行怎么获取??

麻烦各位高手解释一下,小弟将不胜感激!!
------华软网友回答------
PB的datawindow机制,
会对每一行设一个行状态,每个column设置一个列状态
行状态有以下几种:New! NewModified! DataModified! NotModified!
列状态有:DataModified!    NotModified!
这样的话,对应于每一条记录,就可以生成不同的SQL语句去更新数据了

如果你需要的话,你还可以通过使用datawindow的SetItemStatus方法,
人为的改变行或者列的状态,以达到update时候,生成不同SQL语句的目的,
不过这种特殊的应用是剑走偏门,不提倡。
------华软网友回复------
对于插入和更新来说,数据都在primary!缓冲区,每一行数据都是有状态的,比如你新插入一行是new!,更改以后就是newMOdified!,原有数据未修改是notmodified!,更改后则是datamodified!,这些在你更改dw的数据时候pb自己后台触发事件更改每一行数据的状态,在update之前,pb会检查每行的状态,如果是notmodified!,new!就不管,如果是datamodified!就根据数据生成update,是newModified就生成insert语句,最终提交数据库执行。

对于删除来说,删除的数据会移到delete!缓冲区,update时候dw检查该缓冲区是否有数据,有则生成delete语句提交数据库

罗里八唆说了一通,不知道说清楚没有,呵呵
------华软网友回复------
七七好快啊,我打字打了半天,落后了
------华软网友回复------
数据窗口函数: dwcontrol.GetItemStatus ( row, column, dwbuffer )
返回值为 dwItemStatus 类型:NotModified!  该行未变化
DataModified! 该行数据修改过的
New!  新插入的行,并且没有值被放入相应的栏位(支只对行起作用)
NewModified! 新插入的行, 并且添加了数据进去
同样函数  dwcontrol.SetItemStatus ( row, column, dwbuffer, status ) 用于改变数据窗口的行列的状态!

------华软网友回复------
herrick(找到七七) 大哥说的意思是逐行根据状态生成sql语句去更新数据了

如果我要想在update()执行前去检查用户输入、修改的数据的合法性,
难道非得从第1行起逐行判断状态


我想只对那些需要检查的行,的合法性进行检查
如果用户没有对某行进行操作,我就不需要对该行进行检查!
请问能实现么??
------华软网友回复------
在 Datawindow ->rows->update properties 点击进去
左面是更新数据窗口(即已设置更新属性的表)时的where 后面的条件
是依据:
1,主键
2,主键和可更新的列
3,主键和已经修改的列
右面:
1, 是先删除这一行再插入新的行
2, 在修改的行的基础上直接更新
------华软网友回复------
这样的检查最好不要在 update 事件里执行, 
我一般都是在datawindow 的 itemfocuschanged 事件里面检查就行了!
------华软网友回复------
同意楼上说的,
但从数据录入和修改的用户行为规范来说,
不建议直接操作grid风格的datawindow直接录入或是修改的办法,
当然只是一个提议,
一个好的风格会让用户明了,也会避免程序潜在的错误。

------华软网友回复------
楼上的诸位说的都很对,(呵呵,不好意思,有点领导总结),

dw update时先根据行装态,再根据选择的:
 1是先删除这一行再插入新的行
 2 在修改的行的基础上直接更新

形成SQL进行操作,如选择1时,且主键是自增长的,则主键每次都会变,要注意。

------华软网友回复------
F1
------华软网友回复------
F117
DD
------华软网友回复------
哪位能给出一段代码
——检测用户在数据窗口中输入是否正确(只要检测非空字段是否为空就可以了)
------华软网友回复------
检测非空字段是否为空这个问题一般只是在新插入一行的情况下才有用,其实你倒不如在dw.insertrow()之后,紧接着用dw.setitem把所有不允许为空的字段给它设上值,这样就不用在保存的时候判断了。
------华软网友回复------
另外,一般的维护窗口我都是放两个数据窗口控件,上边是一个GRID格式的,只用来浏览,下边是一个FREE格式的,用来显示上边那个数据窗口控件当前行的详细信息,所有的修改都是在下边这个数据窗口控件进行的。
------华软网友回复------
给分时出错!!
当我点击给分后出错了,重新打开页面,管理的时候发现分已经给过了
但是不在管理状态的时候所有人得分都是0      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。