powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Временная таблица
19 сообщений из 19, страница 1 из 1
Временная таблица
    #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
Временная таблица
    #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
Временная таблица
    #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
Временная таблица
    #39252329
\\\\
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ferzmikk,
акс не поддерживает временных таблиц.
Ну и курим запрос на создание таблицы.
...
Рейтинг: 0 / 0
Временная таблица
    #39252332
\\\\
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ferzmikk, да, и прежде чем вставлять новые таблицы найди по форуму (а этого добра тут навалом), как запросом получит данные с листа экселя. Прежде чем спрашивать юзай поиск.
...
Рейтинг: 0 / 0
Временная таблица
    #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
Временная таблица
    #39252463
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я правильно понимаю, что в данной ситуации в локальном запросе не создать темповую таблицу, но возможно если создавать программно с помощью Database, QueryDef?
...
Рейтинг: 0 / 0
Временная таблица
    #39252465
\\\\
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ferzmikk, так ты пытаешься создать таблицу(лист) прямо в экселе? Не, не получится, ЕМНИП, запросы к эксель не редактируемые с какой-то версии офиса. Создавай таблицу в акцес и методами экспорта (разные есть способы) отправляй данные в эксель. Как то так, ИМХО.

Возможно я ошибаюсь - имею право ©
...
Рейтинг: 0 / 0
Временная таблица
    #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
Временная таблица
    #39252503
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ferzmikk , вот растолкуй мне простую вещь...

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

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

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

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

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

От временной таблицы требуется только одно - БЫСТРО. Но ведь у себя под боком гораздо быстрее, чем чёрт те где...
У меня ситуация такая. Безусловно, самый лучший вариант это выгружать данные из сервера с помощью SQL-запроса. Но не разрешают пользоваться. Есть OLAP. Если делать MDX-запросы, то запросы получаются очень большими и запутанными. А также MDX не соединяет таблицы как SQL, имеет другую логику. Поэтому делаю так: на каждый excel-лист выгружаю данные с OLAP и потом запускаю локальный SQL-запрос к этим листам, соединяются таблицы как надо, расчеты разные и выводит результат на другой лист. Сам SQL-запрос очень большой. Важно чтобы потом можно было мобильно дорабатывать запрос, так как у заказчика потом появляются дополнительные запросы. Учитывая такой логический нюанс, что разрабатываю инструмент, который формирует нужный отчет нажатием одной кнопки с помощью макросов. Не пробовал в Access выгружать данные с OLAP и потом запускать локальный SQL-запрос. Я просто исхожу из той логики, чтобы другим пользователям не приходилось делать еще какие то запутанные действия для получения нужного отчета.
Запутанные действия с помощью макросов-наврят ли.
...
Рейтинг: 0 / 0
Временная таблица
    #39252551
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я сам в Access не так часто работал, поэтому полностью не владею о возможностях.
В принципе можно так сделать: пользователь открывает форму, не открывая Access, нажимает на кнопку, макрос программно открывает Access, выгружает данные с OLAP, а также часть данных excel-ого файла предыдущего месяца, запуск локального SQL-запроса и результат толкает в новый excel-файл.
...
Рейтинг: 0 / 0
Временная таблица
    #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
Временная таблица
    #39252593
ROI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ferzmikkЯ сам в Access не так часто работал, поэтому полностью не владею о возможностях.
В принципе можно так сделать: пользователь открывает форму, не открывая Access, нажимает на кнопку, макрос программно открывает Access, выгружает данные с OLAP, а также часть данных excel-ого файла предыдущего месяца, запуск локального SQL-запроса и результат толкает в новый excel-файл.
Не, это ваши мечты, не открывая Access, Открыть форму не получится.
Через "Recordset" это наверное проще.
С уважением.
...
Рейтинг: 0 / 0
Временная таблица
    #39252603
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ferzmikkделаю так: на каждый excel-лист выгружаю данные с OLAP и потом запускаю локальный SQL-запрос к этим листам, соединяются таблицы как надо, расчеты разные и выводит результат на другой лист.Ну вот растолкуй - за каким хреном тебе эти выборки обязательно в Excel ? Что мешает грести данные в таблицы Access - любовь к Excel? ненависть к Access? большое желание хоть как-то задействовать ODBC? не понимаю...
...
Рейтинг: 0 / 0
Временная таблица
    #39252701
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akinaferzmikkделаю так: на каждый excel-лист выгружаю данные с OLAP и потом запускаю локальный SQL-запрос к этим листам, соединяются таблицы как надо, расчеты разные и выводит результат на другой лист.Ну вот растолкуй - за каким хреном тебе эти выборки обязательно в Excel ? Что мешает грести данные в таблицы Access - любовь к Excel? ненависть к Access? большое желание хоть как-то задействовать ODBC? не понимаю...
Возможно Вы и правы, что данную задачу решать лучше в Access. Говорю же в Access мало работал, привык в Excel все делать. Поскольку такая ситуация с ограничением доступа данным, пришлось искать альтернативные решения, пока вышел на такое решение (не совсем оптимальное по Вашим словам): на каждый лист выгружать отдельную таблицу и потом запускать локальный SQL-запрос. До Access не дошел. В excel-ом файле присутствуют удобное меню для пользователя, строятся разные таблички на разных листах с оформлениями, сводные таблицы с привязанными событиями, различные диаграммы. Не знаю Access так может ли. По поводу ODBC, то говорят что с OLEDB периодически возникают проблемы с блокировкой файла. Исхожу из того, чтобы простым пользователям было удобно работать с отчетами.
...
Рейтинг: 0 / 0
Временная таблица
    #39252706
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты не понял...

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

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

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

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


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