Гость
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Запись запроса с содержанием Transform в отдельную таблицу / 25 сообщений из 29, страница 1 из 2
03.03.2020, 14:49
    #39933557
Стартер
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запись запроса с содержанием Transform в отдельную таблицу
Привет, написал запрос для транспонирования таблицы с полями (Вопрос, Баланс, Деятельность, Дата)
Код: sql
1.
2.
3.
4.
5.
Transform first(ТестТаблица.Баланс)
Select ТестТаблица.Дата
From ТестТаблица
Group by ТестТаблица.Дата
Pivot ТестТаблица.Вопрос 


Все работает отлично, но при попытке вставить этот кусок в модуль VBA этот модуль при вызове этого куска кода через CurrentDb.Execute крашится. Пытался отладить, понял, что нужно выделить результат запроса в отдельную таблицу, попробовал так:
Код: sql
1.
2.
3.
4.
5.
6.
Transform first(ТестТаблица.Баланс)
Select ТестТаблица.Дата
Into New(Некая новая таблица)
From ТестТаблица
Group by ТестТаблица.Дата
Pivot ТестТаблица.Вопрос 


Зарезервированная ошибка (-3002)
Вопрос итоговый таков: каким образом мне записать результат запроса Transform в новую таблицу?
...
Рейтинг: 0 / 0
03.03.2020, 16:27
    #39933635
Запись запроса с содержанием Transform в отдельную таблицу
1. Перекрестный запрос, это разновидность запроса на выборку. На нем можно открыть Recordset (CurrentDb.OpenRecordset), а CurrentDb.Execute применяется для запросов на действие (Update, Delete и т.п.)
2. В Аксе в одном SQL выражении Transform и Into не уживаются (возможно и уживутся если запрос с Transform использовать как вложенный в запросе на создание). Запрос на создание таблицы можно создать на основе сохраненного перекрестного.

А какая ваша цель?
...
Рейтинг: 0 / 0
03.03.2020, 16:31
    #39933637
Стартер
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запись запроса с содержанием Transform в отдельную таблицу
Кривцов Анатолий,

Оба предложенных Вами варианта мне подходят, мне необходимо получить итоговую после трансформации отдельную от запроса таблицу. Если есть возможность, буду благодарен коду каким образом возможно вставить transform в запросе на создание таблицы. Важный момент в том, что я не знаю всех полей после трансформации, поэтому руками перебрать в insert into(1,2,3...), можно сказать, не представляется возможным. Количество полей после применения transform будет больше 50.
...
Рейтинг: 0 / 0
03.03.2020, 16:36
    #39933642
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запись запроса с содержанием Transform в отдельную таблицу
Стартер,
перекрестный запрос можно экспортировать в ексель
а ексель таблицу прилинковать к базе и использовать в запросе
...
Рейтинг: 0 / 0
03.03.2020, 16:36
    #39933643
Стартер
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запись запроса с содержанием Transform в отдельную таблицу
Кривцов Анатолий,

Например, если делать через CurrentDb:
Код: vbnet
1.
2.
3.
4.
5.
6.
 trans = "Transform first(ТестТаблица.Баланс)
Select ТестТаблица.Дата
From ТестТаблица
Group by ТестТаблица.Дата
Pivot ТестТаблица.Вопрос "
CurrentDb.Execute("insert into NewrTestTab select * from ... ")


А вместо многоточия что писать? не trans же?
...
Рейтинг: 0 / 0
03.03.2020, 16:37
    #39933645
Стартер
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запись запроса с содержанием Transform в отдельную таблицу
ПЕНСИОНЕРКА,
Этот перекрестный запрос - все лишь часть проекта на VBA. Мне эти данные нужны в дальнейшем для обработки, и поэтому хотелось бы не вставлять костыль
...
Рейтинг: 0 / 0
03.03.2020, 16:54
    #39933654
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запись запроса с содержанием Transform в отдельную таблицу
Стартер,

но тогда вы не можете гарантированно знать имена полей, а значит могут вылетать ошибки при выполнении запросов/форм/отчетов

если же вам надо сохранить этот перекрестный запрос в ВОРД-отчет, то может это следует делать программно
...
Рейтинг: 0 / 0
03.03.2020, 16:56
    #39933656
Стартер
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запись запроса с содержанием Transform в отдельную таблицу
Этот код, если выполнять в запросах в Аксе работает отлично, напомню
И еще вдобавок проблемка:
Пытаюсь записать в ResordSet
Код: vbnet
1.
2.
 trans = "Transform first(ТестТаблица.Баланс) Select ТестТаблица.Дата From ТестТаблица Group by ТестТаблица.Дата Pivot ТестТаблица.Вопрос "
rs.Open trans, CurrentProject.Connection, adOpenKeySet, adLockOptimistic 


Ошибка Method 'Open of object' _RecordSet' failed
Руинится именно на этом момента, во всех других местах использования РекордСета все было чётко
...
Рейтинг: 0 / 0
03.03.2020, 17:01
    #39933657
Стартер
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запись запроса с содержанием Transform в отдельную таблицу
ПЕНСИОНЕРКА,
Нет, мне не для отчета
У меня большая база данных, по которой формируется выборка. Этот фрагмент кода с Transform'ом мне поможет в дальнейшем в структуризации информации. По факту, это к вопросу не относится, мне просто нужно получить итоговую таблицу с применением этой трансформации. Есть ли есть какой-то другой способ как я могу перевести из строчной таблицы в стобовидную - мне это необходимо как воздух
...
Рейтинг: 0 / 0
03.03.2020, 17:03
    #39933658
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запись запроса с содержанием Transform в отдельную таблицу
Стартер,

возможно подойдет такой вариант, если ТестТаблица.Вопрос имеет значение до 250

создать запрос р250

Код: sql
1.
2.
3.
4.
5.
Transform first(ТестТаблица.Баланс)
Select ТестТаблица.Дата
From ТестТаблица
Group by ТестТаблица.Дата
Pivot ТестТаблица.Вопрос in (1,2,3.........,250) 



запрос 2 -запись в таблицу(дата,1,2,3,4,........250)

insert into NewrTestTab select * from p250
...
Рейтинг: 0 / 0
03.03.2020, 17:05
    #39933660
Стартер
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запись запроса с содержанием Transform в отдельную таблицу
ПЕНСИОНЕРКА,
Подскажи такой момент, этот SQL-запрос у меня крутится в VBA модуле, вопрос следующий - вот этот первый запрос должен же выполниться, как мне его запустить? Через РекордСет?
...
Рейтинг: 0 / 0
03.03.2020, 17:07
    #39933662
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запись запроса с содержанием Transform в отдельную таблицу
Стартер,

первый запускать не надо - второй его сам запустит
...
Рейтинг: 0 / 0
03.03.2020, 17:09
    #39933666
Стартер
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запись запроса с содержанием Transform в отдельную таблицу
ПЕНСИОНЕРКА,

то есть псевдокод такой:
Код: vbnet
1.
2.
 запрос1 = "трансформ..."
insert into NewTab select * from запрос1

?
...
Рейтинг: 0 / 0
03.03.2020, 17:22
    #39933670
Запись запроса с содержанием Transform в отдельную таблицу
Попробуйте такой запрос на создание таблицы:
Код: sql
1.
2.
3.
4.
5.
6.
SELECT Q.* INTO NewrTestTab FROM
(Transform first(ТестТаблица.Баланс)
Select ТестТаблица.Дата
From ТестТаблица
Group by ТестТаблица.Дата
Pivot ТестТаблица.Вопрос) As Q


В VBA выполняется методом CurrentDb.Execute
...
Рейтинг: 0 / 0
03.03.2020, 17:45
    #39933680
Стартер
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запись запроса с содержанием Transform в отдельную таблицу
Кривцов Анатолий,

Спасибо, завтра на работе попробую, надеюсь получится. Спасибо за отклик
...
Рейтинг: 0 / 0
04.03.2020, 08:36
    #39933868
Стартер
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запись запроса с содержанием Transform в отдельную таблицу
Кривцов Анатолий,

Не вышло, компилятор ругается на ошибку в построении FROM
Ругается именно на содержание Transform в выражении внутри FROM
...
Рейтинг: 0 / 0
04.03.2020, 08:47
    #39933871
4d_monster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запись запроса с содержанием Transform в отдельную таблицу
Стартер,

Вам ПЕНСИОНЕРКА же написала .

Нужно создать и сохранить перекрёстный запрос. А потом использовать его как источник для создания таблицы.

Код: vbnet
1.
2.
3.
4.
5.
qdQ = currentdb.CreateQueryDef ("Transform first(ТестТаблица.Баланс) Select ТестТаблица.Дата From ТестТаблица Group by ТестТаблица.Дата Pivot ТестТаблица.Вопрос;", "p250")
currentdb.QueryDefs.Refresh
currentdb.Execute("insert into NewrTestTab select * from p250;")
currentdb.QueryDefs.Delete "p250"
currentdb.QueryDefs.Refresh
...
Рейтинг: 0 / 0
04.03.2020, 09:28
    #39933882
ПЕНСИОНЕРКА
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запись запроса с содержанием Transform в отдельную таблицу
4d_monster
Вам ПЕНСИОНЕРКА же написала .

Нужно создать и сохранить перекрёстный запрос. А потом использовать его как источник для создания таблицы

хотя я совсем не уверена в этом, т.к.
- при перекрестном запросе неизвестны имена полей
- к тому же не понимаю , в какой задаче это может потребоваться
- в крайнем случае можно создать запрос на выборку , который легко сохранить в таблицу

Код: sql
1.
2.
3.
select ТестТаблица.Дата, ТестТаблица.Вопрос, first(ТестТаблица.Баланс) into rab1 
from ТестТаблица
group by ТестТаблица.Дата,ТестТаблица.Вопрос



- и уже rab1 обрабатывать позже
...
Рейтинг: 0 / 0
04.03.2020, 09:31
    #39933884
4d_monster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запись запроса с содержанием Transform в отдельную таблицу
ПЕНСИОНЕРКА,

Неизвестность имён полей в Access не проблема, он в этом вопросе лучше остальных СУБД.
Задача скорей всего - красивые отчёты с минимумом усилий.
...
Рейтинг: 0 / 0
04.03.2020, 09:37
    #39933886
Панург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запись запроса с содержанием Transform в отдельную таблицу
ПЕНСИОНЕРКА
- при перекрестном запросе неизвестны имена полей
не всегда, к тому же их можно перечислить в разделе Pivot.

ПЕНСИОНЕРКА
- к тому же не понимаю , в какой задаче это может потребоваться
например формирование формы/отчёта табель рабочего времени - формирование из "длинной" таблицы в "широкую"
...
Рейтинг: 0 / 0
04.03.2020, 09:39
    #39933888
Стартер
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запись запроса с содержанием Transform в отдельную таблицу
4d_monster,
Как раз к неизвестности имен полей
Ошибка вылетела с описанием "Инструкция INSERT INTO содержит неизвестное имя поля... Убедитесь, что имя указано правильно"
Я так понимаю, что он не может найти в добавляемой таблице необходимое поле, а как следствие - все, так как в этой новосозданной таблице ничего нет.
...
Рейтинг: 0 / 0
04.03.2020, 09:40
    #39933891
Панург
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запись запроса с содержанием Transform в отдельную таблицу
Стартер
Все работает отлично, но при попытке вставить этот кусок в модуль VBA этот модуль при вызове этого куска кода через CurrentDb.Execute крашится.
Зачем это писать в VBA?
...
Рейтинг: 0 / 0
04.03.2020, 09:43
    #39933894
Стартер
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запись запроса с содержанием Transform в отдельную таблицу
ПЕНСИОНЕРКА,

Результат этого rab1 и есть ТестТаблица, я уже ее сформировал и теперь просто хочу повернуть горизонтально. Что дальше-то? Каким образом мне обрабатывать "позже"? Transform применить - задача возвращается к прежней - как записать результат в таблицу?
...
Рейтинг: 0 / 0
04.03.2020, 09:44
    #39933895
Стартер
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запись запроса с содержанием Transform в отдельную таблицу
Панург,

Потому что это не единоразовая задача типа "посмотрел - пошел дальше". Мне с этой горизонтальной таблицей нужно работать дальше в vba. Это просто часть модуля.
...
Рейтинг: 0 / 0
04.03.2020, 09:44
    #39933896
4d_monster
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запись запроса с содержанием Transform в отдельную таблицу
Стартер,

Если вы не подготовили целевую таблицу, тогда не наполняйте её, а создавайте запросом:
"select * into NewrTestTab from p250;"
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Запись запроса с содержанием Transform в отдельную таблицу / 25 сообщений из 29, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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