|
Программирование >> Разработка пользовательского интерфейса
В приведенной выше таблице сразу видна избыточность данных. Информация в полях swept volume, quantity drum, capacity явно дублируется; представьте, сколько записей придется вам редактировать, если характеристики одного из автомобилей надо изменить хотя бы потому, что перед этим они были введены с ошибкой. Разумнее разделить эту таблицу на две, в одной хранить информацию о автомобиле, характерную для каждого отдельного экземпляра, а в другой t1=SECONDS() ? t1-t ? Mlook Когда вам необходимо отредактировать одну запись, что, как правило, является обычным условием работы, используйте прямое редактирование полей с помощью форм или окон Browse. Если вы хотите, чтобы данные в полях записей редактировались без участия пользователя, то используйте команду REPLACE. Иной раз возникают задачи глобального изменения значений какого-нибудь из полей. К примеру, раньше все были гражданами СССР, а теперь стали гражданами России. Чтобы одновременно поменять все значения в поле, часто применяется следующая команда: REPLACE ALL citizenship WITH Россия Тем, кто знаком с SQL, возможно, больше по душе следующая конструкция: UPDATE kadry SET citizenship = Россия которая работает раза в полтора быстрее. Тем не менее наибольшей скорости глобального изменения гражданства можно добиться, имея уникальный ключ для всех работников. Например: SELE kadry SET ORDER TO rabId FOR I = 1 TO 100000 SEEK I REPLACE citizenship WITH Россия NEXT Данная программа выполнит замену в три раза быстрее, чем программа, использующая команду REPLACE с опцией ALL. Единственный ее недостаток - это необходимость строгого соблюдения правил присваивания идентификатора каждой записи. В противном случае надо обрабатывать еще и ошибку, которая может возникнуть, если не будет найдена подходящая запись. Если глобальный поиск выполняется часто, можем посоветовать создать индекс по выражению RECNO(), то есть по функции, которая возвращает номер записи по порядку. При обсуждении с заказчиком проекта приложения, структуры базы данных и каждой отдельной таблицы необходимо постоянно думать о предстоящем поиске данных. Учитывая важность этой проблемы при поиске данных, мы сделаем вид, что ничего не писали в первых двух главах и рассмотрим пример влияния структуры таблицы на эффективность поиска данных. Естественно, вы выносите дублирующуюся информацию в отдельные таблицы. Вряд ли имеет смысл хранить технические характеристики автомобиля в таблице счетов. Вы выносите их в отдельную таблицу и при этом каждой записи присваиваете уникальный идентификатор. Если вам надо изменить какую-нибудь из характеристик автомобиля, придется менять данные всего в одной записи одного поля.
Вторая таблица - MODEL - вот так: key model name model key firm swept volume quantity drum capacity
Для связи таблицы используется поле key model. С помощью связующего поля мы легко можем получить любую информацию, которая хранится в этих таблицах. Вам может понадобиться изменить идентификатор одного из автомобилей в таблице Model. Как сделать, чтобы записи не остались одинокими в первой таблице - Automobil passenger car? Можно провести замену с помощью команды REPLACE, то есть найти записи с этим идентификатором и заменить на новое значение. Но лучше использовать ссылочную целостность и написать триггер для выполнения изменений данных в таблице Model. В нем следует написать код, который будет искать все соответствующие записи в таблице Automobil passenger car. Теперь у пользователя будет создаваться впечатление, что умный компьютер сам знает, что нужно поменять идентификатор автомобиля во всех таблицах, в которых он присутствует. Если вам не хочется писать триггеры самостоятельно, то в некоторых случаях Visual FoxPro сможет вам помочь, если вы воспользуетесь диалоговым окном Referential Integrity, которое можно вызвать из меню Database. Работа с данными в Microsoft Access Для ввода и редактирования данных в Microsoft Access используются формы, которые могут иметь несколько режимов, таблицы и запросы. При открытии формы, по умолчанию, если вы не подключили свое меню, становится активным меню Форма, в котором имеются команды для поиска, сортировки и фильтрации данных. Аналогичные команды присутствуют в меню, связанном с таблицами и запросами. Как правило, при простом редактировании данных в таблицах этих средств более чем достаточно. Среди средств поиска наиболее простым является использование диалогового окна Поиск, с помощью которого вы можете последовательно находить нужные вам записи. Это диалоговое окно позволяет искать данные как в текущем поле, так и в других полях используемого источника данных. Вы можете последовательно находить несколько записей, удовлетворяющих выражению или его части, введенному в строке образца. Поиск можно проводить как вверх по таблице от текущей записи, так и вниз, либо по всей таблице. Но совершенно очевидно, что таким образом поиск можно производить только по одному полю, либо при случайном стечении обстоятельств по нескольким, к примеру, слово Петрович может быть и отчеством и фамилией. В форме вы можете с помощью Мастера кнопок построить кнопку, которая будет служить для поиска записей. После того как вы создадите подобную кнопку с характерным рисунком бинокля или надписью Поиск записи , откройте окно кода для события Click. Скорее всего там будут следующие строчки: - общие характеристики автомобилей. Одна таблица Automobil passenger car будет выглядеть примерно так: Sub Кнопка40 Click() On Error GoTo Err Кнопка40 Click Screen .PreviousControl.SetFocus DoCmd.DoMenuItem acFormBar, acEditMenu, 10, , acMenuVer70 Exit Кнопка40 Click: Exit Sub Err Кнопка40 Click: MsgBox Err.Description Resume Exit Кнопка40 Click End Sub По сути, код события Click для этой кнопки просто выполняет команду Найти меню Правка. С тем же успехом вы могли создать макрос с единственной макрокомандой Команда меню, имеющей аргументы : Строка меню - Форма Название меню - Правка Команда - Найти После этого просто перетащите графический образ макроса из вкладки Макрос в любое место формы, и вы получите кнопку, которая будет выполнять то же самое, что и кнопка, созданная Мастером, а если вы назовете макрос Поиск записи , то и надпись на кнопке будет аналогичной. Ваш макрос делает то же, что и следующая строчка из процедуры, созданной Мастером: DoCmd.DoMenuItem acFormBar, acEditMenu, 10, , acMenuVer70 Выполнить этот макрос, когда не активна строка меню Форма, невозможно, впрочем, как невозможно воспользоваться и методом объекта DoCmd DoMenuItem из процедуры Мастера. Мы все время зависим от наличия на экране меню Форма. Единственное преимущество кода события по сравнению с нашим макросом заключается в том, что первый обработает ошибку, когда выяснит, что не может выполниться. Будет выдано сообщение, связанное с этой ошибкой, а наш макрос просто повиснет , выведя на экран окно обработчика ошибок макросов. Впрочем, даже если меню присутствует на экране, то совсем не обязательно, что будет найдена запись, соответствующая введенному образцу. Если нужная запись не будет найдена, на экран будет выведено стандартное сообщение Access: Поиск записей в приложении Microsoft Access завершен. Элемент не найден В качестве примера организации поиска данных рассмотрим создание своей собственной формы, которая будет возвращать то сообщение, которое мы хотим получить в случае неудачного поиска. Пример формы ПОИСК вы найдете в файле базы данных AUTOSTORE.MDB, который находится на дискете, прилагаемой к данной книге. Форма AUTOMOBIL PASSENGER CAR имеет кнопку для поиска данных в текущем текстовом поле. При ее нажатии вызывается форма ПОИСК . В модуле Bookmodule объявляются две переменные: LastForm типа Form и lastcntr типа Control: Dim LastForm As Form Dim lastcntr As Control Первая служит для передачи переменной формы, а вторая для передачи переменной последнего активного элемента управления для использования их в форме ПОИСК . В событии Click кнопки Поиск формы AUTOMOBIL PASSENGER CAR записываем следующий код: Sub Кнопка40 Click() Set LastForm = Screen.ActiveForm Set lastcntr = Screen.PreviousControl mybook=LastForm.Bookmark PoiskSub End Sub Процедура PoiskSub служит для установки флажка В текущем поле . Дело в том, что последний элемент управления, который был активным до нажатия на кнопку Поиск, может быть
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |