Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 Запрос на обновление из Excel  [new]
bormman
Member

Откуда:
Сообщений: 47
Имею такую базу:
+
Картинка с другого сайта.

Хочется обновлять таблицы Access данными из таблицы Excel одним заходом. Написал такой запрос:
SQL_UPDATE = "UPDATE MTSTAT INNER JOIN (MTDATA INNER JOIN MTMAIN ON MTDATA.KEY = MTMAIN.KEYDATA) ON MTSTAT.KEY = MTMAIN.KEYSTAT " & _
             "SELECT (TDI, TDII, TDIII) FROM [METEO_1] IN '" & pth_EXL & "' [Excel 12.0;HDR=YES;] AS TEMP " & _
             "SET MTMAIN.[TDI]=TEMP.[TDI], MTMAIN.[TDII]=TEMP.[TDII], MTMAIN.[TDIII]=TEMP.[TDIII] " & _
             "WHERE (((MTSTAT.STATION)='Станция') AND ((MTDATA.DATA)=#01.01.2019#))"

Однако получаю "ошибка синтаксиса". Это ошибка в запросе или таким макаром вообще обновлять нельзя?
Поправьте запрос если возможно.

пс.
pth_EXL - это путь к файлу Excel
METEO_1 - это таблица Excel с полями TDI, TDII, TDIII
13 фев 20, 18:33    [22079506]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на обновление из Excel  [new]
bormman
Member

Откуда:
Сообщений: 47
Да уж, оказывается....

В Microsoft Office Access 2003 или Microsoft Access 2002 запрещается вносить изменения, добавлять или удалять данные, источником которых являются книги Excel.
Из-за возникающих юридических вопросов корпорация Майкрософт отключила функции в Access 2003 и в Access 2002, которые позволяли пользователям изменять данные в связанных таблицах, которые указывали на диапазон в книге Excel.


Значит придется через временную табличку Акса делать.
14 фев 20, 02:33    [22079688]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на обновление из Excel  [new]
bormman
Member

Откуда:
Сообщений: 47
Не могу собственный пост изменить, как-то это неправильно.

Хотел добавить подправленный запрос, с которым и получил ошибку, пролившую свет на проблему.
SQL_UPDATE = "UPDATE (SELECT TDI, TDII, TDIII FROM [METEO_1] IN '" & pth_EXL & "' [Excel 12.0;HDR=YES;]) AS TEMP, " & _
             "MTSTAT INNER JOIN (MTDATA INNER JOIN MTMAIN ON MTDATA.KEY = MTMAIN.KEYDATA) ON MTSTAT.KEY = MTMAIN.KEYSTAT " & _
             "SET MTMAIN.[TDI]=TEMP.[TDI], MTMAIN.[TDII]=TEMP.[TDII], MTMAIN.[TDIII]=TEMP.[TDIII] " & _
             "WHERE (((MTSTAT.STATION)='Станция') AND ((MTDATA.DATA)=#01.01.2019#))"

Именно эта ошибка дала понять где проблема.
"ОШИБКА: -2147467259 (Невозможно изменить это поле, поскольку оно находится в связанной электронной таблице Excel. Возможность изменения данных в связанной электронной таблице Excel отсутствует в этом выпуске Access.)"

Сообщение было отредактировано: 14 фев 20, 02:58
14 фев 20, 02:55    [22079693]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на обновление из Excel  [new]
aleks222
Member

Откуда:
Сообщений: 817
bormman

Хочется обновлять таблицы Access данными из таблицы Excel одним заходом. Написал такой запрос:


bormman
"ОШИБКА: -2147467259 (Невозможно изменить это поле, поскольку оно находится в связанной электронной таблице Excel. Возможность изменения данных в связанной электронной таблице Excel отсутствует в этом выпуске Access.)"


Когнитивный диссонанс детектед.

ЗЫ. Не надо придумывать собственный синтаксис update

update t set поле = x.значение
  from Таблица as t
          inner join Excel as x on ...
14 фев 20, 06:31    [22079709]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на обновление из Excel  [new]
bormman
Member

Откуда:
Сообщений: 47
aleks222

ЗЫ. Не надо придумывать собственный синтаксис update

update t set поле = x.значение
  from Таблица as t
          inner join Excel as x on ...

Этот синтаксис работает в SQL Server, в Access он не работает.
14 фев 20, 17:32    [22080241]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на обновление из Excel  [new]
Кривцов Анатолий
Member

Откуда:
Сообщений: 446
bormman, у вас в запросах неправильное представление критерия даты. Должно быть #01/01/2019#. В первом варианте указано:
"SELECT (TDI, TDII, TDIII) FROM [METEO_1] IN '" & pth_EXL & "' [Excel 12.0;HDR=YES;] AS TEMP " & _
а надо
", (SELECT (TDI, TDII, TDIII) FROM [METEO_1] IN '" & pth_EXL & "' [Excel 12.0;HDR=YES;]) AS TEMP " & _

В любом случае ваш запрос не взлетит. Таблица Excel у вас никак не связана с другими таблицами. Это делает запрос не обновляемым, что для UPDATE смертельно. А если на листе не одна строка с данными, а несколько, то тогда вообще не понятно, чем вы собираетесь обновлять. Надо сказать, что даже если с таблицей Excel будет INNER JOIN, то запрос тоже будет не обновляемым, т.к. из-за отсутствия уникального индекса предполагается связь многие-ко-многим.

Можно прилинковать таблицу и в запросе применять DLookup к ее полям.
17 фев 20, 11:56    [22081144]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на обновление из Excel  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 6436
А чё связь уже отменили?
17 фев 20, 12:46    [22081231]     Ответить | Цитировать Сообщить модератору
 Re: Запрос на обновление из Excel  [new]
bormman
Member

Откуда:
Сообщений: 47
Кривцов Анатолий
Да, спасибо за правку. Дату у меня формирует функция, а тут я просто вставил дату (забыл изменить представление).
Но в любом случае не взлетит (причину указал во втором посте). Так, что просто заюзал временную таблицу - туда сливаю все что нужно обновить, а уже с нее обновляю... то же отлично фурычит.
21 фев 20, 23:49    [22084973]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить