- •Оглавление
- •Часть 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.3. Редактирование базы данных
К данному моменту созданное нами приложение имеет Главную форму, на которой установлен компонент DBGrid - сетка для отображения первой таблицы Список и дополнительная форма Form3, на которой установлен компонент DBGrid - сетка для отображения второй таблицы Оценки.
Как указывалось выше, в этих компонентах можно добавлять, удалять и редактировать строки наших таблиц.
Чтобы исключить возможности редактирования полей в таблицах, последовательно выделим оба компонента DBGrid и в их свойствах Option dgEditing установим значение false, что исключит возможность редактирования данных в сетках.
Для редактирования данных на Главной форме создадим компонент MainMenu (Menus) главное меню.
Создать это меню можно следующим образом.
Из палитры инструментов Standard на Главную форму ставим компонент MainMenu (Menus).
Двойным щелчком на компоненте MainMenu (Menus) на форме откроем окно Form1.MainMenu1 с выделенным прямоугольником в левом верхнем углу.
В объектном инспекторе выбираем свойство Caption (если свойство Caption не видно, щелкаем по свойству Items и выбираем свойство Caption) и вводим название раздела, например, «Редактирование».
Далее щелкаем по выделенному прямоугольнику.
Во-первых, в нем появилось название раздела Редактирование, которое отобразилось на форме,
и во-вторых, справа от него и снизу появились новые прямоугольники.
Выделяя в разделе Редактирование нижние прямоугольники и используя свойство Caption, создадим подразделы «Добавить запись», «Редактировать запись», «Удалить запись».
Выделяя правый прямоугольник, создаем новый раздел, например, «Сортировка».
Выделяя нижний прямоугольник этого раздела, создаем подраздел, например, «По фамилии».
Аналогично создаются другие подразделы.
Для всех подразделов создаем свои обработчики событий.
Так для подраздела Добавить запись в обработчике события напишем следующий код
DataModule1.SpisokTable.Insert;
EditRecordForm.ShowModal;
Первая строка кода с помощью метода Insert таблицы SpisokTable добавляет новую строку в таблицу.
Вторая строка кода вызывает окно редактирования данных EditRecordForm, создание которого рассмотрено ниже.
Для подраздела Редактировать запись в обработчике события напишем просто код отображения окна редактирования данных.
EditRecordForm.ShowModal;
Для подраздела Удалить запись в обработчике события пишем следующий код
if Application.MessageBox(PChar('Вы действительно хотите удалить'
+DataModule1.SpisokTableDSDesigner.AsString),
'Внимание!!!', MB_OKCANCEL)=id_OK then
DataModule1.SpisokTable.Delete;
В коде отображается сообщение функции MessageBox. В первом параметре (текст сообщения) написан текст "Вы действительно хотите удалить" плюс значение поля Фамилия выделенной строки —. DataModule1.BookTableDSDesigner.AsString.
Чтобы разобраться со значением поля Фамилия - DataModule1.BookTableDSDesigner.AsString, перейдем в модуль DataModuie и дважды щелкнем кнопкой мыши по компоненту SpisokTable, где у нас подключена первая таблица, и затем по полю Фамилия.
В посмотрев в объектный инспектор, увидим, что в нем имя этого поля значится как - BookTableDSDesigner. Поэтому мы и записываем сначала имя модуля данных (DataModule1), затем через точку имя поля (BookTabieDSDesigner) и метод ASString, который возвращает значение поля в виде строки.
Эта сложность вызвана тем, что Delphi распознает только поля на своем (английском) языке и поля с названием на русском языке меняет на их английский эквивалент.
Если посмотреть в раздел type модуля DataModulel, то можно убедиться, что внутри нашего объекта TDataModulel есть объявление свойства BookTableDSDesigner типа TWideStringField.
При создании обработчика событий меню Редактирование мы ссылались на будущую форму редактирования данных, которую назвали EditRecordForm.
Теперь создадим эту новую форму, к которой будет обращаться меню Редактирование, и которая будет использоваться для редактирования данных каждой записи.
Сохраним ее в модуле EditFormUnit. Самой же форме дадим уже ранее присвоенное название EditRecordForm.
Для улучшения общего вида этой формы изменим у нее следующие свойства:
для BorderStyle - bsSingle;
для Position — poMainFormCenter.
Далее подключим к форме EditRecordForm модуль с данными, потому что нам необходимо будет иметь к ним доступ.
Для этого выберем из меню File пункт Use Unit. В появившемся окне выберем DataModuleUnit и нажмем ОК. Как указывалось выше, подключение можно произвести и вручную, записав в форме EditRecordForm ключевого слова implementation команду — uses DataModuieUnit.
На новую форму EditRecordForm установим :
компоненты Label с вкладки Standard и присвоим им названия, соответствующие именам полей базы данных,
компоненты доступа к данным TDBEdit с вкладки Data Controls,
кнопку Сохранить для сохранения результатов редактирования,
кнопку Отмена, по нажатии которую изменения не будут сохранятся в базе.
Общий вид окна редактирования EditRecordForm показан на рис 8.3.
Рис. 8.3
Компоненты TDBEdit представляют собой простые строки ввода типа TEdit, только они умеют автоматически редактировать указанные поля в базе данных.
Чтобы компонент TDBEdit видел данные из нужного поля, необходимо указать у него в свойстве DataSource нужную таблицу, в данном случае таблицу DataModule1.SpisokSource, а в свойстве DataField указать поле, которое надо редактировать.
Для события Onclick кнопки Сохранить пишем следующий код:
if DataModule1.SpisokTable.Modified then
DataModule1.SpisokTable.Post;
close ;
Этот код проверяет, претерпела ли текущая строка изменения. Если да, то в свойстве Modifies будет true иначе false.
Однако если произошли изменения, то их надо сохранить, иначе при закрытии окна пользователем данные могут не сохраниться.
Для сохранения изменений используется метод Post.
Метод Close закрывает окно.
Для кнопки Отмена пишем следующий код:
DataModule1.SpisokTable.Cancel;
В этом коде отмену сделанных записей выполняет метод Cancel. Метод обеспечивает выход из режима редактирования без внесения изменений в таблицу.