在Access中,如何获取当前插入行的主键值?

mistysunlight 2006-11-15 11:12:13
刚用Access,不太清楚
想实现的效果是:
在视图(由A,B,C三个表组成)中插入,使B表能得该插入行的A_PID(A_PID是A中主键)和C_PID(C_PID是C中的主键)

大概的表结构:
A:
A_PID,C_A1,C_A2,C_A3....
B:
A_PID,C_PID...
C:
C_PID,C_C1,C_C2.....
其中
表之间没有建立关系约束
A.A_PID包含B.A_PID
C.C_PID包含B.C_PID

不知道能否在一个INSERT语句中实现这个功能?
请大家给点法子
_______
觉得有点难度,先给60分,根据情况在另行加分
...全文
650 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
mistysunlight 2006-11-15
  • 打赏
  • 举报
回复
...
谢谢wwwwb()的回复
这个我也考虑过,但是如果ACCESS的自增字段出现下列情况好像就插入不了了
A的自增字段曾经增加到10000
后来删除了100条最后的数据,这是候,库表中显示的最大的PID是9900,按照你的思路来好像取出来的应该是9901吧?但是这样再插入的话,会报错吧...
wwwwb 2006-11-15
  • 打赏
  • 举报
回复
如是单机的话:
insert into b SELECT distinct (select max(id)+1 from a ,
select max(id)+1 from c) from a
mistysunlight 2006-11-15
  • 打赏
  • 举报
回复
因为A中的A_PID 是自增的
C中的C_PID也是自增的
在视图中这两个表字段都不用插入,但是在B表中的这个A_PID和C_PID就需要插入了
但是插入的时候B中这两个字段要和A,C中的对应字段一样
可是不知道怎么实现
假设A.A_PID插入后的值是19998(这个值暂时未知,自增后的值)
同时假设C.C_PID插入后的值是10000(这个值暂时也未知,自增后的值)
插入后的值应该是:
A.A_PID.... B.A_PID B.C_PID,.... C.C_PID
19998...... 19998 10000 ...... 10000

这个如何实现呢?
wwwwb 2006-11-15
  • 打赏
  • 举报
回复
是得到A、C两表最新的ID?
OracleRoob 2006-11-15
  • 打赏
  • 举报
回复
来晚了!!!
mistysunlight 2006-11-15
  • 打赏
  • 举报
回复
再次感谢wwwwb()的热情回复
现在结贴.....
mistysunlight 2006-11-15
  • 打赏
  • 举报
回复

看来稍微好点的方法也只有这个了
呵呵
但是不用+1,我要的只是@@identity这个当前值就可以了
找到了一个用了三条SQL语句解决的方案
这里放出来,方便后来人
"SET NOCOUNT ON;" &_
"INSERT INTO A(....) VALUES (....);" &_
"SELECT @@IDENTITY AS A_PID;"
提供另外一种思路(以前用的):
就是使用事务处理,大概的思路和上面差不多
但推荐上面这个方法,稍微简便一点
wwwwb 2006-11-15
  • 打赏
  • 举报
回复
在插入前,无法得到,只有在插入后,将最新的ID保存才行,或用
ADO链接,SELECT [@@identity]+1
mistysunlight 2006-11-15
  • 打赏
  • 举报
回复
不是我的要求,在Access中,它自己自增的话,应该是10001了,而不是9901的
我要的不是当前没有插入时候A表中最大的PID,我B表中要保存的就是正在插入的A表的那个PID
问题是在这个时候,语句还没有执行,所以判断不了他的PID是什么

INSERT INTO A ....这样进去的时候,A_PID是不要设置的,ACCESS自己会找到上次删除之前最大的值(可能不是当前A表中的值)并且+1,作为这次的值。

ADO链接,SELECT [@@identity]+1 ??
这个语句倒是没有用过,有没有一种好的办法,可以一条语句,或者尽量少的操作,来实现这个目的
wwwwb 2006-11-15
  • 打赏
  • 举报
回复
个我也考虑过,但是如果ACCESS的自增字段出现下列情况好像就插入不了了
A的自增字段曾经增加到10000
后来删除了100条最后的数据,这是候,库表中显示的最大的PID是9900,按照你的思路来好像取出来的应该是9901吧?但是这样再插入的话,会报错吧...

是,按照你的要求,应该是9901还是10001?
你想将最大ID保存到B表?
在删除记录后,应该重新生成ID,要数条SQL语句才行。
OR
用ADO连接MDB,用select [@@identity]+1 试试。

7,714

社区成员

发帖
与我相关
我的任务
社区描述
Microsoft Office Access是由微软发布的关系数据库管理系统。它结合了 MicrosoftJet Database Engine 和 图形用户界面两项特点。
社区管理员
  • Access
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧