Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 Динамический запрос  [new]
Devil_FoX
Member

Откуда: Киев
Сообщений: 39
Всем привет.

Попробую объяснить суть проблемы.

Есть общая таблица, где хранятся данные для документов. И есть вторая таблица, где указаны какие столбцы нужно для конктретно одному типу документа (пусть она будет называться [Doc_Colums]. Ниже пример с неё)

Пользователь должен на форме в "поле со списком" выбрать тип документа и нажать кнопку. После должен вывестись таблица с строго своими столбцами, которые указаны в таблице [Doc_Colums]. (и можно было редактировать поля)

Как можно так реализовать динамический запрос?
Получится, если выбрать документ ТТН, то должно вывести 4 столбца.


Пример наполнения таблицы [Doc_Colums]:

DocName		Columns
----------------------------
ТТН DocNum
ТТН DocDate
ТТН Account
ТТН Note
доп.соглашение Date_DTZ
доп.соглашение DocID
доп.соглашение DocNum
доп.соглашение DocDate

Таких типов документов сейчас 18, и будет расти. Так что вариант с созданием для каждого типа документа создать свою форму - отпадает.
7 авг 18, 11:21    [21632626]     Ответить | Цитировать Сообщить модератору
 Re: Динамический запрос  [new]
Joss
Member

Откуда: г. Минск
Сообщений: 4908
Не понятно. При чем тут динамический запрос? Выводится ленточная форма. В одном поле название параметра. В другом его значение. Вот и работайте с ними.
7 авг 18, 11:37    [21632652]     Ответить | Цитировать Сообщить модератору
 Re: Динамический запрос  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 19440
А проблема-то в чём? текст запроса построить? колонок в грид добавить?

Devil_FoX
если выбрать документ ТТН, то должно вывести 4 столбца

SELECT Columns
FROM Doc_Colums
WHERE DocName = "ТТН"

strSQL = ""
With rs
    .MoveFirst
    Do Until .EOF
         strSQL = ", " & strSQL & !Columns
         .MoveNext
    Loop
End With
strSQL = "SELECT " & Mid(strSQL, 3) & "FROM Documents WHERE DocType = 'TTH'"
7 авг 18, 11:43    [21632663]     Ответить | Цитировать Сообщить модератору
 Re: Динамический запрос  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 6259
Если вариантов немного (2-4) то создайте форму с группой переключателей в заголовке и в зависимости от значения группы открывайте,в контейнере подчиненной формы одну из предварительно созданных, как Вам надо
7 авг 18, 11:56    [21632685]     Ответить | Цитировать Сообщить модератору
 Re: Динамический запрос  [new]
Кривцов Анатолий
Member

Откуда:
Сообщений: 328
Devil_FoX
Так что вариант с созданием для каждого типа документа создать свою форму - отпадает.
Этот "динамический запрос" вы собираетесь использовать как источник универсальной формы,? Я правильно понял?
В этом случае вам в любом случае скрывать/показывать элементы на форме, а также, вероятно, менять их координаты. А в запросе-источнике лучше выводить все поля из таблицы, иначе добавится морока с отвязкой/привязкой элементов формы к полям источника.
7 авг 18, 12:50    [21632768]     Ответить | Цитировать Сообщить модератору
 Re: Динамический запрос  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 6259
Devil_FoX
....Таких типов документов сейчас 18, и будет расти. Так что вариант с созданием для каждого типа документа создать свою форму - отпадает.
Успехов в создании "динамической формы"
А может наморщить лоб и подумать над структурой БД (хранением и обработкой данных,разграничением прав и т.д)
7 авг 18, 13:11    [21632794]     Ответить | Цитировать Сообщить модератору
 Re: Динамический запрос  [new]
Devil_FoX
Member

Откуда: Киев
Сообщений: 39
Joss
Выводится ленточная форма.


Что то я не понял как ленточноя форма поможет.
7 авг 18, 14:57    [21632988]     Ответить | Цитировать Сообщить модератору
 Re: Динамический запрос  [new]
Devil_FoX
Member

Откуда: Киев
Сообщений: 39
Akina
SELECT Columns
FROM Doc_Colums
WHERE DocName = "ТТН"


strSQL = ""
With rs
    .MoveFirst
    Do Until .EOF
         strSQL = ", " & strSQL & !Columns
         .MoveNext
    Loop
End With
strSQL = "SELECT " & Mid(strSQL, 3) & "FROM Documents WHERE DocType = 'TTH'"


Очень похоже на то что мне нужно. Я плохо знаю VBA.
Первый запрос нужно записать в параметр или оба запроса будут уже в тандеме работать?
Записывать в макрос/модуль, и потом его вешать на запуск при нажатии кнопки?

Если у меня тип документа берётся с поля со списка, то как во WHERE можно записать условие?

Список - Forms![Production]![Список_Тип_Докум]
7 авг 18, 15:09    [21633004]     Ответить | Цитировать Сообщить модератору
 Re: Динамический запрос  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 19440
Devil_FoX
Первый запрос нужно записать в параметр или оба запроса будут уже в тандеме работать?
Первое - это текст запроса. Второе - код обработки рекордсета, открытого по тексту запроса. Итог - текст запроса, который нудно открыть как рекордсет либо подпихнуть контролу как источник данных.
7 авг 18, 15:16    [21633017]     Ответить | Цитировать Сообщить модератору
 Re: Динамический запрос  [new]
Devil_FoX
Member

Откуда: Киев
Сообщений: 39
sdku
Успехов в создании "динамической формы"
А может наморщить лоб и подумать над структурой БД (хранением и обработкой данных,разграничением прав и т.д)


Ну спасибо. Я и так морщу лоб, ведь я специализируюсь на MS SQL и C#. А тут задание - нужно только в Access - а тут для меня всё через...

В общем выкручиваюсь и постигаю новое.
7 авг 18, 15:16    [21633018]     Ответить | Цитировать Сообщить модератору
 Re: Динамический запрос  [new]
Joss
Member

Откуда: г. Минск
Сообщений: 4908
Devil_FoX
Joss
Выводится ленточная форма.


Что то я не понял как ленточноя форма поможет.
Элементарно, Ватсон! (с)
Правда тут ещё завит от правильной структуры БД. Есть у тебя таблица в которой два столбца (грубо) Имя параметра и Значение параметра. Вторая таблица так же два столбца (опять же грубо) Имя документа и Имя параметра. Создай запрос из двух таблиц со связью по Имени параметра. Делай отбор по Имени документа. Вот тебе и Ленточная форма с параметрами и их значениями для каждого документа.
7 авг 18, 15:16    [21633019]     Ответить | Цитировать Сообщить модератору
 Re: Динамический запрос  [new]
Devil_FoX
Member

Откуда: Киев
Сообщений: 39
Akina
Первое - это текст запроса. Второе - код обработки рекордсета, открытого по тексту запроса. Итог - текст запроса, который нудно открыть как рекордсет либо подпихнуть контролу как источник данных.


Извиняюсь. Я плохо разбираюсь. Можете объяснить как всё сделать?
7 авг 18, 15:20    [21633028]     Ответить | Цитировать Сообщить модератору
 Re: Динамический запрос  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 19440
Devil_FoX
Я и так морщу лоб, ведь я специализируюсь на MS SQL и C#. А тут задание - нужно только в Access - а тут для меня всё через...
СУБД - везде СУБД. ADO - везде ADO. Ну немного разный синтаксис... так что "всё через..." - это не факт такой, а настрой такой. И с ним ни хрена у тебя не получится.
7 авг 18, 15:26    [21633043]     Ответить | Цитировать Сообщить модератору
 Re: Динамический запрос  [new]
Joss
Member

Откуда: г. Минск
Сообщений: 4908
Вот-вот. Не зная структуры твоей БД приходится только фантазировать. А если у тебя данные конфиденциальные, то можно их подправить так, чтобы ничего не светилось.. Убрать лишние. А так по твоему вопросу можно только гадать.

Может проще действительно сделать по форме для каждого документа?
7 авг 18, 15:53    [21633075]     Ответить | Цитировать Сообщить модератору
 Re: Динамический запрос  [new]
Devil_FoX
Member

Откуда: Киев
Сообщений: 39
Joss
Не зная структуры твоей БД приходится только фантазировать


Не могу выложить. архив 2 МБ. А сайт позволяет только 150 кб.
7 авг 18, 16:22    [21633120]     Ответить | Цитировать Сообщить модератору
 Re: Динамический запрос  [new]
Joss
Member

Откуда: г. Минск
Сообщений: 4908
Есть файлообменники. Некоторые выкладывают Яндекс-диск. Было бы желание.
7 авг 18, 16:46    [21633149]     Ответить | Цитировать Сообщить модератору
 Re: Динамический запрос  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 19440
Devil_FoX
Не могу выложить. архив 2 МБ
А поудалять всё лишнее (в т.ч. и миллион записей - пары десятков достаточно) и сжать БД - не?
7 авг 18, 16:58    [21633162]     Ответить | Цитировать Сообщить модератору
 Re: Динамический запрос  [new]
SandalTree
Member

Откуда: Перехлёсток восьми батог
Сообщений: 28193
Devil_FoX,

Создавать одну динамическую форму на 20 разных вариантов ввода нонсенс.

Представьте себе магазин, торгующий спичками, автомобилями и самолётами...


Как я понимаю, вы хотите динамизировать создание новых документов с новыми названиями полей.

Думаю что вы просто должны создать одну форму с полями Поле1, Поле2, Поле3 ....
Далее, в динамическом запросе к форме (по методу Akina) переобзываете названия полей под поля формы.

Даже можно извратиться и динамически подменять заголовки полей в форме.

Я-б так делал.
7 авг 18, 17:10    [21633182]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить