以文本方式查看主题

-  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=164156)

--  作者:hitzfeld
--  发布时间:2021/4/27 22:51:00
--  取_identify值居然失败了?
是这样的,我要把_identify作为记录的唯一标识,我在明细表增加了一个叫ID的字段,然后在点击“审核”按钮之后,执行下面代码:
Tables("采购单").Current("审核") = "已审核"
Tables("采购单").Current.Locked = True
Tables("采购单").Current.Save()
     For Each cdr As DataRow In dr.DataRow.GetChildRows("采购明细") 
CDR.LOCK
        CDR.SAVE
cdr(“ID”)=Tables("采购明细").Current("_identify")
     NEXT
然后发现ID值都是1??按照帮助的说法,_identify只有在保存之后才会生效,按道理这时候记录应该已经得到正确的ID值了啊?
然后再改下,重复循环一次吧,代码改成:
Tables("采购单").Current("审核") = "已审核"
Tables("采购单").Current.Locked = True
Tables("采购单").Current.Save()
     For Each cdr As DataRow In dr.DataRow.GetChildRows("采购明细") 
CDR.LOCK
        CDR.SAVE
     NEXT

For Each cid As DataRow In dr.DataRow.GetChildRows("采购明细") 
Dim id As Integer = Tables("采购明细").Current("_identify")
  cid("ID")=id
  cid.save
msgbox(id)
Next

但是ID的值仍然是1???我错在哪里??

--  作者:有点蓝
--  发布时间:2021/4/27 23:08:00
--  
Tables("采购单").Current是指"采购单"表当前选中的行,选一个不同的行,还是1吗?
--  作者:hitzfeld
--  发布时间:2021/4/27 23:15:00
--  
蓝老师好,采购单是主表,主表已经有唯一标识了。
需要加ID的是采购明细,明细是子表,ID在子表,我的代码要表达的意思是,建立一个主表后,增加子表记录,然后保存的时候,通过循环,把子表新增的明细记录的_identify的值写入ID字段。

--  作者:有点蓝
--  发布时间:2021/4/27 23:24:00
--  
Tables("采购明细").save
For Each cid As DataRow In dr.DataRow.GetChildRows("采购明细") 
  cid("ID")=cid("_identify")
Next

Tables("采购明细").save

--  作者:hitzfeld
--  发布时间:2021/4/27 23:36:00
--  
搞定!谢谢蓝老师!
但是按照这个代码来说,帮助文档就是错误的了。如果子表执行了.save,这时候的_identify就应该是已经生成了。不应该再执行一次啊?

--  作者:有点蓝
--  发布时间:2021/4/28 8:37:00
--  
4楼第二次是为了保存ID值,当然如果想以后填入其它数据后再保存,可以去掉第二次的保存语句