我正在迁移Access 2003应用程序以访问2010.该应用程序使用postgres odbc驱动程序来访问其数据。
在Access 2010上,它尝试使用postgresql服务器上的IDENT_CURRENT函数(如wireshark所示)来识别最近插入的行的id ...不幸的是,据我所知,IDENT_CURRENT不是postgresql支持的函数。 ..
我正在使用最新的postgresql ODBC驱动程序(9.0)和postgresql 8.3数据库。
答案 0 :(得分:1)
使用currval
是正确的方法(强调我的):
返回当前会话中此序列的
nextval
最近获得的值。 (如果在此会话中从未为此序列调用nextval
,则会报告错误。)因为此返回会话本地值,所以它提供了可预测的答案,无论其他会话是否自当前会议以来已执行nextval
。
将其包装在IDENT_CURRENT
函数中是一种非常合理的移植技术。
你也可以在INSERT
陈述中使用RETURNING id
(再次强调我的陈述):
可选的
RETURNING
子句使INSERT
根据实际插入的每一行计算和返回值。这主要用于获取默认值提供的值,例如序列号。
这可能会更快更清洁但你仍然有一些可移植性问题。 OTOH,我认为无论你做什么,你都会遇到便携性问题。