Создание базы данных в Microsoft Access, доступной для поиска только по определенным полям

StackOverflow https://stackoverflow.com/questions/72528

  •  09-06-2019
  •  | 
  •  

Вопрос

Как бы вы создали базу данных в Microsoft Access, доступную для поиска только по определенным полям и управляемую всего несколькими (необходимыми) текстовыми полями и флажками в форме, чтобы ее было легко использовать - никаких сложных запросов?

Пример:У вас есть несколько текстовых полей и несколько соответствующих флажков в форме, и когда флажок рядом с текстовым полем установлен, текстовое поле включено, и вы можете выполнять поиск по тому, что введено в указанное текстовое поле

(На самом деле я уже знаю это, просто играя в stackoverflow jeopardy, где я задаю вопрос, на который знаю ответ, просто чтобы расширить знания мира в области программирования!ответ придет примерно через 5 минут)

Это было полезно?

Решение

На самом деле это довольно обширная тема, и она чревата всевозможными потенциальными проблемами.В большинстве книг среднего и продвинутого уровня по Access есть какой-то раздел, в котором обсуждается "Запрос по форме", где у вас есть несвязанная форма, которая позволяет пользователю выбирать определенные критерии и которая при выполнении "на лету" записывает SQL для возврата соответствующих данных.

Во всем, кроме плоской структуры данных из одной таблицы, это не является тривиальной задачей, поскольку предложение FROM SQL зависит от таблиц, запрашиваемых в предложении WHERE .

Несколько примеров некоторых форм QBF из приложений, которые я создал для клиентов:

  1. Запрос 4 базовых таблиц
  2. Запрос к плоской отдельной таблице
  3. Запрос 3 базовых таблиц
  4. Запрос 6 базовых таблиц
  5. Запрос к 2 базовым таблицам

Первый из них управляется модулем класса, который имеет свойства, отражающие критерии, выбранные в этой форме, и который имеет методы, которые записывают предложения FROM и WHERE .Это чрезвычайно упрощает добавление других полей (при условии, что эти поля не берутся из таблиц, отличных от тех, которые уже включены).

Наиболее сложной частью процесса является написание предложения FROM , поскольку у вас должны быть соответствующие типы соединений и включать только те таблицы, которые есть либо в предложении SELECT, либо в предложении WHERE .Если вы включите что-нибудь еще, вы сильно замедлите выполнение запроса (особенно если у вас есть какие-либо внешние соединения).

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

Но это принцип, который применим не только к QBF!

Другие советы

Мое собственное решение состоит в том, чтобы добавить элемент управления "фильтр" в заголовочную часть формы для каждого из столбцов, которые я хочу иметь возможность фильтровать (обычно все ...).Каждый раз, когда такой элемент управления "фильтр" обновляется, запускается процедура обновления активного фильтра формы с использованием функции "BuildCriteria", доступной в Access VBA.

Таким образом, Когда я набираю "*cable*" в "фильтре" в верхней части столбца описания заказа на покупку выберите "ГДЕ НАХОДИТСЯ описание PODescription ".*cable*" автоматически добавляется в свойство MyForm.filter ....

Некоторые возразят, что фильтрация источника записи, состоящего из нескольких базовых таблиц, может стать очень сложной задачей.Это верно.Поэтому, по моему мнению, лучшим решением является всегда (я имею в виду это!) использовать плоскую таблицу или представление (запрос "ВЫБРАТЬ" в Access) в качестве источника записи для формы.Это сделает вашу жизнь намного проще!

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

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

Отрывок из этой книги, Защита и безопасность базы данных Microsoft Access в реальном мире, должно быть поучительно.

На такой расплывчатый вопрос все, что я могу ответить, это открыть MS Access и несколько раз щелкнуть мышью.

Если хорошенько подумать:
Используйте аргумент "WhereCondition" метода "OpenForm"

Если функциональность очень ограничена и / или специализирована, то база данных SQL, вероятно, в любом случае будет излишней, напримеркэшируйте все комбинации данных локально, даже в памяти, и отображайте их в соответствии с флажками в форме.Ранее вы могли отозвать разрешения у таблицы и предоставлять их только для представлений / процедур, которые запрашивали данные предписанным способом, однако безопасность была удалена из MS Access 2007, так что теперь вы действительно можете запретить пользователям обходить ваше простое приложение, используя, скажем, Excel, и запрашивать данные любым удобным им способом...но тогда разве не в этом смысл корпоративной базы данных?;-)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top