Textbox Управление полем запроса - PullRequest
0 голосов
/ 21 января 2019

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

Сначала я создал таблицу со следующими полями: outfall_ID name1 name2 name3 NAME4 name5

Таблица может иметь больше имен в будущем, но сейчас 5 - это максимум, с которым я имею дело

Затем я создал форму, которая действует как форма настройки, позволяющая пользователю выбирать имя от 1 до 5, идентифицируя текущее имя, необходимое для отчета.

Вот часть, где у меня проблемы. В запросе я ввожу таблицу исходящих данных и могу выбрать поля «ID» и «Name». но я только хочу, чтобы поле имени было активным, совпадающим с текстовым полем в форме настройки (информация о котором хранится в таблице для ссылок).

Ничего, что я пробовал или смотрел, не сработало

1 Ответ

0 голосов
/ 21 января 2019

Вы действительно не можете создать форму, которая работает со столбцами от name1 до name5.

Доступ - это база данных, а не электронная таблица. Поэтому при работе с данными вы работаете со строками данных, а не со столбцами данных.

Итак, создайте таблицу, содержащую имена, которые вы хотите выбрать.

Outfall_ID | Имя.

Ваша таблица будет иметь два столбца, как указано выше. Затем вы можете создать форму и запустить поле со списком (или список), основанное на приведенной выше таблице. Появится список или поле со списком, позволяющее выбрать имя.

В этой форме под полем со списком (или списком) у вас есть кнопка для запуска вашего отчета. Вы можете отфильтровать отчет по выбранному имени следующим образом:

DoCmd.OpenReport "rptOutfalls", acViewPreview, , "outfall_ID = " & Me.MyComboBox

Выше будет фильтровать отчет по заданному (выбранному) outfall_ID.

Если вам нужно отфильтровать отчет по фактическому текстовому имени, выбранному вами в поле со списком (или в списке), мы предполагаем, что поле со списком отображает как outfall_id, так и имя. Таким образом, имя является вторым столбцом поля со списком.

Если мы будем фильтровать отчеты по выбранному имени, то команда openreprot будет выглядеть так:

DoCmd.OpenReport "rptOutfalls", acViewPreview, , "outfallName = '" & Me.MyComboBox.column(1) & "'"

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

Редактировать

Edit: SQL не может переводить столбцы в разные столбцы. Вам необходимо нормализовать данные, чтобы такие обновления можно было выполнять с помощью SQL.

Таким образом, ваш стол должен выглядеть так:

mytrans
ID  Myset   SetID   TranslateTo
1   Name1   1   A
2   Name1   2   B
3   Name1   3   C
4   Name2   1   X
5   Name2   2   Y
6   Name2   3   X

Таким образом, ваше поле со списком будет основано на этом запросе:

select distinct MySet from myTrans

Ваш sql для «перевода» идентификатора на основе выше будет

Select ID, Field1, Field2, outfall_ID,
 (select TranslateTo from mytrans 
    where mytrans.SetID = outfall_id and myset = 'Name1’) as outfallText
 from theDataTable
...