- •Базы данных.
- •Проектирование базы данных
- •Шаги проектирования базы данных
- •Создание таблиц базы данных
- •Компоненты для работы с бд
- •Создание простейшего приложения
- •Режимы наборов данных
- •Команды навигации
- •Визуальные компоненты для работы с данными
- •Обзор компонент
- •Работа с полями таблицы
- •Создание статических полей
- •Задание ограничений на вводимые значения
- •Компонент Table
- •Сортировка и фильтрация
- •Поиск записей
- •If Table1.Locate ('Number',123,[]) {опции поиска отключены}
- •If not Table1.FindKey([EditGroup.Text,EditName.Text]){ищем соответствующие значения}
- •Связывание таблиц
- •Компонент Query
- •Чтение данных из таблиц (select)
- •Модификация записей (update, insert, delete)
- •Insert into Tovar.Db (Name, Price, Count) values (’Яблоки’, 20, 10)
- •Некоторые функции языка sql
- •Компоненты для построения отчетов
- •Основные свойства компоненты QuickRep
- •Методы компоненты QuickRep:
- •Свойства компоненты qrBand:
- •Создание простого отчета
- •Включение выражений в отчет
- •Отображение системной информации
- •Группировка данных в отчете
- •Построение отчета для связанных наборов данных
- •Комбинированный отчет
- •Упражнения:
-
Создание таблиц базы данных
Создать или изменить структуры таблиц БД можно несколькими способами (предполагается, что мы создаем локальную базу данных в формате Paradox):
-
При помощи программы Database Desktop. Поставляемой совместно с Delphi. Запустить ее можно при помощи меню Пуск/Программы/Borland Delphi/Database Desktop. Недостатком метода является то, что при удалении (или повреждении) таблицы все действия по созданию нужно повторить заново.
-
При помощи SQL-запроса. Запустить запрос можно в любой программе поддерживающей SQL. Например, в том же Database Desktop: выбрать меню File/New/SQL file…, затем набрать SQL-запрос и выбрать меню SQL/Run SQL. Или написав процедуру обработки SQL-запросов в Delphi:
procedure TForm1.Button1Click(Sender: TObject);
begin
Query1.DataBaseName:='c:\work';
Query1.SQL.Assign(Memo1.Lines);
Query1.ExecSQL;
end;
Предполагается, что на форме находятся компоненты Button1 (обработчик OnClick которого вызывает эту процедуру), Memo1 (в который предварительно набирается текст SQL-запроса) и Query1 (набор данных обрабатывающий SQL-запросы). “Недостатком” этого подхода является необходимость знания синтаксиса SQL-языка.
-
Программно в Delphi, при помощи компонента TTable, написав обработчик какого-либо события. Этот метод более громоздкий, но зато позволяет организовать восстановление структуры БД в процессе эксплуатации (то есть после того как программа попала к пользователю вашей БД).
При создании таблицы для каждого поля вам понадобиться указывать его тип. Соответствие типов приведено в следующей таблице
Paradox |
SQL |
Delphi |
Описание |
- |
- |
ftUnknown ftVariant |
Неизвестный или неопределенный |
Alpha |
Char(n) |
ftString |
Строка символов (не более 255) |
Short |
Smallint |
ftSmallint |
16-битное целое число |
Long Integer |
Integer |
ftInteger |
32-битное целое число |
Logical |
Boolean |
ftBoolean |
Логическое |
Number |
Numeric(x,y) |
ftFloat |
Действительное число |
$(Money) |
Money |
ftCurrency |
Денежный |
#(BCD) |
Decimal(x,y) |
ftBCD |
Двоично-десятичное число |
Date |
Date |
ftDate |
Дата |
Time |
Time |
ftTime |
Время |
@(Timestamp) |
Timestamp |
ftDateTime |
Дата и время |
Bytes |
Bytes(n) |
ftBytes |
Массив до 255 байтов |
+(Autoincrement) |
Autoinc |
ftAutoInc |
Автоинкрементное 32-битное целое число |
Memo |
BLOB(n,1) |
ftMemo |
Строка символов. Длина не ограничена. |
Binary |
BLOB(n,2) |
ftBlob |
Массив байтов любой длины. |
Formatted Memo |
BLOB(n,3) |
ftFmtMemo |
Форматированный текст |
OLE |
BLOB(n,4) |
ftParadoxOle |
OLE-поддерживаемый формат |
Graphics |
BLOB(n,5) |
ftGraphic |
Рисунок в формате BMP |
Ниже приведены примеры работы с таблицей “c:\work\NewTable.db” для каждого из этих способов.
Database Desktop |
SQL |
Delphi |
Создание таблицы Содержащей поля: Id – число , Name – до 20-ти букв, Birthday – дата; ключ по полю Id и индекс по Birthday. |
||
Выберите пункт меню File/New/Table. В появившемся диалоговом окне выбрать тип таблицы – “Paradox” и нажать “Ok”. В поле “Field Name” введите имя первого поля “Id”. Чтобы задать его тип щелкните правой кнопкой мыши в соседней ячейке (столбец “Type”) и выберите “Long Integer” или просто нажмите на “I”. Для создания второго поля нажмите на клавиатуре “стрелку вниз”. Аналогичным образом задаются остальные поля. Не забудьте указать размер (столбец “Size”) для текстового поля (тип “Alpha”). Для создания первичного ключа, дважды щелкните мышкой в столбце “Key” поля “Id” – появиться звездочка. В окне “Table properties” выберите “Secondary Indexes” и нажмите на кнопку “Define…”. В списке “Fields” дважды щелкните по полю “ Birthday” и нажмите “Ok”. Задав имя индекса, снова нажмите “Ok”. Для сохранения таблицы нажмите на кнопку “Save as…”.В появившемся окне, при помощи выпадающего списка “Папка”, выберите каталог “C:\work”, в поле “Имя файла” наберите “NewTable” и нажмите на кнопку “Сохранить”. |
CREATE TABLE NewTable (Id INTEGER, Name CHAR(20), Birthday DATE, PRIMARY KEY (Id)); CREATE INDEX indBirthday ON NewTable (Birthday) |
with Table1 do begin Active := False; DatabaseName := 'c:\work'; TableName := 'NewTable'; {определение полей} with FieldDefs do begin Clear; With AddFieldDef do begin Name := 'Id'; DataType := ftInteger; end; with AddFieldDef do begin Name := 'Name'; DataType := ftString; Size := 20; end; with AddFieldDef do begin Name := 'Birthday'; DataType := ftDate; end; end; {определение индексов} with IndexDefs do begin Clear; with AddIndexDef do begin Fields := 'Id'; Options := [ixPrimary]; End; With AddIndexDef do begin Name := ' Birthday'; Fields := ' Birthday'; Options: = []; End; End; CreateTable; Active:=True; end; |
Удаление таблицы |
||
Выберите пункт меню File/Tools/Utilites/Delete. В появившемся окне выберите таблицу для удаления и нажмите “Delete”. Подтвердите свои намерения в следующем окне, и таблица со всеми своими файлами удалиться. |
DROP TABLE NewTable |
with Table1 do begin Active := False; DatabaseName := 'c:\work'; TableName := 'NewTable'; DeleteTable; End; |
Изменение структуры таблицы Добавление текстового поля Adress и удаление поля Birthday |
||
Откройте изменяемую таблицу (меню File/Open/Table) и выберите пункт меню Table/Restructure… Появиться окно как и при создании таблицы, работа с ним описана выше. Для вставки нового поля перед выбранным полем – нажмите клавишу “Insert”. Для удаления поля – “Ctrl – Delete”. |
ALTER TABLE NewTable ADD Adress CHAR(50), DROP Birthday |
В Delhpi нет процедур высокого уровня для изменения структуры таблиц. При большой необходимости можно воспользоваться функцией DbiDoRestructure (по аналогии с использованием функции DbiCreateTable в процедуре TTable.CreateTable), а лучше SQL-запросом в компоненте TQuery. |