2015-07-10 2 views
1

Я пытаюсь использовать 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 
+0

Удалить одинарные кавычки из ' "Расширенные свойства = 'Excel 12,0 Macro, ReadOnly = 0; HDR = Yes; IMEX = 1',"' и попробуйте еще раз ? '" Расширенные свойства = Excel 12.0 Макро, ReadOnly = 0; HDR = Да; IMEX = 1; "' –

+0

Затем ошибка изменяется на «Не удалось найти устанавливаемый ISAM». –

+0

Я нашел страницу (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() преобразует полученные данные, если он не был сначала переназначен провайдером. –

ответ

0

я был проблемы с использованием IMEX так что в конце концов я перестал его использовать для этой цели, эта строка соединения не давала мне проблемы для использования ADO/ACE для подключения назад к книге (обычно для SQL GroupBy), но вам может потребоваться некоторое кондиционирование данных, прежде чем устанавливать соединение (я беру всю таблицу в массив и цикл, хотя поля меняются по мере необходимости, а затем сбрасываются обратно на лист), легко достаточно, так как его уже в той же книге, конечно:

Dim conn As Object 
Dim sPath As String 

sPath = "C:\offlinestorage\temp1.xlsx" 
Set conn = CreateObject("ADODB.Connection") 
With conn 
    .Provider = "Microsoft.ACE.OLEDB.12.0" 
    .ConnectionString = Format("Data Source=" & sPath & ";Extended Properties='Excel 12.0 XML;HDR=Yes';") 
    .Open 
End With 
Смежные вопросы