Сгенерированный оператор Excel VBA INSERT для Access не работает в VBA, но работает в Access - PullRequest
0 голосов
/ 10 мая 2018

Я использую VBA в Excel, чтобы сгенерировать оператор INSERT, который будет выполнен в процедуре VBA. Когда я запускаю код, я получаю ошибку времени выполнения «Синтаксическая ошибка в операторе INSERT INTO», когда я получаю инструкцию Execute - то же полезное сообщение, которое вы получаете, если вы сделали что-то не так в представлении SQL в Access. Тем не менее, когда я запускаю строку SQL, сгенерированную кодом VBA в Access , используя старомодное копирование и вставку, она работает нормально - сообщений об ошибках нет, и при открытии таблицы появляются записи.

Это не тот способ, которым я выполняю команду в VBA, поскольку у меня есть оператор DELETE, который работает так, как должен. Код работает следующим образом:

Set Cn = CreateObject("ADODB.Connection")
Set Rs = CreateObject("ADODB.Recordset")

Cn.Open cnPath
SQLStr = "SELECT * FROM [" & tblName & "]"
Rs.Open SQLStr, Cn, 1, 3

'code builds SQL str here by looping through
'table headers and relevant row

Cn.Execute SQLStr

Результирующий SQLStr выглядит примерно так:

INSERT INTO [Size Profiles] (Season,Region,Department,ProfType,ColourID,ArticleNumber,StyleName,Colour,Comments,Channel,Fit,SizeProfile,LastChanged,Identifier,FileName,Size,RegionSizeRun,Site,ActualSizeProfile,ActualFileName,ActualLastChanged,ActualPairs,Fixing,Oddity) VALUES ('AW2018', 'UK', 'Childrens', '', 188473, 26145715, 'Product Name', 'Product Colour', '', 'Retail', 'F(M)', 0.186, #05/09/2018#, '26145715AW2018DC01UKF(M)', 'New Sizing Template.xlsb', 70, '', 'DC01', 0, '', #05/09/2018#, 0, '0', '')

Кто-нибудь видел эту проблему раньше?

1 Ответ

0 голосов
/ 10 мая 2018

С этим покончил после долгого дня, и, конечно же, поспав на нем и посмотрев на него утром, я понял, что одно из имен столбцов ( Размер ) является зарезервированным словом в MS Access. Вставив SQL-код в представление конструктора Access, программа должна сделать что-то, чтобы исправить это, не сообщая вам.

Я решил проблему, добавив фрагмент кода, который добавляет квадратные скобки вокруг имен полей, в соответствии с:

insertPart1 = "INSERT INTO [" & tblName & "] ("
For c = 1 To maxC
    insertPart1 = insertPart1 & "[" & .Cells(1, c).Value & "],"
Next c
insertPart1 = Left(insertPart1, Len(insertPart1) - 1) & ") VALUES "
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...