2008-09-16 2 views
0

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

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

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

+0

но приятный контент. Ничего плохого в публикации решений проблем, которые вы уже решили. – Mendelt 2008-09-16 14:20:29

ответ

0

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

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

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

  1. Querying 4 underlying tables
  2. Querying a flat single table
  3. Querying 3 underlying tables
  4. Querying 6 underlying tables
  5. Querying 2 underlying tables

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

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

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

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

+0

Да, я полагаю, это довольно большой вопрос. Тем не менее, я не мог заставить запросы принимать данные из формы эффективно (или правильно), поэтому см. Решение внизу со всем кодом. Основные идеи хороши. Примеры лучше. – 2008-09-16 17:30:34

0

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

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

+0

Я не злюсь. Ответ на свой вопрос тоже замечательный. Я просто думаю, что вопрос был путаным, чтобы получить прямой ответ. И ваш ответ можно обобщить на: «Использовать аргумент WhereCondition для метода OpenForm» - это не настоящая жизнь, это всего лишь одни и нули (spaf) – BIBD 2008-09-16 15:31:37

0

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

Эта выдержка из книги, Real World Microsoft Access Database Protection and Security, должна быть просветляющей.

+0

Это довольно интересно и, вероятно, остановит случайного пользователя от редактирования данных. Но я бы не стал доверять ему, чтобы фактически защитить данные, которые должны были оставаться секретными, так как вы могли написать программу в .Net для подключения к базе данных доступа и запуска запросов без ее открытия. – Kibbee 2008-09-16 17:22:52

1

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

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

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

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

0

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

Смежные вопросы