MS Access, ADODB, набор записей, установить первичный ключ - PullRequest
0 голосов
/ 28 сентября 2018

Я соединяю 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

Я думаю, проблема в том, что набор записей не проинформирован о первичном ключе.Правильно?А как мне установить первичный ключ?

1 Ответ

0 голосов
/ 28 сентября 2018

При использовании клиентского курсора запись обычно идентифицируется по первичному ключу или, если его нет, запись не может быть обновлена.

При использовании серверного курсора сервер отслеживает, с какой записью вы работаете, и это можно определить по таким вещам, как первичный ключ или индикатор обращения строки.Если сервер отслеживает конкретную версию строки, и эта строка изменяется, она потеряет ее, если не будет уведомлена.

Используйте Connection.CursorLocation = adUseClient для использования курсора на стороне клиента.

Свойство Recordset.Index полностью используется для чего-то другого.Он используется для выполнения Recordset.Seek команд для наборов записей, открытых с помощью CommandType = adCmdTableDirect и с использованием курсора на стороне сервера.Если вы напечатаете Recordset.Supports(adIndex), вы заметите, что ваш набор записей не поддерживает его после открытия.Установка неподдерживаемого свойства может вызвать ошибку или просто ничего не делать в ADO.

...