Ms Access、ADODB、记录集、设置主键

Ms Access, ADODB, Recordset, Set Primarykey

我将 ADODB.Recordset 与 PostgreSQL Table 巧妙地连接起来:

Set rs.ActiveConnection = con
rs.Source = psql
rs.LockType = adLockPessimistic
rs.CursorType = adOpenKeyset
rs.index = "id"
rs.Open

我可以更新数据:

rs!somefield = "somevalue"
rs.update

我可以添加数据:

rs.AddNew
rs!someRequiredFiled = "somevalue"
rs.update

但是更新数据不起作用,如果数据在后台被更改:

rs!somefield = "somevalue"
// .... the same field was changed for an other user
rs.update
// -> Error, cause the field to be changed is not found anymore

我认为问题是,记录集没有被告知主键。正确的?我该如何设置主键?

使用客户端游标时,记录通常由其主键标识,或者,如果主键不存在,则记录不可更新。

使用服务器端游标时,服务器会跟踪您正在处理的记录,并且可以通过主键或行版本指示符等方式识别它。如果服务器正在跟踪特定行版本,并且该行发生更改,如果未收到通知,它将失去对它的跟踪。

使用Connection.CursorLocation = adUseClient使用客户端游标。

Recordset.Index 属性 完全用于其他用途。它用于对使用 CommandType = adCmdTableDirect 打开的记录集执行 Recordset.Seek 命令并使用服务器端游标。如果您打印 Recordset.Supports(adIndex),您会注意到您的记录集在打开后不支持它。设置不受支持的 属性 可能引发错误或在 ADO 中什么都不做。