Я уже несколько недель использую отключенные наборы записей, обычно получаю данные с SQL Server, отключаю rs и фильтрую / форматирую в VBA.Теперь я пытаюсь сделать наоборот и создать новый набор записей ADO с нуля, а затем подключить его к моей базе данных и использовать UpdateBatch, чтобы вставить набор записей в базу данных без использования цикла.На данный момент у меня есть полный набор записей, подключил его обратно к строке подключения и попробуйте UpdateBatch.Понятно, что на данный момент у него нет информации о том, какую таблицу я пытаюсь обновить (только Источник данных и Исходный каталог через строку подключения).Есть ли свойство набора записей, которое я использую для предоставления рассматриваемой таблицы?Кроме того, таблица, в которую я пытаюсь импортировать, имеет поле GUID (первое поле), которое я специально оставил пустым в своем отключенном наборе записей, предполагая, что при импорте SQL Server автоматически назначит этот GUID / первичный ключ.
Конкретная ошибка, которую я получаю после "rs.UpdateBatch", - ошибка времени выполнения '-2147467259 (80004005)' "Недостаточно информации базовой таблицы для обновления или обновления.
Я знаю, что мог бы использовать цикли SQL-команду «INSERT INTO ...». Я хотел бы использовать объект набора записей, так как они предоставляют гораздо больше функциональных возможностей в качестве контейнера для данных. Одна вещь, которую я не пробовал, - это сначала получить набор записей из таблицы.в вопросе, затем очистите его и заново заполните его новыми данными, чтобы сам набор записей сохранил все исходные свойства базы данных и таблицы. Если это единственный / лучший подход, я тоже могу попробовать этот маршрут. Я просто хотел посмотреть,можно было создать набор записей ADO, заполнить его, а затем вставить в соответствующую таблицу.мой выбор
dim rs as ADODB.Recordset
set rs = New ADODB.Recordset
With rs.Fields
.append "alias", adVarChar, 255
.append "textA", adVarChar, 255
.append ......
End With
rs.Open
rs.AddNew Array(0, 1, 2, ..., n), Array(val0, val1, val2, ..., valn)
rs.Update
call importRS(rs)
rs.close
set rs = nothing
После того, как rs.update выше, некоторые наборы записей могут понадобиться для перехода в базу данных, другие объекты набора записей просто используются для ускорения фильтрации и сортировки, поэтому я просто использую их как удобный контейнер, и ониникогда не переходить на importRS ()
Однако, если мне нужно отправить отключенный набор записей в базу данных, я бы хотел просто передать объект набора записей другой функции, которая служит для открытия соединения, отправкиобновление и закрытие соединения.Приведенный ниже код будет служить этой цели, поэтому я хотел бы подождать, чтобы установить соединение до этой точки, прямо в конце после заполнения моего rs.
sub importRS(byref rs as ADODB.Recordset)
dim cn as ADODB.Connection
set cn = New ADODB.Connection
cn.ConnectionString = strConnection 'my connection string variable'
cn.Open
rs.ActiveConnection = cn
rs.UpdateBatch '-------error message appears on this line
cn.close
set cn = nothing