|
Временная таблица
|
|||
---|---|---|---|
#18+
Доброе время суток! Есть excel-ий файл. Там присутствуют несколько листов с данными. Есть подключение ODBC , который запускает SQL-запрос к этим листам, и выводит результат на отдельный лист. Пытаюсь в запросе использовать временную таблицу, так как запрос сложный, присутствуют вложенности, join и union. Пишу запрос с использованием INTO. Такая функция вроде должна работать в Microsoft Access SQL/Queries . Вот простой пример. Код: sql 1.
Запускаю. Выдает сообщение об ошибке "[Microsoft][Драйвер ODBC Excel] Обновление не возможно". База данных или объект доступны только для чтения". Если разрешить доступ к базе данных, в данном случае к листу, то логически как временную таблицу можно поместить на лист, если там находятся исходные данные? Если написать такой запрос Код: sql 1. 2.
то выдает сообщение об ошибке. "[Microsoft][Драйвер ODBC Excel] Ошибочная инструкция SQL; предполагалось 'DELETE', 'INSERT', 'PROCEDURE', 'SELECT' или 'UPDATE'". Похоже WITH для сохранения промежуточного результата запроса в Microsoft Access SQL/Queries не поддерживается. Что не так делаю? Как здесь правильно создать временную таблицу? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2016, 17:33 |
|
Временная таблица
|
|||
---|---|---|---|
#18+
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 На деле такие таблицы не всегда удаляются, поэтому не советую полагаться на автоматическое удаление, а просто создать таблицу, удалять из нее записи перед вставкой, либо удалять и пересоздавать таблицу каждый раз, если колонки могут отличаться от запроса к запросу. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2016, 17:45 |
|
Временная таблица
|
|||
---|---|---|---|
#18+
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.
Пишет "[Microsoft][Драйвер ODBC Excel]Ошибка синтаксиса в инструкции CREATE TABLE" Что не так? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2016, 19:50 |
|
Временная таблица
|
|||
---|---|---|---|
#18+
ferzmikk, да, и прежде чем вставлять новые таблицы найди по форуму (а этого добра тут навалом), как запросом получит данные с листа экселя. Прежде чем спрашивать юзай поиск. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2016, 20:14 |
|
Временная таблица
|
|||
---|---|---|---|
#18+
\\\\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.
По идее, если не ошибаюсь, в этом файле должен создавать лист с таблицей. Если в файле присутствует вкладка "Лист2", то пишет "[Microsoft][Драйвер ODBC Excel] Таблица 'Лист2$' уже существует" Если в файле отсутствует вкладка "Лист2", то пишет "[Microsoft][Драйвер ODBC Excel] Недопустимое имя 'Лист2'$. Проверьте, что оно не содержит недопустимые символы или знаки препинания, а также не является слишком длинным. Если в INTO указать другой существующий или несуществующий файл, то пишет "[Microsoft][Драйвер ODBC Excel] Обновление не возможно. База данных или объект доступны только для чтения" Может тут от строки подключения зависит? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2016, 08:16 |
|
Временная таблица
|
|||
---|---|---|---|
#18+
Я правильно понимаю, что в данной ситуации в локальном запросе не создать темповую таблицу, но возможно если создавать программно с помощью Database, QueryDef? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2016, 09:02 |
|
Временная таблица
|
|||
---|---|---|---|
#18+
ferzmikk, так ты пытаешься создать таблицу(лист) прямо в экселе? Не, не получится, ЕМНИП, запросы к эксель не редактируемые с какой-то версии офиса. Создавай таблицу в акцес и методами экспорта (разные есть способы) отправляй данные в эксель. Как то так, ИМХО. Возможно я ошибаюсь - имею право © ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2016, 09:03 |
|
Временная таблица
|
|||
---|---|---|---|
#18+
\\\\ferzmikk, так ты пытаешься создать таблицу(лист) прямо в экселе? Не, не получится, ЕМНИП, запросы к эксель не редактируемые с какой-то версии офиса. Создавай таблицу в акцес и методами экспорта (разные есть способы) отправляй данные в эксель. Как то так, ИМХО. Возможно я ошибаюсь - имею право © У меня сам запрос очень большой и сложный. И поэтому хотел часть запросов затолкать во временную. Вот простой пример Код: sql 1. 2. 3. 4. 5. 6. 7.
Иначе сам запрос будет еще более сложным и трудоемким для восприятия. Может быть есть другие пути решения, кроме создание таблиц в Access? ADO поможет? ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2016, 09:34 |
|
Временная таблица
|
|||
---|---|---|---|
#18+
ferzmikk , вот растолкуй мне простую вещь... Я понимаю, что у тебя есть Access-база, которая берёт исходные данные из файлов Excel, что-то там считает сложное настолько, что без временной таблицы не обойтись, а результат расчёта вываливает опять же на лист в файл Excel. Всё ясно, кроме одного - вот за каким хреном надо временную таблицу (которая потом ведь стопудово будет похерена) делать тоже в файле Excel? почему её не формировать в самой БД Access? От временной таблицы требуется только одно - БЫСТРО. Но ведь у себя под боком гораздо быстрее, чем чёрт те где... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2016, 09:41 |
|
Временная таблица
|
|||
---|---|---|---|
#18+
Akina ferzmikk , вот растолкуй мне простую вещь... Я понимаю, что у тебя есть Access-база, которая берёт исходные данные из файлов Excel, что-то там считает сложное настолько, что без временной таблицы не обойтись, а результат расчёта вываливает опять же на лист в файл Excel. Всё ясно, кроме одного - вот за каким хреном надо временную таблицу (которая потом ведь стопудово будет похерена) делать тоже в файле Excel? почему её не формировать в самой БД Access? От временной таблицы требуется только одно - БЫСТРО. Но ведь у себя под боком гораздо быстрее, чем чёрт те где... У меня ситуация такая. Безусловно, самый лучший вариант это выгружать данные из сервера с помощью SQL-запроса. Но не разрешают пользоваться. Есть OLAP. Если делать MDX-запросы, то запросы получаются очень большими и запутанными. А также MDX не соединяет таблицы как SQL, имеет другую логику. Поэтому делаю так: на каждый excel-лист выгружаю данные с OLAP и потом запускаю локальный SQL-запрос к этим листам, соединяются таблицы как надо, расчеты разные и выводит результат на другой лист. Сам SQL-запрос очень большой. Важно чтобы потом можно было мобильно дорабатывать запрос, так как у заказчика потом появляются дополнительные запросы. Учитывая такой логический нюанс, что разрабатываю инструмент, который формирует нужный отчет нажатием одной кнопки с помощью макросов. Не пробовал в Access выгружать данные с OLAP и потом запускать локальный SQL-запрос. Я просто исхожу из той логики, чтобы другим пользователям не приходилось делать еще какие то запутанные действия для получения нужного отчета. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2016, 10:02 |
|
Временная таблица
|
|||
---|---|---|---|
#18+
ferzmikkAkina ferzmikk , вот растолкуй мне простую вещь... Я понимаю, что у тебя есть Access-база, которая берёт исходные данные из файлов Excel, что-то там считает сложное настолько, что без временной таблицы не обойтись, а результат расчёта вываливает опять же на лист в файл Excel. Всё ясно, кроме одного - вот за каким хреном надо временную таблицу (которая потом ведь стопудово будет похерена) делать тоже в файле Excel? почему её не формировать в самой БД Access? От временной таблицы требуется только одно - БЫСТРО. Но ведь у себя под боком гораздо быстрее, чем чёрт те где... У меня ситуация такая. Безусловно, самый лучший вариант это выгружать данные из сервера с помощью SQL-запроса. Но не разрешают пользоваться. Есть OLAP. Если делать MDX-запросы, то запросы получаются очень большими и запутанными. А также MDX не соединяет таблицы как SQL, имеет другую логику. Поэтому делаю так: на каждый excel-лист выгружаю данные с OLAP и потом запускаю локальный SQL-запрос к этим листам, соединяются таблицы как надо, расчеты разные и выводит результат на другой лист. Сам SQL-запрос очень большой. Важно чтобы потом можно было мобильно дорабатывать запрос, так как у заказчика потом появляются дополнительные запросы. Учитывая такой логический нюанс, что разрабатываю инструмент, который формирует нужный отчет нажатием одной кнопки с помощью макросов. Не пробовал в Access выгружать данные с OLAP и потом запускать локальный SQL-запрос. Я просто исхожу из той логики, чтобы другим пользователям не приходилось делать еще какие то запутанные действия для получения нужного отчета. Запутанные действия с помощью макросов-наврят ли. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2016, 10:19 |
|
Временная таблица
|
|||
---|---|---|---|
#18+
Я сам в Access не так часто работал, поэтому полностью не владею о возможностях. В принципе можно так сделать: пользователь открывает форму, не открывая Access, нажимает на кнопку, макрос программно открывает Access, выгружает данные с OLAP, а также часть данных excel-ого файла предыдущего месяца, запуск локального SQL-запроса и результат толкает в новый excel-файл. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2016, 10:37 |
|
Временная таблица
|
|||
---|---|---|---|
#18+
ferzmikk Код: sql 1.
Если в файле отсутствует вкладка "Лист2", то пишет "[Microsoft][Драйвер ODBC Excel] Недопустимое имя 'Лист2'$. Проверьте, что оно не содержит недопустимые символы или знаки препинания, а также не является слишком длинным. Правильно пишет. Запрос SELECT * INTO.. в Excel-е создает новый ИМЕНОВАНЫЙ ДИАПАЗОН на новом одноименном листе. Надо указывать имя диапазона, а не листа, т.е. без символа "$": [Excel 8.0;Database=C:\Users\User\Desktop\Локальный.xlsm;HDR=YES;IMEX=2]. [Лист2] ЗЫ. Может и ошибаюсь... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2016, 10:54 |
|
Временная таблица
|
|||
---|---|---|---|
#18+
ferzmikkЯ сам в Access не так часто работал, поэтому полностью не владею о возможностях. В принципе можно так сделать: пользователь открывает форму, не открывая Access, нажимает на кнопку, макрос программно открывает Access, выгружает данные с OLAP, а также часть данных excel-ого файла предыдущего месяца, запуск локального SQL-запроса и результат толкает в новый excel-файл. Не, это ваши мечты, не открывая Access, Открыть форму не получится. Через "Recordset" это наверное проще. С уважением. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2016, 11:08 |
|
Временная таблица
|
|||
---|---|---|---|
#18+
ferzmikkделаю так: на каждый excel-лист выгружаю данные с OLAP и потом запускаю локальный SQL-запрос к этим листам, соединяются таблицы как надо, расчеты разные и выводит результат на другой лист.Ну вот растолкуй - за каким хреном тебе эти выборки обязательно в Excel ? Что мешает грести данные в таблицы Access - любовь к Excel? ненависть к Access? большое желание хоть как-то задействовать ODBC? не понимаю... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2016, 11:14 |
|
Временная таблица
|
|||
---|---|---|---|
#18+
Akinaferzmikkделаю так: на каждый excel-лист выгружаю данные с OLAP и потом запускаю локальный SQL-запрос к этим листам, соединяются таблицы как надо, расчеты разные и выводит результат на другой лист.Ну вот растолкуй - за каким хреном тебе эти выборки обязательно в Excel ? Что мешает грести данные в таблицы Access - любовь к Excel? ненависть к Access? большое желание хоть как-то задействовать ODBC? не понимаю... Возможно Вы и правы, что данную задачу решать лучше в Access. Говорю же в Access мало работал, привык в Excel все делать. Поскольку такая ситуация с ограничением доступа данным, пришлось искать альтернативные решения, пока вышел на такое решение (не совсем оптимальное по Вашим словам): на каждый лист выгружать отдельную таблицу и потом запускать локальный SQL-запрос. До Access не дошел. В excel-ом файле присутствуют удобное меню для пользователя, строятся разные таблички на разных листах с оформлениями, сводные таблицы с привязанными событиями, различные диаграммы. Не знаю Access так может ли. По поводу ODBC, то говорят что с OLEDB периодически возникают проблемы с блокировкой файла. Исхожу из того, чтобы простым пользователям было удобно работать с отчетами. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2016, 12:36 |
|
Временная таблица
|
|||
---|---|---|---|
#18+
Ты не понял... Сначала получи данные в Access. Там обработай, получи результаты. А полученные итоги - только те, которые надо показывать пользователю, - вот их уже хоть в Excel экспортируй, хоть ещё куда, где удобные меню и прочие украшательства. Пусть крутит хоть до посинения. А исходные и промежуточные данные юзеру не нужны. Ещё испортит чего ненароком... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2016, 12:43 |
|
Временная таблица
|
|||
---|---|---|---|
#18+
AkinaТы не понял... Сначала получи данные в Access. Там обработай, получи результаты. А полученные итоги - только те, которые надо показывать пользователю, - вот их уже хоть в Excel экспортируй, хоть ещё куда, где удобные меню и прочие украшательства. Пусть крутит хоть до посинения. А исходные и промежуточные данные юзеру не нужны. Ещё испортит чего ненароком... Спасибо, понял! ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2016, 14:12 |
|
|
start [/forum/topic.php?fid=45&msg=39252603&tid=1613497]: |
0ms |
get settings: |
12ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
40ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 160ms |
0 / 0 |