关于用ado如何得到自动增加字段的值问题

emmai 2003-06-16 11:30:27
加精
表里面ID字段是自动增加的
每次AddNew和Update以后,我想得到数据库自动生成的ID号,我用的如下方法:

pRSLink->AddNew();
pRSLink->GetFields()->GetItem(_T("Type"))->PutValue(_variant_t(pLink->GetType()));
pRSLink->Update();
pRSLink->MoveLast();
int id=pRSLink->GetCollect(_T("ID")).iVal;

就是说我每次Update以后,使用MoveLast到新插入的纪录,然后取到ID值

可是从前它工作得很好,现在不行了。

请大家指点迷津......
表里只有ID可以标示一条纪录,如果上面的方法不行,我该用什么方法呢?
...全文
87 7 点赞 打赏 收藏 举报
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
emmai 2003-06-17
谢谢大家,受益匪浅!
  • 打赏
  • 举报
回复
emmai 2003-06-16
大家都去快餐了吗?自己顶
  • 打赏
  • 举报
回复
hjunxu 2003-06-16
不好意思,我理解错意思了!
我觉得那句MOVELAST是多余的啊!
  • 打赏
  • 举报
回复
hjunxu 2003-06-16
一般都可以让数据库自己来完成,那样会比较好!绝对不会出错的!
  • 打赏
  • 举报
回复
masterz 2003-06-16
use bookmark

pRSLink->AddNew();
_variant_t VarBookmark=pRSLink->Bookmark;
...
pRSLink->Update();
pRSLink->Bookmark = VarBookmark;
int id=pRSLink->GetCollect(_T("ID")).iVal;
  • 打赏
  • 举报
回复
AnaDes 2003-06-16
我的做法是:
自动编号让DBMS去处理,将自动编号做DB中的一个默认字段.
如果你用的是Oracle,通过序列和触发器实现;你用的SQL SERVER ,那就用自增字段类型.
在Oracle中我给你我的例子:
CREATE SEQUENCE Seq ---- 建序列Seq
INCREMENT BY 1 ---- 1 为步长
START WITH 1 ---- 从1开始
MAXVALUE 999999999999 ---- 最大值为999999999999
MINVALUE 1 ---- 最小值为1
CYCLE; ---- 到了最大值后循环

CREATE OR REPLACE TRIGGER SeqMsgSubmit ---- 为MsgSubmit建个触发器,当插入一条记录时,使得SquenceId自动加1
BEFORE INSERT ON MsgSubmit
FOR EACH ROW
DECLARE
NextSquenceId NUMBER;
BEGIN
SELECT Seq.NEXTVAL
INTO NextSquenceId
FROM dual;
--use the sequence number as the primary key
--for the record being inserted
:new.SequenceId := NextSquenceId;
END;

CREATE TABLE MsgSubmit ----下行短信表
(
SequenceId NUMBER(12,0) NOT NULL,
MsgId CHAR(20), ----消息标志
PkTotal CHAR(1),
PkNumber CHAR
);

你按照这个去实现,这个是正确的.

SQL SERVER 很简单.就设一个自增字段.
  • 打赏
  • 举报
回复
emmai 2003-06-16
  • 打赏
  • 举报
回复
相关推荐
发帖
数据库
加入

3957

社区成员

VC/MFC 数据库
申请成为版主
帖子事件
创建了帖子
2003-06-16 11:30
社区公告
暂无公告