2016-10-15 4 views
4

У меня есть проект, в котором пользователям необходимо будет заполнить файл Excel, а затем экспортировать данные в базу данных Access. Данные, собранные в файле Excel, должны быть экспортированы в три этапа: (1) набор данных экспорта данных 1, (2) запрос Доступ для первичного ключа (автоматический номер) новой импортированной записи, (3) данные экспорта set 2 record, который включает в себя первичный ключ, заполненный как внешний ключ.Синтаксис SQL ADODB - таблица доступа Внутренняя запись с листом Excel

Я могу выполнить первый шаг, установив и открыв соединение ADODB. Тем не менее, я столкнулся с трудностями на втором этапе, когда мне нужно сделать внутреннее соединение в таблице Access и Excel.

wlodb.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\" &userSID & "\Desktop\WLO R&C Database_10-4-16.accdb" 

sqlFindREMPK = "Select ID " _ 
& "FROM [test1] a " _ 
& "INNER JOIN [Excel 8.0;HDR=YES;IMEX=2;DATABASE=C:\User\RED-WIP.xlsm].[REM Upload$] b " _ 
& "ON a.[REM_ID_Database] = b.[REM_ID_Database] " _ 
& "WHERE (((a.[REM_ID_Database])=""REM9811044""));" 

WLOrs.Open sqlFindREMPK, wlodb 

ActiveSheet.Range("A10").CopyFromRecordset (WLOrs) 

Таблица и имя рабочего листа имеют одинаковые имена полей. Проблема заключается в предложении SELECT. Если я останусь как есть, я получу ошибку, говоря, что поле может ссылаться на более чем одну таблицу в предложении FROM. Если я добавлю имя таблицы, например [test1]. [ID], тогда я получу сообщение, в котором не указано значение для требуемых параметров. Если я изменил имя поля Excel немного на ID1 и оставьте предложение SELECT как только ID, код будет работать нормально.

+3

Вы пытались использовать псевдоним 'select a.ID'? – sgeddes

+0

Это сработало. Я не думал об использовании псевдонима, прежде чем объявлять его в предложении FROM. Кажется немного противоречивым, но это сработало. – Ryan

ответ

1

Как только вы предоставите псевдоним для таблицы, вы должны использовать этот псевдоним, ссылаясь на эту таблицу. Вы больше не можете получить доступ к таблице по своему первоначальному имени.

sqlFindREMPK = "Select a.ID " _ 
    & "FROM [test1] a " _ 
    & "INNER JOIN [Excel 8.0;HDR=YES;IMEX=2;DATABASE=C:\User\RED-WIP.xlsm].[REM Upload$] b " _ 
    & "ON a.[REM_ID_Database] = b.[REM_ID_Database] " _ 
    & "WHERE (((a.[REM_ID_Database])=""REM9811044""));" 
+0

В качестве альтернативы, мы могли бы наткнуться на @sgeddes, чтобы дать этому старому вопросу новый ответ! – Parfait

Смежные вопросы