我 scussefully 连接 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
我认为问题是,记录集没有被告知主键。正确的?以及如何设置主键?
使用客户端游标时,记录通常由其主键标识,或者,如果主键不存在,则记录不可更新。
使用服务器端游标时,服务器会跟踪您正在处理的记录,并且可以通过诸如主键或行版本指示符之类的东西来标识。如果服务器正在跟踪特定的行版本,并且该行被更改,如果没有通知它,它将失去对它的跟踪。
使用Connection.CursorLocation = adUseClient
使用客户端游标。
该Recordset.Index
财产完全用于其他用途。它用于为使用服务器端游标Recordset.Seek
打开的记录集执行命令CommandType = adCmdTableDirect
。如果您打印Recordset.Supports(adIndex)
,您会注意到您的记录集在打开后不支持它。设置不受支持的属性可能会引发错误或在 ADO 中什么也不做。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句