Создание базы данных в Microsoft Access, доступной для поиска только по определенным полям - PullRequest
0 голосов
/ 16 сентября 2008

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

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

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

Ответы [ 5 ]

1 голос
/ 16 сентября 2008

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

Таким образом, когда я набираю «*cable*» в «фильтре» в верхней части столбца «Описание заказа на поставку», «WHERE PODescription IS LIKE» *cable* »автоматически добавляется в свойство MyForm.filter .. ..

Некоторые могут возразить, что фильтрация источника записей, сделанного из нескольких базовых таблиц, может стать очень сложной. Вот так. Поэтому, по моему мнению, лучшее решение - всегда (я имею в виду!) Использовать плоскую таблицу или представление (запрос «SELECT» в Access) в качестве источника записей для формы. Это сделает вашу жизнь намного проще!

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

0 голосов
/ 01 октября 2008

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

0 голосов
/ 16 сентября 2008

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

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

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

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

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

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

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

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

0 голосов
/ 16 сентября 2008

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

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

0 голосов
/ 16 сентября 2008

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

По второй мысли:
Используйте аргумент «WhereCondition» метода «OpenForm»

...