Анимация
JavaScript
|
Главная Библионтека Запросы добавления Запросы обновления Запросы удаления 7.3. Изменение структуры данных с помощью SQL 7.4. Запросы и локальные представления в Microsoft Visual FoxPro 7.5. Запросы в Microsoft Access Запрос добавления Запрос - Создание таблицы Запрос удаления Запрос обновления Перекрестный запрос 7.6. Работа с данными в локальной сети Visual FoxPro Несколько советов по увеличению производительности при работе в сети в приложениях MicroxPro Microsoft Access Постоянно сталкиваясь с громадным потоком информации, которая обрушивается на нас, не давая передышки ни дома, ни на работе, мы привыкли к невзгодам информационного взрыва. Кажется, что тут сложного, вот она, информация! Поглощай ее глазами с экрана телевизора, лови из радиоприемника, читай, записывай, запоминай. Громадные массивы данных стали заполонять все возможные устройства, которые способны хоть в каком-то виде хранить данные. Почему так быстро растет значение информации? Да потому, что без нее не обойтись не только при управлении государством, маленькой фирмой, без информации трудно надеяться на успех даже не очень дорогой покупки. Информация нужна всем, но больше всего нужна обработанная информация. Согласитесь, что вам гораздо больше пригодился бы список наиболее низких цен на телевизоры в ближайших к вам магазинах, чем толстый справочник всех магазинов вашего города. Если вы согласны, то перейдем к делу, поговорим об обработке данных. 7.1. Организация ввода данных, их поиска и редактирования Для работы с данными, хранящимися в таблицах, необходимо организовать ввод данных, поиск и обновление устаревшей информации. Для ввода и редактирования данных лучший способ работы - создание форм. Как это сделать, мы расскажем в главе 9. В этом параграфе вы узнаете: • о наиболее эффективных методах поиска данных; • о способах модернизации данных в отдельных полях и группах записей; • о том, каким образом в поиске данных могут помочь фильтры; • и как использовать для работы с данными объекты DAO. Работа с данными в Visual FoxPro Данные, для того чтобы отредактировать, необходимо найти. Самый простой способ - вывести данные в табличной форме, например, в окно Browse или воспользоваться объектом Grid. После этого, воспользовавшись клавишами навигации, найти нужную запись и изменить ее. Этот способ вполне пригоден для небольших таблиц, имеющих количество записей, измеряемое двузначным числом. Когда их количество составляет тысячи или даже миллионы, такой поиск затрудняется. В этом случае рекомендуется использовать команды и функции поиска. Одни из них работают без индексов, другие обязательно требуют их создания и подключения. Одна из наиболее универсальных команд - LOCATE - работает без индексов. В то же время наличие индекса по выражению, по которому проводится поиск, без его подключения, значительно повышает скорость поиска. При наличии неподключенного индекса Visual FoxPro использует технологию Rushmore. Эта технология представляет собой специальный метод, существенно ускоряющий процесс поиска нужных данных. В то же время необходимо учитывать, что наличие большого количества индексов требует времени на их обновление. Для проверки скорости поиска можно использовать следующую процедуру: * В таблице Customer существует индекс по полю * key customer. * Отключая на всякий случай индексы, мы используем * технологию Rushmore, что дает нам ускорение поиска * более чем в 150 раз при работе с таблицей, имеющей * больше 100000 записей. SELECT Customer SET ORDER TO nPeriod = SECONDS() LOCATE FOR key customer = 45004 nPeriod 1 = SECONDS() ? nPeriod 1 - nPeriod Еще более солидный выигрыш в скорости вы можете получить при работе с символьными полями. Команда LOCATE имеет следующий синтаксис: LOCATE FOR lExpression1 [Scope] [WHILE lExpression2] [NOOPTIMIZE] Команда LOCATE часто используется в связке с командой CONTINUE, которая позволяет продолжить поиск по установленному критерию поиска до тех пор, пока не будут найдены все записи. Другой способ поиска всех нужных данных - использование фильтров, которые устанавливаются с помощью команды SET FILTER. Установка фильтров также дает выигрыш в скорости при наличии индекса по выражению поиска. Команда SEEK позволяет проводить поиск по выражению, для которого имеется индекс и который подключен в момент поиска. Это самый быстрый метод поиска, но требующий постоянного переключения индексов в случае, если необходимо производить поиск по разным выражениям. При использовании этой команды для поиска нужных данных нет необходимости указывать поле, по которому проводится поиск. Таким полем автоматически объявляется активный в данный момент индекс. SELECT Customer SET ORDER TO key customer t=SECONDS() SEEK 45004 t1=SECONDS() ? t1-t Если вам необходимо найти значение какого-то поля и вам известно значение одного из полей в соответствующей записи, то используйте функцию LOOKUP() LOOKUP(ReturnField, eSearchExpression, SearchedField [, cTagName]) Аргументы в этой функции имеют следующее назначение: • ReturnField - поле, значение которого возвратит функция LOOKUP(); • eSearchExpression - значение, по которому производится поиск; • SearchedField - поле, в котором производится поиск; • cTagName - имя тега, если есть возможность использовать подключенный индекс. По скорости поиска функция LOOKUP() вполне сравнима с командой SEEK. Она также дает выигрыш в скорости при наличии индекса за счет использования технологии Rushmore. После успешного поиска указатель записи переводится в ту запись, в которой найдено искомое значение. Пример использования функции LOOKUP(): CLEAR t=SECONDS() SET ORDER TO mlook=LOOKUP(lastname,45004,Key customer)
В приведенной выше таблице сразу видна избыточность данных. Информация в полях 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(), то есть по функции, которая возвращает номер записи по порядку. При обсуждении с заказчиком проекта приложения, структуры базы данных и каждой отдельной таблицы необходимо постоянно думать о предстоящем поиске данных. Учитывая важность этой проблемы при поиске данных, мы сделаем вид, что ничего не писали в первых двух главах и рассмотрим пример влияния структуры таблицы на эффективность поиска данных. Естественно, вы выносите дублирующуюся информацию в отдельные таблицы. Вряд ли имеет смысл хранить технические характеристики автомобиля в таблице счетов. Вы выносите их в отдельную таблицу и при этом каждой записи присваиваете уникальный идентификатор. Если вам надо изменить какую-нибудь из характеристик автомобиля, придется менять данные всего в одной записи одного поля. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 [ 67 ] 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 |