以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  _Identify的问题  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=101637)

--  作者:HappyFt
--  发布时间:2017/6/4 16:36:00
--  _Identify的问题
用sql保存数据,更新时都是用_identify列作用where 条件来对应sql数据库表中的每行数据比较方便 ,但有个最大的问题,foxtable中新增行的_identify列都是临时的,如果新增保存后没有重新加载一次,
这个_identify就和后台的_identify不一致,此时再次在同一个表中更改数据保存后就不生效,但因为一个表中用户可能新增了几行,又修改了几行旧的数据,保存时都是一次性保存的,保存后很难区分哪些是新增的哪些是旧的来重新加载一次
如果每次保存整个表都重新加载,很多时候都是修改旧的又觉得没必要,,,还有什么其他好办法?

谢谢!

--  作者:有点色
--  发布时间:2017/6/4 17:17:00
--  

 不是有行标记吗?不能判断是新增行或者修改行吗?


--  作者:HappyFt
--  发布时间:2017/6/4 20:52:00
--  
因为原来在sql保存的函数的末尾每个表都用了tb.AcceptChanges(),所以保存成功后无法识别行的状态,全部都是显示2未改变的,那只能将tb.AcceptChanges()这句代码从函数中移出到保存成功返回OK后重新加载完数据后才行,是不?
--  作者:有点色
--  发布时间:2017/6/4 22:23:00
--  

 你保存以后,不就是应该每一行都是已经保存的行了吗?有什么问题。

 

 


--  作者:HappyFt
--  发布时间:2017/6/5 10:51:00
--  
新增行时用sql保存过后,后台数据的_Identify列已经更新为真正的,而前台还没有,所以在保存完成后就想用下面的代码重新加载主表中改变过的所有行

For Each dr As DataRow In DataTables(winname & "_主表").DataRows
    If dr.RowState <> DataRowState.Unchanged Then
        dr.Load(False)

这句代码不管括号后是true或false运行后查看前台此行的_identify还是那个临时的,即没有重新加载
是不是因为前后两个_identify不相同所以dr.Load就不起作用了,但是如果使用datatables(winname & "_主表").Load整个表都生新加载后再查看此行的_identify就变为真正的那个了
        
        

--  作者:有点色
--  发布时间:2017/6/5 11:39:00
--  

 方法一:你自己做一个编号列来进行处理;

 

 方法二:新增的行,你可以用一列记录用户名和临时的_Identify值,保存后修改,就去查此列数据;

 

 方法三:那就整体重新加载吧。


--  作者:HappyFt
--  发布时间:2017/6/5 11:57:00
--  
那说明用sql保存的新增行,用dr.Load是不起作用就是了,就想确认下这点,,我的主表行全部都有一个唯一的单据识别列,我可以用它来实现,原想用_Identify要简单些
[此贴子已经被作者于2017/6/5 12:02:43编辑过]

--  作者:HappyFt
--  发布时间:2017/8/11 17:20:00
--  
想问下,能否在新增行就自动让sql后台数据库中的此表的_Identify先生成(sql中是自增列),然后前台表的_Identify就直接等于这个_Identify,避免前台表用临时_Identify产生的很多问题与麻烦.(不能用ft新增后行后就立即保存的方法,因为保存时的代码要求要验证很多必填项目,此时其他字段还没填写,保存不了)
--  作者:有点甜
--  发布时间:2017/8/11 17:56:00
--  

 回复8楼,这样明细不行。既然是保存后生成,你没有保存,自然不会生成。

 

 先新增,不满足再删除咯。