hur.cn - 华软网

 热门搜索

解决此问题,给100分,马上结贴~

  作者:未知    来源:网络    更新时间:2018/10/11
PB 7.0 + MS SQL2000

数据库中有一个表,表中一个字段为自增字段,设置为了主键,用Datawindow去Update.

更新成功后,我如何知道这个字增变量是几多?

------华软网友回答------
这个欠好办。如果只是单机程序操作,还能够update之后select max,如果是多用户的,最好是自己分配编号
------华软网友回复------
自动增进列不要设为主键。应该只是其余表做联系关系是得外键
------华软网友回复------
多用户时能够变通一下,加一个机器编号字段,update 之后 SELECT max where id="机器号"
------华软网友回复------
select max(自增量) from 表名
------华软网友回复------
设置autocommit为false
执行update后,马上执行
select max(自增量) from 表名
就能够取得这个值了. 对于SQL SERVER就是这样的,由于你update后没有commit的话表会暂时锁住,其它用户不能举行操作. 

------华软网友回复------
当你执行完
select max(自增量) from 表名
后,应该马上执行commit语句, 你试试是否可行吧
------华软网友回复------
ing
------华软网友回复------
赞成一楼的思绪!
------华软网友回复------
赞成1+1的用法

不过,知道这个干嘛呢?如果你能update了,这个字段的置就已经知道啦,select一下不就知道?

也许楼主的意思俺莫明白。
------华软网友回复------
如果你是用DW的UPDATE同时新增多条记录,那么你就取不到这个值。

如果你提交的是多条记录,必需用SQL的方法举行新增,才能取到新增加的多个ID

你能够做一个循环,一行一行的新增,写法以下

long ll_newid

insert into table (..)
values(...)
using sqlca;

if sqlca.sqlcode < 0 then 
   rollback using sqlca;
   return
end if

select @@IDENTITY
  into :ll_newid 
  from (select 1)
using sqlca;

commit using sqlca;

用SQL SERVER的 @@IDENTITY全局变量肯定比取MAX对多了
以下是SQL SERVER的帮助
在一条 INSERT、SELECT INTO 或大容量复制语句完成后,@@IDENTITY 中包括此语句产生的最后的标识值。若此语句没有影响所有有标识列的表,则 @@IDENTITY 前往 NULL。若插入了多个行,则会产生多个标识值,@@IDENTITY 前往最后产生的标识值。如果此语句引发一个或多个执行产生标识值的插入操作的触发器,则语句执行后立即调用 @@IDENTITY 将前往由触发器产生的最后的标识值。若 INSERT 或 SELECT INTO 语句失利或大容量复制失利,或事务被回滚,则 @@IDENTITY 值不会还原为以前的设置。
------华软网友回复------
看你的dw的update属性
如果是update-----不变
如果是delete and insert ----等价于先执行delete在执行insert,
那么ID的值应该等于该表该字段的下一个递增值
------华软网友回复------
继续讨论一下~~
到目前为止,问题没有解决。
------华软网友回复------
SELECT @@IDENTITY 
就能够实现你的问题了。
SELECT TOP 1  @@IDENTITY 
INTO :VALUE
FROM xxx
------华软网友回复------
SELECT @@IDENTITY 
就能够实现你的问题了。
SELECT TOP 1  @@IDENTITY 
INTO :VALUE
FROM xxx
如果你要在PB中调用的话你应该用作成动太SQL语句。

------华软网友回复------
很简单 ,RETRIEVE一下就能够了
------华软网友回复------
Datawindow object里面不是能够设定 identity key 字段的呀。

------华软网友回复------
赞成retrieve 的观点(这是在小的数据库中的做法,要是纪录太长的话,是不现实的),建议运用设置,identity key 的做法
------华软网友回复------
你能够判断这个表当中的最大记录数的个数,那么这个数就是自增量的当前值
------华软网友回复------
哈哈﹐學習ing﹐頂一下﹐要是你的數據太多了的話就用retrieve()吧﹐或是count(*)一下表的記錄﹐不過這樣也不准確﹐要是你在程序中執行了delete的話你的這個記錄就不准備
------华软网友回复------
赞成 任由风吹的方法
------华软网友回复------
如果是用数据窗口来update那实在是很简单,你update成功之后,自增字段,自然会显示在数据窗口中。你用getitem就能获得。
所以,建议用数据窗口的update来insert,不但减少了代码量,而且,一切都方便多了,不是么?
------华软网友回复------
这是没有意义的问题.通常如果用自动增值的列作为主键,那么是不会关心它update后获得的值是什么的. 通经常运用的是另外的关头词去检索. 比如我做一个修改LOG,用的是自动增量的列名,但我不会管它是什么,我用的检索参数是文档编号.当然一个文档编号可能有N多个记录,那么谁会去关心那个serialno是什么呢?
------华软网友回复------
我确实遇到了这个问题。

咱们把表自增变量作为了主键,而且需要更新之后的此值联系关系另外一张表。
你能够说这是设计上的问题,然则事实就是这样。

再楼上的一位,你说的有点事理,就是运用GetItem就会获得,咱们现在的现实情况是,大部份机器上能够获得这个值,然则有些却不能。这个时候,你甚至会怀疑是否是PB坏了。由于重新装置PB就能取到。

所以,我想换种方法,对照稳定的,能够让人放心的方法。

这段时间出差了,没来看。但我一直关注着这个帖子的发展情况。      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。