Не могу добавить поля в набор записей ADO - эта операция не разрешена в этом контексте - PullRequest
1 голос
/ 04 июня 2019

Мне нужно добавить поля в существующий набор записей ADO с сервера оракула.Это мой код, который я пробовал, но я получаю сообщение об ошибке

Операция не разрешена в этом контексте

With ADORec
Set .ActiveConnection = ADOConn
.Source = SQL
.LockType = adLockOptimistic
.CursorType = adOpenKeyset
.CursorLocation = adUseClient
.Open
End With
ADORec.AddNew
ADORec.Fields.Append "calcField", adInteger, , adFldUpdatable

SQL получает список идентификаторов.

Как мне получить дополнительный столбец в моем наборе записей, где я могу выполнить вычисления в vba?

Или: Каков был бы ваш подход к этой проблеме в первую очередь?

1 Ответ

0 голосов
/ 04 июня 2019

Вы можете очень редко (= почти никогда) добавлять поля в наборы записей ADODB.

Набор записей ADODB по умолчанию привязан к таблице, из которой он получен, и внесение в него изменений должно внести изменения в эту таблицу. Это также явно не ваше намерение. Хотя вы можете разорвать соединение или скопировать проект и данные в несвязанный набор записей, это может привести к проблемам.

Кроме того, .AddNew относится к добавлению новой записи, а не нового поля.

Если вы хотите отобразить результаты расчетов в форме, выполните вычисления в контрольном источнике. Разделенные формы позволяют это.

Просто добавьте элемент управления, который будет содержать результат вашего расчета, и установите источник управления равным =MyFunctionToDoCalculation(InpArguments)

Однако, как правило, выполняйте вычисления в SQL, если это возможно, как по соображениям производительности, так и надежности.

Если вы хотите выполнить многострочные вычисления (например, скользящее среднее), прокомментируйте, и я поделюсь существенно более сложным подходом, который также имеет больше побочных эффектов (таких как ошибки при сортировке / фильтрации / обновлении).

...