标题:如何返回一个远程自动增量的值
只看楼主
ljlbxhlc
Rank: 2
等 级:论坛游民
帖 子:124
专家分:20
注 册:2013-9-24
结帖率:25.71%
已结贴  问题点数:10 回复次数:10 
如何返回一个远程自动增量的值
用sqlexec()向远程插入一条记录,记录里有一个字段id是自动增量,
怎么能返回这个自动增量id的值呢?
搜索更多相关主题的帖子: 返回 记录 增量 自动 远程 
2021-11-03 20:44
laowan001
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:54
帖 子:802
专家分:1914
注 册:2015-12-30
得分:3 
insert into ...;select max(id) from 那个表
2021-11-03 20:59
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:190
帖 子:3125
专家分:8340
注 册:2015-3-25
得分:3 
往表中写入一个唯一的值,然后用这个唯一值关联,读取出ID,这样,就能保证这个记录是你刚才写进去的
2021-11-04 00:05
laowan001
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:54
帖 子:802
专家分:1914
注 册:2015-12-30
得分:0 
自动增量的字段好像不能写入值
2021-11-04 07:58
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:190
帖 子:3125
专家分:8340
注 册:2015-3-25
得分:0 
sn1=sys(2015)
sqlexec(句柄,"insert into tb1(sn,name,...) value (?sn1,'张三',...)")
sqlexec(句柄,"select id from tb1 where sn=?sn1","tmp")
select tmp
brow

2021-11-04 08:42
laowan001
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:54
帖 子:802
专家分:1914
注 册:2015-12-30
得分:0 
回复 5楼 mywisdom88
是个招儿
2021-11-04 10:14
xuminxz
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:40
帖 子:749
专家分:2475
注 册:2011-5-8
得分:3 
指定为id=0,会自动给合适的值。

[此贴子已经被作者于2021-11-4 14:16编辑过]


dBase有人接盘了。
2021-11-04 14:14
ljlbxhlc
Rank: 2
等 级:论坛游民
帖 子:124
专家分:20
注 册:2013-9-24
得分:0 
是个办法。。。
2021-11-05 08:51
xuminxz
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:40
帖 子:749
专家分:2475
注 册:2011-5-8
得分:0 
取回刚刚写入的增量有很多方法,最可靠的方法是:写入后台,并重新从后台取回(requery()),再由其它关键字判断哪个是最后写入的记录,读出ID值。
其它一些方法效率高些,但都不可靠,根据你的代码及运行环境决定是否可行。例如:
当前记录集中最大的ID+1。要求从后台取出了最大的ID,并且没有人同时从其它地方写入新的记录。这个一般很难做到,除非你的后台总数据很小,但这时刷新数据也很快啊。
关键是,即使你知道了系统下一个要给出的ID值是什么,你也不一定能直接插入该值(SQL-server oracle好像都不行,ACCESS可以其它的不知道)仍然只能插入0,自动分配ID

dBase有人接盘了。
2021-11-05 10:56
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:190
帖 子:3125
专家分:8340
注 册:2015-3-25
得分:0 
以下是引用xuminxz在2021-11-5 10:56:41的发言:

取回刚刚写入的增量有很多方法,最可靠的方法是:写入后台,并重新从后台取回(requery()),再由其它关键字判断哪个是最后写入的记录,读出ID值。
其它一些方法效率高些,但都不可靠,根据你的代码及运行环境决定是否可行。例如:
当前记录集中最大的ID+1。要求从后台取出了最大的ID,并且没有人同时从其它地方写入新的记录。这个一般很难做到,除非你的后台总数据很小,但这时刷新数据也很快啊。
关键是,即使你知道了系统下一个要给出的ID值是什么,你也不一定能直接插入该值(SQL-server oracle好像都不行,ACCESS可以其它的不知道)仍然只能插入0,自动分配ID

sn1=sys(2015) && 这个就是唯一的过程名称
sqlexec(句柄,"insert into tb1(sn,name,...) value (?sn1,'张三',...)")
sqlexec(句柄,"select id from tb1 where sn=?sn1","tmp")
select tmp
brow
2021-11-05 11:43



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-507379-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.056727 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved