Я пытаюсь использовать SQL в VBA для обновления данных в существующей таблице в Excel (тот же файл, что и код vba). Это записывается с SQL-запросами и обновлением с целью перемещения исходных данных в БД вскоре после развертывания, но есть причины, почему не сейчас. Я продолжаю получать ошибку «Операция должна использовать обновляемый запрос.« Некоторые источники показывают ReadOnly в расширенных свойствах, а некоторые нет; оба были опробованы. StatusData - это именованный диапазон в файле Excel. ЗЕЬЕСТ с помощью именованного диапазона работают отлично, используя следующую строку соединения:Строка подключения ACE от Excel 2010 до себя
DBFullName = ThisWorkbook.Path & "\" & ThisWorkbook.Name
CNCT = «Provider = Microsoft.ACE.OLEDB.12.0 ; Источник данных = '"& DBFullName &"';; & _ "Расширенные свойства = 'Excel 12.0; HDR = Yes; IMEX = 1';"
Изменения в соединении запроса включают использование расширенного свойства «Excel 12.0 Macro» и ReadOnly = 0, которые были поэтапно. Разбитый код выглядит следующим образом:
Cnct = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" & DBFullName & "';" & _
"Extended Properties='Excel 12.0 Macro;ReadOnly=0;HDR=Yes;IMEX=1';"
Set Cn = New ADODB.Connection
Cn.Open ConnectionString:=Cnct
strSQL = "UPDATE StatusData SET Notes='ttt' WHERE [Program Category]='something' AND [Program Name]='something' AND [LN]='1' AND [SN]='101';"
Cn.Execute strSQL, RecordsAffected, adExecuteNoRecords
Удалить одинарные кавычки из ' "Расширенные свойства = 'Excel 12,0 Macro, ReadOnly = 0; HDR = Yes; IMEX = 1',"' и попробуйте еще раз ? '" Расширенные свойства = Excel 12.0 Макро, ReadOnly = 0; HDR = Да; IMEX = 1; "' –
Затем ошибка изменяется на «Не удалось найти устанавливаемый ISAM». –
Я нашел страницу (https://social.msdn.microsoft.com/Forums/en-US/355afd19-8128-4673-a9d1-9a5658b72e84/problem-with-updating-excel-and-imex12?forum=adodotnetdataproviders) что я не мог использовать IMEX = 1 или IMEX = 2. Данные содержат много NULL и смешанных номеров и текста в полях. Если я не могу использовать IMEX = 1 для операторов UPDATE или INSERT, есть ли способ сказать, что он всегда интерпретирует данные как строки? Похоже, что он использует правила доступа MS, потому что я попробовал CAST и CONVERT без везения. CStr() преобразует полученные данные, если он не был сначала переназначен провайдером. –