Использование INSERT INTO для записи данных в базу данных доступа - PullRequest
1 голос
/ 02 февраля 2012

Я пытаюсь использовать команду INSERT INTO для записи данных в файл Access 2007 из файла Excel 2010.Данные содержатся в рабочем листе «NewProj» в файле Excel Tool_Selector.xlsm, и их необходимо записать в файл «Tool_Database.mdb», но, к сожалению, я получил несколько разных ошибок.

Sub AddData()
  Dim Cn As ADODB.Connection
  Set Cn = New ADODB.Connection

  Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Tools_Dev\_Tool_Selector\Tool_Selector.xlsm;Extended Properties=Excel 8.0;" _
        & "Persist Security Info=False"

  Cn.Execute "INSERT INTO Project_Names IN 'D:\Tool_Database\Tool_Database.mdb' SELECT * FROM Worksheets("NewProj").Range("A2").Value"

  Cn.Close
  Set Cn = Nothing
End Sub

Я получил код из этой ветки: Вставка данных из Excel в Access с использованием VBA

Мне просто нужно передать значение отдельных ячеек.

Спасибо.

Ответы [ 2 ]

2 голосов
/ 07 февраля 2012

Проблема в том, что вы используете код VBA в операторе SQL.Следующая строка будет скомпилирована, но завершится с ошибкой при выполнении:

Cn.Execute "INSERT INTO Project_Names IN 'D:\Tool_Database\Tool_Database.mdb' SELECT * FROM Worksheets("NewProj").Range("A2").Value"

Сбой, потому что вы все еще в операторе SELECT, когда вы используете функции VBA Worksheets (), .Range и .Value.IIRC, вы должны быть в состоянии использовать синтаксис SQL для выбора определенного диапазона на листе.Правильный синтаксис для этого должен быть:

"SELECT * FROM [Sheet$]"

Если вы хотите определенный диапазон, то вы попытаетесь:

"SELECT * FROM [Sheet$A1:C20]"

На эту статью Microsoft есть: http://support.microsoft.com/kb/257819 если вам нужна дополнительная информация об использовании ADO в Excel.Сценаристы также написали приличную статью, которая помогла мне понять это несколько лет назад: http://technet.microsoft.com/en-us/library/ee692882.aspx.

Надеюсь, это поможет вам решить вашу проблему.Тем не менее, я оставлю вас с одним словом предупреждения.Я помню, как столкнулся с некоторыми действительно странными проблемами при запросе уже открытой электронной таблицы Excel, когда я впервые использовал этот код.Если бы я запрашивал электронную таблицу Excel, которая уже была открыта, я столкнулся бы с проблемой утечки памяти, и Excel в конечном итоге не хватило бы памяти для использования.Единственный способ решить проблему - полностью закрыть Excel.Также не имело значения, были ли ссылки ADO правильно закрыты / очищены или нет.

На самом деле, я просто прогуглил это, чтобы дважды проверить, и вот статья об ошибке: http://support.microsoft.com/default.aspx?scid=kb;en-us;319998&Product=xlw.

0 голосов
/ 02 февраля 2012

Звучит похоже на проблему, с которой я однажды сталкивался при обновлении с Office 2003 до 2007.

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

Provider=Microsoft.Ace.OLEDB.12.0;

Возможно, вы захотите посмотреть и на это свойство Extended.Я знаю, что Excel 8.0 - это файл Excel '97.А Excel 2010 - 14,0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...