Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Временная таблица / 19 сообщений из 19, страница 1 из 1
07.06.2016, 17:33
    #39252231
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Временная таблица
Доброе время суток!

Есть excel-ий файл. Там присутствуют несколько листов с данными. Есть подключение ODBC , который запускает SQL-запрос к этим листам, и выводит результат на отдельный лист.

Пытаюсь в запросе использовать временную таблицу, так как запрос сложный, присутствуют вложенности, join и union. Пишу запрос с использованием INTO. Такая функция вроде должна работать в Microsoft Access SQL/Queries .

Вот простой пример.
Код: sql
1.
SELECT * INTO TEMP FROM `Лист1$`

Запускаю. Выдает сообщение об ошибке "[Microsoft][Драйвер ODBC Excel] Обновление не возможно". База данных или объект доступны только для чтения". Если разрешить доступ к базе данных, в данном случае к листу, то логически как временную таблицу можно поместить на лист, если там находятся исходные данные?

Если написать такой запрос
Код: sql
1.
2.
WITH TEMP AS (SELECT * FROM `Лист1$`)
SELECT * FROM TEMP

то выдает сообщение об ошибке. "[Microsoft][Драйвер ODBC Excel] Ошибочная инструкция SQL; предполагалось 'DELETE', 'INSERT', 'PROCEDURE', 'SELECT' или 'UPDATE'". Похоже WITH для сохранения промежуточного результата запроса в Microsoft Access SQL/Queries не поддерживается.

Что не так делаю? Как здесь правильно создать временную таблицу?
...
Рейтинг: 0 / 0
07.06.2016, 17:45
    #39252245
MrShin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Временная таблица
ferzmikk,

Насколько я знаю, в Акцессе нет ни полноценных временных таблиц, ни конструкций WITH.
Для создания временной таблицы используйте CREATE TABLE, там есть параметр TEMPORARY:

When a TEMPORARY table is created it is visible only within the session in which it was created. It is automatically deleted when the session is terminated. Temporary tables can be accessed by more than one user

На деле такие таблицы не всегда удаляются, поэтому не советую полагаться на автоматическое удаление, а просто создать таблицу, удалять из нее записи перед вставкой, либо удалять и пересоздавать таблицу каждый раз, если колонки могут отличаться от запроса к запросу.
...
Рейтинг: 0 / 0
07.06.2016, 19:50
    #39252322
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Временная таблица
MrShinferzmikk,

Насколько я знаю, в Акцессе нет ни полноценных временных таблиц, ни конструкций WITH.
Для создания временной таблицы используйте CREATE TABLE, там есть параметр TEMPORARY:

When a TEMPORARY table is created it is visible only within the session in which it was created. It is automatically deleted when the session is terminated. Temporary tables can be accessed by more than one user

На деле такие таблицы не всегда удаляются, поэтому не советую полагаться на автоматическое удаление, а просто создать таблицу, удалять из нее записи перед вставкой, либо удалять и пересоздавать таблицу каждый раз, если колонки могут отличаться от запроса к запросу.Написал запрос так
Код: sql
1.
2.
CREATE TEMPORARY  TABLE TEMP AS (SELECT  * FROM `ИД1$` )
SELECT  * FROM TEMP

Пишет "[Microsoft][Драйвер ODBC Excel]Ошибка синтаксиса в инструкции CREATE TABLE"

Что не так?
...
Рейтинг: 0 / 0
07.06.2016, 20:09
    #39252329
\\\\
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Временная таблица
ferzmikk,
акс не поддерживает временных таблиц.
Ну и курим запрос на создание таблицы.
...
Рейтинг: 0 / 0
07.06.2016, 20:14
    #39252332
\\\\
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Временная таблица
ferzmikk, да, и прежде чем вставлять новые таблицы найди по форуму (а этого добра тут навалом), как запросом получит данные с листа экселя. Прежде чем спрашивать юзай поиск.
...
Рейтинг: 0 / 0
08.06.2016, 08:16
    #39252440
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Временная таблица
\\\\ferzmikk,
акс не поддерживает временных таблиц.
Ну и курим запрос на создание таблицы.
Провел эксперименты

Строка подключения:
DBQ=C:\Users\User\Desktop\Локальный.xlsm;Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DriverId=1046;ExtendedAnsiSQL=1;MaxBufferSize=2048;PageTimeout=5;ReadOnly=1;

Строка запроса
Код: sql
1.
SELECT  * INTO  [Excel 8.0;Database=C:\Users\User\Desktop\Локальный.xlsm;HDR=YES;IMEX=2].[Лист2$]  FROM `Лист1$` 


По идее, если не ошибаюсь, в этом файле должен создавать лист с таблицей.

Если в файле присутствует вкладка "Лист2", то пишет "[Microsoft][Драйвер ODBC Excel] Таблица 'Лист2$' уже существует"

Если в файле отсутствует вкладка "Лист2", то пишет "[Microsoft][Драйвер ODBC Excel] Недопустимое имя 'Лист2'$. Проверьте, что оно не содержит недопустимые символы или знаки препинания, а также не является слишком длинным.

Если в INTO указать другой существующий или несуществующий файл, то пишет "[Microsoft][Драйвер ODBC Excel] Обновление не возможно. База данных или объект доступны только для чтения"

Может тут от строки подключения зависит?
...
Рейтинг: 0 / 0
08.06.2016, 09:02
    #39252463
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Временная таблица
Я правильно понимаю, что в данной ситуации в локальном запросе не создать темповую таблицу, но возможно если создавать программно с помощью Database, QueryDef?
...
Рейтинг: 0 / 0
08.06.2016, 09:03
    #39252465
\\\\
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Временная таблица
ferzmikk, так ты пытаешься создать таблицу(лист) прямо в экселе? Не, не получится, ЕМНИП, запросы к эксель не редактируемые с какой-то версии офиса. Создавай таблицу в акцес и методами экспорта (разные есть способы) отправляй данные в эксель. Как то так, ИМХО.

Возможно я ошибаюсь - имею право ©
...
Рейтинг: 0 / 0
08.06.2016, 09:34
    #39252497
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Временная таблица
\\\\ferzmikk, так ты пытаешься создать таблицу(лист) прямо в экселе? Не, не получится, ЕМНИП, запросы к эксель не редактируемые с какой-то версии офиса. Создавай таблицу в акцес и методами экспорта (разные есть способы) отправляй данные в эксель. Как то так, ИМХО.

Возможно я ошибаюсь - имею право ©
У меня сам запрос очень большой и сложный. И поэтому хотел часть запросов затолкать во временную. Вот простой пример
Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT Т1.Поле1, Т1.Поле2, Т1.Поле3, Т1.Поле4, Т2.Количество FROM
СложныйЗапрос AS Т1 LEFT JOIN
(SELECT DISTINCT Поле1, Поле2, Count(Поле3) AS Количество FROM СложныйЗапрос) AS Т2
ON
(Т1.Поле1 = Т2.Поле1
AND
Т1.Поле2 = Т2.Поле2)

Иначе сам запрос будет еще более сложным и трудоемким для восприятия.

Может быть есть другие пути решения, кроме создание таблиц в Access? ADO поможет?
...
Рейтинг: 0 / 0
08.06.2016, 09:41
    #39252503
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Временная таблица
ferzmikk , вот растолкуй мне простую вещь...

Я понимаю, что у тебя есть Access-база, которая берёт исходные данные из файлов Excel, что-то там считает сложное настолько, что без временной таблицы не обойтись, а результат расчёта вываливает опять же на лист в файл Excel. Всё ясно, кроме одного - вот за каким хреном надо временную таблицу (которая потом ведь стопудово будет похерена) делать тоже в файле Excel? почему её не формировать в самой БД Access?

От временной таблицы требуется только одно - БЫСТРО. Но ведь у себя под боком гораздо быстрее, чем чёрт те где...
...
Рейтинг: 0 / 0
08.06.2016, 10:02
    #39252524
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Временная таблица
Akina ferzmikk , вот растолкуй мне простую вещь...

Я понимаю, что у тебя есть Access-база, которая берёт исходные данные из файлов Excel, что-то там считает сложное настолько, что без временной таблицы не обойтись, а результат расчёта вываливает опять же на лист в файл Excel. Всё ясно, кроме одного - вот за каким хреном надо временную таблицу (которая потом ведь стопудово будет похерена) делать тоже в файле Excel? почему её не формировать в самой БД Access?

От временной таблицы требуется только одно - БЫСТРО. Но ведь у себя под боком гораздо быстрее, чем чёрт те где...
У меня ситуация такая. Безусловно, самый лучший вариант это выгружать данные из сервера с помощью SQL-запроса. Но не разрешают пользоваться. Есть OLAP. Если делать MDX-запросы, то запросы получаются очень большими и запутанными. А также MDX не соединяет таблицы как SQL, имеет другую логику. Поэтому делаю так: на каждый excel-лист выгружаю данные с OLAP и потом запускаю локальный SQL-запрос к этим листам, соединяются таблицы как надо, расчеты разные и выводит результат на другой лист. Сам SQL-запрос очень большой. Важно чтобы потом можно было мобильно дорабатывать запрос, так как у заказчика потом появляются дополнительные запросы. Учитывая такой логический нюанс, что разрабатываю инструмент, который формирует нужный отчет нажатием одной кнопки с помощью макросов. Не пробовал в Access выгружать данные с OLAP и потом запускать локальный SQL-запрос. Я просто исхожу из той логики, чтобы другим пользователям не приходилось делать еще какие то запутанные действия для получения нужного отчета.
...
Рейтинг: 0 / 0
08.06.2016, 10:19
    #39252535
ROI
ROI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Временная таблица
ferzmikkAkina ferzmikk , вот растолкуй мне простую вещь...

Я понимаю, что у тебя есть Access-база, которая берёт исходные данные из файлов Excel, что-то там считает сложное настолько, что без временной таблицы не обойтись, а результат расчёта вываливает опять же на лист в файл Excel. Всё ясно, кроме одного - вот за каким хреном надо временную таблицу (которая потом ведь стопудово будет похерена) делать тоже в файле Excel? почему её не формировать в самой БД Access?

От временной таблицы требуется только одно - БЫСТРО. Но ведь у себя под боком гораздо быстрее, чем чёрт те где...
У меня ситуация такая. Безусловно, самый лучший вариант это выгружать данные из сервера с помощью SQL-запроса. Но не разрешают пользоваться. Есть OLAP. Если делать MDX-запросы, то запросы получаются очень большими и запутанными. А также MDX не соединяет таблицы как SQL, имеет другую логику. Поэтому делаю так: на каждый excel-лист выгружаю данные с OLAP и потом запускаю локальный SQL-запрос к этим листам, соединяются таблицы как надо, расчеты разные и выводит результат на другой лист. Сам SQL-запрос очень большой. Важно чтобы потом можно было мобильно дорабатывать запрос, так как у заказчика потом появляются дополнительные запросы. Учитывая такой логический нюанс, что разрабатываю инструмент, который формирует нужный отчет нажатием одной кнопки с помощью макросов. Не пробовал в Access выгружать данные с OLAP и потом запускать локальный SQL-запрос. Я просто исхожу из той логики, чтобы другим пользователям не приходилось делать еще какие то запутанные действия для получения нужного отчета.
Запутанные действия с помощью макросов-наврят ли.
...
Рейтинг: 0 / 0
08.06.2016, 10:37
    #39252551
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Временная таблица
Я сам в Access не так часто работал, поэтому полностью не владею о возможностях.
В принципе можно так сделать: пользователь открывает форму, не открывая Access, нажимает на кнопку, макрос программно открывает Access, выгружает данные с OLAP, а также часть данных excel-ого файла предыдущего месяца, запуск локального SQL-запроса и результат толкает в новый excel-файл.
...
Рейтинг: 0 / 0
08.06.2016, 10:54
    #39252576
Временная таблица
ferzmikk
Код: sql
1.
SELECT  * INTO  [Excel 8.0;Database=C:\Users\User\Desktop\Локальный.xlsm;HDR=YES;IMEX=2].[Лист2$]  FROM `Лист1$`


Если в файле отсутствует вкладка "Лист2", то пишет "[Microsoft][Драйвер ODBC Excel] Недопустимое имя 'Лист2'$. Проверьте, что оно не содержит недопустимые символы или знаки препинания, а также не является слишком длинным. Правильно пишет. Запрос SELECT * INTO.. в Excel-е создает новый ИМЕНОВАНЫЙ ДИАПАЗОН на новом одноименном листе.
Надо указывать имя диапазона, а не листа, т.е. без символа "$":
[Excel 8.0;Database=C:\Users\User\Desktop\Локальный.xlsm;HDR=YES;IMEX=2]. [Лист2]

ЗЫ. Может и ошибаюсь...
...
Рейтинг: 0 / 0
08.06.2016, 11:08
    #39252593
ROI
ROI
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Временная таблица
ferzmikkЯ сам в Access не так часто работал, поэтому полностью не владею о возможностях.
В принципе можно так сделать: пользователь открывает форму, не открывая Access, нажимает на кнопку, макрос программно открывает Access, выгружает данные с OLAP, а также часть данных excel-ого файла предыдущего месяца, запуск локального SQL-запроса и результат толкает в новый excel-файл.
Не, это ваши мечты, не открывая Access, Открыть форму не получится.
Через "Recordset" это наверное проще.
С уважением.
...
Рейтинг: 0 / 0
08.06.2016, 11:14
    #39252603
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Временная таблица
ferzmikkделаю так: на каждый excel-лист выгружаю данные с OLAP и потом запускаю локальный SQL-запрос к этим листам, соединяются таблицы как надо, расчеты разные и выводит результат на другой лист.Ну вот растолкуй - за каким хреном тебе эти выборки обязательно в Excel ? Что мешает грести данные в таблицы Access - любовь к Excel? ненависть к Access? большое желание хоть как-то задействовать ODBC? не понимаю...
...
Рейтинг: 0 / 0
08.06.2016, 12:36
    #39252701
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Временная таблица
Akinaferzmikkделаю так: на каждый excel-лист выгружаю данные с OLAP и потом запускаю локальный SQL-запрос к этим листам, соединяются таблицы как надо, расчеты разные и выводит результат на другой лист.Ну вот растолкуй - за каким хреном тебе эти выборки обязательно в Excel ? Что мешает грести данные в таблицы Access - любовь к Excel? ненависть к Access? большое желание хоть как-то задействовать ODBC? не понимаю...
Возможно Вы и правы, что данную задачу решать лучше в Access. Говорю же в Access мало работал, привык в Excel все делать. Поскольку такая ситуация с ограничением доступа данным, пришлось искать альтернативные решения, пока вышел на такое решение (не совсем оптимальное по Вашим словам): на каждый лист выгружать отдельную таблицу и потом запускать локальный SQL-запрос. До Access не дошел. В excel-ом файле присутствуют удобное меню для пользователя, строятся разные таблички на разных листах с оформлениями, сводные таблицы с привязанными событиями, различные диаграммы. Не знаю Access так может ли. По поводу ODBC, то говорят что с OLEDB периодически возникают проблемы с блокировкой файла. Исхожу из того, чтобы простым пользователям было удобно работать с отчетами.
...
Рейтинг: 0 / 0
08.06.2016, 12:43
    #39252706
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Временная таблица
Ты не понял...

Сначала получи данные в Access. Там обработай, получи результаты. А полученные итоги - только те, которые надо показывать пользователю, - вот их уже хоть в Excel экспортируй, хоть ещё куда, где удобные меню и прочие украшательства. Пусть крутит хоть до посинения.

А исходные и промежуточные данные юзеру не нужны. Ещё испортит чего ненароком...
...
Рейтинг: 0 / 0
08.06.2016, 14:12
    #39252803
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Временная таблица
AkinaТы не понял...

Сначала получи данные в Access. Там обработай, получи результаты. А полученные итоги - только те, которые надо показывать пользователю, - вот их уже хоть в Excel экспортируй, хоть ещё куда, где удобные меню и прочие украшательства. Пусть крутит хоть до посинения.

А исходные и промежуточные данные юзеру не нужны. Ещё испортит чего ненароком...
Спасибо, понял!
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Временная таблица / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]