- •Оглавление
- •Часть 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
6.3.2. Создание базы данных с вычисляемыми полями
Кроме двутаблчной базы данных Обучение создадим простейшую базу данных с вычисляемыми полями. Например, базу данных Товары, в которой будет таблица с полями Наименование, Кол-во, Цена. В ней мы будем хранить наименование покупки, количество и цену.
Цена в таблице будет указываться за один товар, т. е. за штуку, килограмм или метр.
Чтобы узнать общую стоимость товара, надо цену за единицу умножить на количество товара. При этом итог должен моментально реагировать на любые изменения колонок Кол-во и Цена.
Создадим в Delphi новый проект Товары и сразу добавим в него модуль DataModule. В этот модуль поместим компоненты ADOConnection (для соединения с базой данных), DataSource (для возможности отображения данных из таблицы) и ADOTable (для соединения с таблицей).
Подключимся к новой базе данных с помощью компонента ADOConnectionl.
У DataSourcel в свойстве DataSet укажем таблицу .ADOTablel. В таблице ADOTable1 в свойстве Connection укажем компонент ADOConnectionl, а в свойстве TableName укажем таблицу Товары. После этого можно делать таблицу активной (в свойстве Active нужно указать true).
Теперь щелкним дважды по компоненту ADOTable1 и в появившемся окне редактора свойств добавим все поля таблицы. Для начала желательно сделать невидимым ключевое поле. Потом нужно установить значения по умолчанию для полей Кол-во и Цена. Эти поля будут участвовать в математических расчетах, поэтому в них обязательно должны быть какие-нибудь значения. Если в одном из полей не будет данных, то программа во время расчетов выдаст ошибку.
Пусть для поля Кол-во в свойстве DefaultExpression (значение по умолчанию) стоит значение единицы, а для поля Цена в том же свойстве - ноль.
Теперь создадим новое поле, которое будет хранить итог расчетов. Но прежде чем это делать, нужно сделать таблицу неактивной, так как новое поле можно создавать только при неактивной таблице.
Щелкнем правой кнопкой в окне редактора свойств и выберим пункт New Field. В окне свойств нового поля заполним следующие поля:
Name (имя нового поля) — назовем поле Sum;
Type (тип поля)— у нас будет числовая сумма, поэтому выберите тип Integer;
Field Туре (тип поля) — выбирайте calculated, чтобы создать вычисляемое поле.
Как только поле создано, таблицу снова можно делать активной.
Теперь выделим компонент ADOTable1 и создададим обработчик события OnCalcFieids.
Это событие вызывается каждый раз, когда надо пересчитать вычисляемые поля. Оно будет вызываться для всех видимых пользователю записей. В этом обработчике напишите следующее:
procedure TDataModulel.ADOTablelCalcFields(DataSet: TDataSet);
begin
ADOTablelSum.Value:=ADOTablelDSDesigner2.AsInteger* ADOTablelDSDesignerS.AsInteger;
End;
Прежде чем рассматривать этот код, откроем окно редактора свойcтв полей таблицы ADOTable1 и посмотрим имена (свойство Name) полей Кол-во, Цена, и Sum. Это ADOTablelDSDesigner2, ADOTablelDSDesigner3 и AD0TablelSum соответственно.
С помощью этих имен можно обращаться к значениям, находящимся в полях. Надо только написать имя поля и вызвать один из его методов для преобразования значения в нужный формат. Доступны дующие методы полей:
AsInteger — получить значение, хранящееся в данном поле в виде числа;
AsDateTime — получить значение в виде объекта TdateTime;
AsBoolean — получить значение в виде булева значения;
AsCurrency — получить значение в виде цены;
AsFloat — получить значение в виде вещественного значения;
AsString — получить значение в виде строки;
AsVariant — получить значение в виде типа Variant.
Последний — это универсальный тип, который может принимать любые значения, хоть число, хоть строку, в общем, любые доступные типы.
Теперь посмотрим на ранее приведенный код, и сразу же станет все понятно. Здесь записывается в свойство value поля ADOTable1sum результат перемножения значений полей Цена и Кол-во. Значения полей получаются как целые числа - AsInetger. Если у нас цены или количества могут быть вещественными, то значения полей нужно воспринимать как AsDouble.
Теперь перейдем в главное окно нашей программы. Подключим к нему; модуль DataModule (меню File | Use Unit) и установим на форму одну сетку DBGrid. В Свойстве DataSource сетки выберем таблицу DataModulel.DataSource1.
Теперь программа готова. Можно запустить ее и ввести в базу несколько полей.
Кстати, поле итога не должно изменяться пользователем вручную, потому что оно вычисляемое.
Именно поэтому не возможно туда ввести никакого значения. Delphi просто блокирует любые такие попытки, хотя поле и не имеет признака "только для чтения" (Readonly).