|
Перекрестный запрос в подчиненной форме
|
|||
---|---|---|---|
#18+
Добрый день, уважаемые знатоки Access! Сразу скажу, что в Access я новичок. Сейчас я разрабатываю базу для склада инструмента. Схема данных уже разработана, таблицы сформированы, некоторые формы сделаны. Уперся в одну проблему, которую никак не могу решить, а именно работа с перекрестным запросом в подчиненной форме. В статичном виде у меня получается запихнуть перекрестный запрос в подчиненную форму, но вот когда я пытаюсь применить фильтры к данной форме - аксес начинает ругаться. Пробовал и через vba работать, пробовал средствами самого Access - не получается никак. Суть проблемы. У меня есть таблица Хранилище_значений_св-в. Там хранятся значения свойств всех инструментов, причем каждому типу инструментов соответствует свой набор свойств. В форме, которую я пытаюсь сделать (Просмотр_инструмента) нужно выводить данные из таблицы Хранилище_значений_св-в, отобранные по выбранному типу инструмента и в форме перекрестного запроса. Причем нужно, чтобы можно было к полученной таблице применять фильтры. И желательно выводить столбцы этой таблицы в определенном порядке, чтобы не было в заголовках столбцов хаоса: св-во3 св-во1 св-во4 св-во2, а было все в нужном порядке. Сразу прикрепляю пример своей базы, потому как сложно на словах все объяснить. Я уже довольно много форумов облазил и нигде решения своей проблемы не нашел. Пожалуйста, поправьте мой пример или приведите примеры решения этой проблемы свои и желательно поподробнее, потому как я в этом деле новичок. Да, и желательно решить задачу в пределах аксеса, не экспортировать в эксель и там все делать. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2016, 14:03 |
|
Перекрестный запрос в подчиненной форме
|
|||
---|---|---|---|
#18+
Sergey8969, Не особо понятна задумка, да и пример не моего формата, так что на вскидку У таких запросов условие отбора для фильтра поля формы нужно прописывать еще и в начале запроса. Примерный пример PARAMETERS [Forms]![Заказы]![ВыборЗаказа] Text ( 255 ); TRANSFORM Sum(Цеха_Заказы.ГМЦЗ_Часов) AS [Sum-ГМЦЗ_Часов] SELECT Цеха_Заказы.ГМ FROM Цеха INNER JOIN (Заказы INNER JOIN Цеха_Заказы ON Заказы.З_Код = Цеха_Заказы.З_Код) ON Цеха.Ц_Код = Цеха_Заказы.Ц_Код WHERE (((Заказы.Заказ)=[Forms]![Заказы]![ВыборЗаказа])) GROUP BY Цеха_Заказы.ГМ PIVOT Цеха.Цех; Возможно разберетесь. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2016, 16:27 |
|
Перекрестный запрос в подчиненной форме
|
|||
---|---|---|---|
#18+
Sergey8969, Я бы особо не заморачивался и создал бы таблицу как-то так. Плюс справочники:тип инструмента,наименований(зависимый от типа инструмента,сплав,тип резца для резцов-короче какие захотите: ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2016, 19:43 |
|
Перекрестный запрос в подчиненной форме
|
|||
---|---|---|---|
#18+
ЛапухSergey8969, пример не моего формата Прикрепил пример в другом формате. Надеюсь, откроете. ЛапухSergey8969, У таких запросов условие отбора для фильтра поля формы нужно прописывать еще и в начале запроса. PARAMETERS [Формы]![Просмотр_инструмента]![Тип_инструмента_список] Text ( 255 ); TRANSFORM First([Хранилище_значений_св-в].Значение) AS [First-Значение] SELECT Инструмент.тип_инструмента, Инструмент.[Маркировка_инстр-та] FROM Инструмент INNER JOIN [Хранилище_значений_св-в] ON Инструмент.[Маркировка_инстр-та] = [Хранилище_значений_св-в].[Маркировка_инстр-та] WHERE (((Инструмент.тип_инструмента)=[Формы]![Просмотр_инструмента]![Тип_инструмента_список])) GROUP BY Инструмент.тип_инструмента, Инструмент.[Маркировка_инстр-та] PIVOT [Хранилище_значений_св-в].Свойство; Вот, попробовал сделать как вы говорите. Сам-то запрос запускается, а вот когда запускаешь форму с подчиненной формой, аксес ругается сначала: "[Формы]![Просмотр_инструмента]![Тип_инструмента_список] не распознается ядром СУБД Microsoft Access как допустимое имя поля или выражения" А если форму сохранить и открыть заново ругается уже на другое: "Невозможно использование запроса к серверу или перекрестного запроса (без фиксированных столбцов) в качестве источника записей подчиненной формы или отчета. Перед установлением связи подчиненной формы или отчета с перекрестным запросом необходимо определить свойство запроса "Заголовки столбцов" (ColumnHeadings)." Хотя там заголовки столбцов определены. Я так понимаю, ему не нравится прикрепленный к форме запрос без фиксированных столбцов (когда фильтр применяется, столбцы в перекрестном запросе меняются, т.к. для каждого типа инструмента свой набор свойств. Название свойств идут в заголовки столбцов. Меняешь тип инструмента - меняются и заголовки столбцов. Должно быть так) ) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2016, 22:36 |
|
Перекрестный запрос в подчиненной форме
|
|||
---|---|---|---|
#18+
sdkuSergey8969, Я бы особо не заморачивался и создал бы таблицу как-то так. Плюс справочники:тип инструмента,наименований(зависимый от типа инструмента,сплав,тип резца для резцов-короче какие захотите: Если я правильно понял, вы предлагаете для каждого свойства сделать свой столбец в таблице? Типов инструмента у меня уже набралось около 30, причем для каждого типа несколько свойств идет (в примере я записал 4 типа, просто чтобы логика понятна была). По вашей схеме у меня получится огромная таблица под 50-100 столбцов, причем в основном она будет заполнена пустотой. Думаю, это не очень рационально ... |
|||
:
Нравится:
Не нравится:
|
|||
10.09.2016, 22:47 |
|
Перекрестный запрос в подчиненной форме
|
|||
---|---|---|---|
#18+
Извращенцы. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2016, 00:48 |
|
Перекрестный запрос в подчиненной форме
|
|||
---|---|---|---|
#18+
Predeclared, Огромное спасибо! Наконец-то заработало как я хотел :) Есть только небольшой вопрос по коду: If Len(Me.cmbFind & vbNullString) > 0 Then Зачем тут & vbNullString ? К значению поля прибавляется строка нулевой длины. Непонятно ) Кстати, вывод столбцов в нужном мне порядке тоже реализовал, добавив в таблицу "Соответствие_св-в_типу" столбец "Очередность_вывода". Потом по этому столбцу сортирую запрос и дело в шляпе. Прикрепляю окончательный вариант. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.09.2016, 13:34 |
|
Перекрестный запрос в подчиненной форме
|
|||
---|---|---|---|
#18+
1 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2016, 23:08 |
|
Перекрестный запрос в подчиненной форме
|
|||
---|---|---|---|
#18+
эм.. я думал тут как-то можно удалять свои сообщения.. прошлое мое сообщение можно удалить. Я его случайно опубликовал ... |
|||
:
Нравится:
Не нравится:
|
|||
13.09.2016, 23:10 |
|
Перекрестный запрос в подчиненной форме
|
|||
---|---|---|---|
#18+
Еще один вопрос по перекрестному запросу.. TRANSFORM First([Хранилище_значений_св-в].Значение) AS [First-Значение] SELECT Инструмент.[Маркировка_инстр-та], Склад.[Кол-во_склад] FROM Склад INNER JOIN (Инструмент INNER JOIN [Хранилище_значений_св-в] ON Инструмент.[Маркировка_инстр-та] = [Хранилище_значений_св-в].[Маркировка_инстр-та]) ON Склад.[Маркировка_инстр-та] = Инструмент.[Маркировка_инстр-та] WHERE (((Инструмент.[Тип_инструмента])='Фреза')) GROUP BY Инструмент.[Маркировка_инстр-та], Склад.[Кол-во_склад] PIVOT [Хранилище_значений_св-в].Свойство In ('Диаметр','Длина_реж_части','Черновая/чистовая','Сплав'); Как тут сделать, чтобы в запросе сначала шел столбец Инструмент.[Маркировка_инстр-та], затем столбцы из PIVOT [Хранилище_значений_св-в].Свойство In ('Диаметр','Длина_реж_части','Черновая/чистовая','Сплав'), а затем в самом конце шел столбец Склад.[Кол-во_склад] ? Возможно так сделать? Запрос этот будет программно перестраиваться, так что статичные варианты не пойдут. Прикладываю пример. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2016, 13:41 |
|
Перекрестный запрос в подчиненной форме
|
|||
---|---|---|---|
#18+
Можно менять рантайм значение ColumnOrder Property. Типа такого: Код: vbnet 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2016, 15:09 |
|
Перекрестный запрос в подчиненной форме
|
|||
---|---|---|---|
#18+
PredeclaredМожно менять рантайм значение ColumnOrder Property. Типа такого: Код: vbnet 1. 2. 3.
Работает, спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2016, 15:22 |
|
|
start [/forum/topic.php?fid=45&msg=39307180&tid=1613146]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
42ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 160ms |
0 / 0 |