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

时间:2018-09-28 09:23:49

标签: postgresql ms-access adodb

我想将ADODB.Recordset与PostgreSQL表连接起来

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

我认为问题是,没有通知Recordset有关主键。对?以及如何设置主键?

1 个答案:

答案 0 :(得分:1)

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

使用服务器端游标时,服务器会跟踪您正在处理的记录,并且可以通过主键或行版本指示符之类的名称进行标识。如果服务器正在跟踪特定的行版本,并且该行被更改,则在未通知的情况下它将失去对其的跟踪。

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

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