以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  addnew后怎么获取"_Identify"  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=104991)

--  作者:luodang2050
--  发布时间:2017/8/9 19:15:00
--  addnew后怎么获取"_Identify"
dim fr as datarow = ft.AddNew
fr.save
msgbox(fr("_Identify"))

如上,实测获取失败,怎么能够通过代码获取当前新增行的主键值呢?

--  作者:有点甜
--  发布时间:2017/8/9 19:32:00
--  

我测试没问题,报什么错?

 

Dim fr As DataRow = DataTables("表A").AddNew
fr.save
msgbox(fr("_Identify"))


--  作者:luodang2050
--  发布时间:2017/8/9 19:45:00
--  
报错:当传递具有新行的 DataRow 集合时,更新要求有效的 InsertCommand。
测试代码如下:第一个msgbox为0,第二个报错,我的目的是通过sql新增行后,获取对应的主键值,便于关联操作

Dim cmd As new SQLCommand
cmd.ConnectionName = gs_strActiveConn
cmd.CommandText = "sel ect * fro m Test_通用窗口 where 1=2"
Dim dt As DataTable = cmd.ExecuteReader
Dim fr As DataRow = dt.AddNew
msgbox(fr("_Identify"))
fr.Save
msgbox(fr("_Identify"))


--  作者:有点甜
--  发布时间:2017/8/9 21:45:00
--  

要这样处理

 

Dim o As new OuterTableBuilder
o.SelectString = "select * from {表A} where 1=2"
o.tablename = "test"
o.build
Dim dt As DataTable = DataTables("test")
Dim fr As DataRow = dt.AddNew
msgbox(fr("_Identify"))
fr.Save
msgbox(fr("_Identify"))


--  作者:luodang2050
--  发布时间:2017/8/10 1:01:00
--  
测试获取到的数据都为0
怀疑fr一经保存,其定位将失效,怎么破呢?
[此贴子已经被作者于2017/8/10 9:00:55编辑过]

--  作者:有点甜
--  发布时间:2017/8/10 9:36:00
--  
4楼测试,没问题。请认真测试。
--  作者:luodang2050
--  发布时间:2017/8/10 9:52:00
--  
仔细测试过了,内部数据源没问题,但是外部数据源确实获取不到。
--  作者:有点甜
--  发布时间:2017/8/10 10:21:00
--  

我用access数据库测试没问题

 

Dim o As new OuterTableBuilder
o.ConnectionName = "test"
o.SelectString = "select * from {bbb} where 1=2"
o.tablename = "ccc"
o.build
Dim dt As DataTable = DataTables("ccc")
Dim fr As DataRow = dt.AddNew
msgbox(fr("_Identify"))
fr.Save
msgbox(fr("_Identify"))


--  作者:有点甜
--  发布时间:2017/8/10 10:24:00
--  
我用sqlserver数据库测试,也没有问题。
--  作者:luodang2050
--  发布时间:2017/8/10 10:58:00
--  
我直接贴出我的测试代码吧,实在测试不通过,不知道哪里出问题,两个msgbox都显示0
--mssql2014数据库
Dim o As new OuterTableBuilder
o.ConnectionName = gs_strActiveConn
o.SelectString = "select * fro m {Test_通用窗口} where 1=2"
o.tablename = "ccc"
o.build
Dim dt As DataTable = DataTables("ccc")
Dim fr As DataRow = dt.AddNew
fr("文本") = "1234"
msgbox(fr("_Identify"))
fr.Save
msgbox(fr("_Identify"))

‘---以下表结构
SELECT TOP 1000 [_Locked]
      ,[_SortKey]
      ,[_Identify]
      ,[文本]
      ,[逻辑]
      ,[备注]
      ,[日期]
      ,[整数]
      ,[浮点]
      ,[审计_审核]
      ,[审计_备注]
      ,[审计_请求处理]
      ,[审计_创建者]
      ,[审计_创建时间]
      ,[审计_修改者]
      ,[审计_修改时间]
      ,[审计_修改确认]
  FRO M [IBMD].[dbo].[Test_通用窗口]
[此贴子已经被作者于2017/8/10 10:58:52编辑过]