- •Оглавление
- •Часть 1. Краткое описание Delphi 8
- •Часть 2. Технология ado для баз данных access 186
- •9.1. Общие сведения 289
- •Введение
- •Часть 1. Краткое описание Delphi
- •1. Работа со средой delphi
- •1.1. Ознакомление с delphi
- •1.2. Вкладка дизайнера формы (design)
- •1.3. Вкладка редактора кода программы
- •1.4. Окно object inspector
- •1.5. Окно project manager
- •1.6. Окно палитры инструментов
- •1.7. Создание первого проекта приложения
- •1.8. Сохранение проекта
- •1.8. Сохранение проекта
- •1.9. Компиляция
- •2. Основа языка delphi
- •2.1. Основные понятия языка
- •2.1.1. Элементы языка
- •2.1.2. Пример простой программы
- •2.1.3. Типы данных
- •2.1.4. Операции и выражения
- •2.1.5. Стандартные функции
- •2.1.6. Ввод и вывод на дисплей
- •2.1.7. Оператор присваивания
- •2.2. Операторы языка паскаль
- •2.2.1. Составной оператор
- •2.2.2. Условный оператор
- •2.2.3. Сложные условия
- •2.2.4. Оператор выбора case
- •2.2.5. Оператор цикла for
- •2.2.6. Оператор цикла while
- •2.2.7. Оператор цикла repeat
- •2.2.8. Вложенные циклы
- •2.2.9. Прочие операторы
- •2.3. Общая структура программы
- •2.3.1. Перечень разделов программы
- •2.4. Массивы
- •2.4.1. Одномерные массивы
- •2.4.2. Сортировка массивов и поиск элемента в массиве
- •2.4.3. Многомерные массивы
- •2.5. Функции и процедуры
- •2.5.1. Описание функций
- •2.5.2. Обращение к функции
- •2.5.3. Процедуры
- •2.5.4. Параметры-значения и параметры-переменные
- •2.5.5. Локальные и глобальные переменные
- •2.5.6. Pекурсия
- •2.6. Строки символов
- •2.6.1. Задание строк
- •Var имя: string[длина];
- •2.6.2. Функции и процедуры для обработки строк
- •2.7. Порядковые типы данных
- •2.7.1. Перечисляемый тип данных
- •2.7.2. Интервальный тип данных
- •2.7.3. Порядковые типы данных
- •2.7.4. Дополнение:тип данных tDateTime (дата-время)
- •2.8. Множества
- •2.8.1. Значения типа множество
- •2.8.2. Операции на множествах
- •2.9. Записи
- •2.9.1. Поля записи
- •2.9.2. Оператор with
- •2.9.3. Последовательный поиск в массиве записей
- •2.9.4. Двоичный поиск в массиве записей
- •2.10. Файлы
- •2.10.1. Основные свойства файлов
- •2.10.2. Типизированные файлы
- •2.10.3. Текстовые файлы
- •2.10.4. Поиск файлов
- •2.11. Динамическая память
- •2.11.1. Динамические переменные и указатели
- •2.11.2. Динамические списки
- •2.11.3. Деревья
- •2.12. Программные модули
- •2.12.1. Модули, формируемые пользователем
- •2.12.2. Стандартные модули
- •2.12.3. Примеры программ
- •3. Главная форма
- •3.1. Свойства главной формы
- •3.2. События главной формы
- •4. Описание некоторых компонентов
- •4.1. Компонент tpanel (панели)
- •4.2. Компонент tbutton (кнопка)
- •4.3. Дополнительные кнопки
- •4.4. Компонент tlabel (надписи)
- •4.5. Компонент tedit (Строки ввода)
- •4.6. Компонент тМето (многостроч. Поле ввода)
- •4.7. Свойства и методы класса tstrings
- •4.8. Компонент checkbox (флажок)
- •4.9. Компонент tradiobutton (кнопки выбора)
- •4.10. Компонент MainMenu (главное меню программы)
- •4.11. Компонент timage
- •4.12. Компонент tstringgrid (сетка)
- •4.13. Компонент ttimer(таймер)
- •5. Отладка программ
- •5.1. Типы ошибок
- •5.2. Отладка программы
- •5.2.1. Трассировка программы
- •5.2.2. Точки останова программы
- •5.2.3. Наблюдение значений переменных
- •Часть 2. Технология ado для баз данных access
- •6. Создание баз данных access
- •6.1. Определение понятия баз данных
- •6.2. Интерфейс программы access
- •6.3. Создание базы данных в access 2007
- •6.3.1. Создание двухтабличной базы данных
- •6.3.2. Создание базы данных с вычисляемыми полями
- •6.4. Выбop формата для новой базы данных
- •6.5. Создание пустой базы данных
- •6.6. Открытие и закрытие базы данных
- •6.7. Создание таблиц в режиме конструктора
- •6.7.1. Выбор первичного ключа
- •6.7.2. Изменение полей и таблиц
- •6.7.3. Копирование полей
- •6.7.4. Перемещение полей
- •6.7.5. Удаление полей
- •6.7.6. Операции с таблицами
- •6.8. Создание базы данных в access 2003
- •6.9. Установление связей между таблицами
- •6.10. Обеспечение целостности записей в базе данных
- •6.11. Редактирование и удаление связей
- •7. Система доступа к данным ado
- •7.1. Общие сведения
- •7.2. Компонент adoConnection
- •7.2.1. Свойства компонента adoConnection.
- •7.2.2. Методы компонента adoConnection
- •7.3.Компонент аdоТable
- •7.3.1. Свойства компонента tadoTable
- •7.3.2. Методы компонента tadoTable
- •7.4. Компонент adoQuery
- •7.5. Компонент adoDataSet
- •7.5.1.Свойства компонента adoDataSet
- •7.5.2. Методы компонента adoDataSet
- •7.5.3. Cобытия компонента adoDataSet
- •7.6. Компонент DataSource
- •7.7.Комнонент DataGrid
- •7.7.1 Cвойства компонента DataGrid
- •7.7.2. Методы и события компонента DataGrid
- •7.8. Компонент adocommand
- •8. Управление базами данных
- •8.1. Приложение для управления базами данных
- •8.2. Свойства полей базы данных
- •8.3. Редактирование базы данных
- •8.4. Сортировка данных
- •8.5. Поиск данных в базе
- •8.5.1. Фильтрация данных в базе
- •8.5.2. Нахождения информации методом Locate
- •9.1. Общие сведения
- •9.2. Основные операторы запроса
- •9.2.1. Агрегатные функции
- •9.2.2. Подзапросы
- •9.3. Операторы наполнения баз данных sql
- •9.3.1. Ввод значений
- •9.3.2. Удаление значений
- •9.3.3. Изменение значений
- •9.4. Операторы создания баз данных sql
- •9.4.1. Команда создания таблицы.
- •9.4.2. Первичные ключи таблицы
- •9.4.3. Индексы таблицы
- •9.4.4. Добавление в таблицу новых столбцов
- •10. Реализация sql- запросов
- •10.1. Компонент tadoQuery для sql- запросов
- •10.2. Форма для реализация sql-запроса
- •11. Генератор отчетов Quick Reports
- •11.1.Описание Quick Reports
- •11.2. Печать записи с помощью Quick Reports
- •11.3. Печать таблиц с помощью Quick Reports
- •394026 Воронеж, Московский просп., 14
8.5.2. Нахождения информации методом Locate
Очевидно, что комбинация трех полей - Фамилия, УчГруппа, СтудБилет - однозначно определяет искомую строку, т.е. все данные студента. По этим полям мы и будем их находить.
Чтобы достичь этого, перейдем в главную форму и доработаем ее.
А именно в правый верхний угол главной формы добавим компонент Label, свойство Caption которого содержит надпись Введите данные, под ним расположим три компонента Label (надписи Фамилия, УчГруппа и СтудБилет), справа от них три копонента Edit и рядом с ними (справа) компонент TSpeedButton (кнопку с надписью Поиск и картинкой), при нажатии на которую будет запускаться поиск
Если в учебной группе нет однофамильцев, то можно проводить Упрощенный поиск с использованием только поля Фамилия. При этом можно вводить фамилию как полностью, так и ее первые буквы.
На этот случай поставим на форму, ниже уже установленных компонентов, еще два компонента - кнопки Button с надписями Упрощенный поиск (только по Фамилии) и Поиск по начальным буквам фамилии, при нажатии на одну из которых будет запускаться поиск..
Для кнопок Поиск, Упрощенный поиск (только по Фамилии) и Поиск по начальным буквам фамилии создадим обработчики событий, используя метод Locate, который позволяет позиционировать курсор на определенной строке базы данных.
У метода Locate три параметра:
поле, по которому нужно искать значения;
искомое значение;
параметры поиска.
В качестве параметров поиска можно указывать сочетания из следующих констант:
loPartialKey— искомое значение может совпадать не полностью, т.е. может совпадать часть значения, но с самого начала;
loCaseInsensitive — не учитывать реестр.
Если необходимая строка найдена, то результатом работы метода будет true, иначе метод вернет false.
Сначала рассмотрим работу метода на примере Упрощенного поиска (только по фамилии).
Используя метод Locate, для события onClick, возникающего при нажатии на кнопку Упрощенный поиск (только по фамилии) напишем следующий код:
if not DataModulel.ADOTablel.Locate('Фамилия',
Edit1.Text, []) then
ShowMessage('Строка не найдена');
Здесь вызывается метод Locate для поиска строки внутри текущего набора данных.
В качестве первого параметра указано имя поля Фамилия т.е. поиск значения будет происходить именно в этом поле.
Второй параметр — искомое значение (содержимое поля Edit1).
Третий параметр совсем пустой, а значит, после вызова функции будет выделена строка, в которой поле ''Наименование" содержит текст, указанный во втором параметре, причем содержит один к одному.
Если мы запустим программу и попробуем найти какою-либо фамилию, то курсор будет перескакивать мгновенно или оставаться на месте, если мы неправильно ввели фамилию или ввели несуществующую фамилию.
Для события onClick, кнопки Поиск по начальным буквам фамилии напишем следующий код
DataModule1.ADOTablel.Locate('Наименование',
Edit1. Text, [loPartialKey]);
Здесь уже в качестве третьего параметра указан ключ loPartialKey, т. е. искомая строка не обязана совпадать полностью, главное, чтобы начало было одинаковое.
. Запустите программу и попробуйте ввести в поле Edit1 какую-то фамилию. По мере ввода курсор будет перемещаться по набору данных в поиске нужного значения.
Например, нажав клавишу <С >, курсор окажется на первой строке, в которой фамилия будет начинаться на букву "С". Добавив еще буквы, мы более точно найдем искомую фамилию.
Поиск может происходить сразу по нескольким полям.
Как сказано выше, комбинация полей Фамилия, УчГруппа, СтудБилет однозначно определяет искомую запись.
Поэтому в качестве первого параметра метода Locate укажем строку, в которой искомые поля перечислены через точку с запятой, а во втором параметре передадим массив значений компонентов Edit, который легко создать с помощью функции VfrArrayOf.
В результате для события onClick, возникающего при нажатии на кнопку Поиск, получается следующий код:
If not DataModule1.SpisokTAble.Locate('Фамилия; УчГруппа;СтудБилет',
VarArrayOf([Edit1.Text,Edit2.Text,Edit3.Text]),[]) then
ShowMessage('Строка не найдена ');
Общий вид Главной формы приведен на рис 10.2.
Более широкие возможности по организации поиска в базе данных дает использование языка SQL.
9. SQL – язык запросов