Содержание
Обзор
Утилита Database Desktop
Заключение
- Обзор
- На данном
уроке мы изучим, как создавать
таблицы базы данных с помощью
утилиты Database Desktop, входящей в
поставку Delphi. Хотя для создания
таблиц можно использовать
различные средства (SQL -
компонент TQuery и WISQL, компонент TTable), применение этой
утилиты позволяет создавать
таблицы в интерактивном режиме
и сразу же просмотреть их
содержимое - и все это для
большого числа форматов. Это
особенно удобно для локальных
баз данных, в частности Paradox и
dBase.
- Утилита Database Desktop
Database Desktop -
это утилита, во многом похожая на
Paradox, которая поставляется вместе с
Delphi для интерактивной работы с
таблицами различных форматов
локальных баз данных - Paradox и dBase, а
также SQL-серверных баз данных InterBase,
Oracle, Informix, Sybase (с использованием SQL
Links). Исполняемый файл утилиты
называется DBD.EXE, расположен он, как
правило, в директории, называемом DBD
(при установке по умолчанию). Для
запуска Database Desktop просто дважды
щелкните по ее иконке.
После старта
Database Desktop выберите команду меню
File|New|Table для создания новой таблицы.
Перед Вами появится диалоговое
окно выбора типа таблицы, как
показано на рис.1. Вы можете выбрать
любой формат из предложенного,
включая различные версии одного и
того же формата.
После выбора
типа таблицы Database Desktop представит
Вам диалоговое окно, специфичное
для каждого формата, в котором Вы
сможете определить поля таблицы и
их тип, как показано на рис.2.
Имя поля в
таблице формата Paradox представляет
собой строку, написание которой
подчиняется следующим правилам:
-
- Имя должно
быть не длиннее 25 символов.
-
- Имя не
должно начинаться с пробела,
однако может содержать
пробелы. Однако, если Вы
предполагаете в будущем
переносить базу данных в
другие форматы, разумнее будет
избегать включения пробелов в
название поля. Фактически, в
целях переносимости лучше
ограничиться девятью
символами в названии поля, не
включая в него пробелы.
-
- Имя не
должно содержать квадратные,
круглые или фигурные скобки [], () или {}, тире, а также
комбинацию символов “тире” и
“больше” (->).
-
- Имя не
должно быть только символом #, хотя этот символ
может присутствовать в имени
среди других символов. Хотя
Paradox поддерживает точку (.) в названии поля,
лучше ее избегать, поскольку
точка зарезервирована в Delphi
для других целей.
Имя поля в
таблице формата dBase представляет
собой строку, написание которой
подчиняется правилам, отличным от
Paradox:
-
- Имя должно
быть не длиннее 10 символов.
-
- Пробелы в
имени недопустимы.
Таким
образом, Вы видите, что имена полей
в формате dBase подчиняются гораздо
более строгим правилам, нежели
таковые в формате Paradox. Однако, мы
еще раз хотим подчеркнуть, что если
перед Вами когда-либо встанут
вопросы совместимости, то лучше
сразу закладывать эту
совместимость - давать полям имена,
подчиняющиеся более строгим
правилам.
Укажем еще
правила, которым подчиняется
написание имен полей в формате InterBase.
-
- Имя должно
быть не длиннее 31 символа.
-
- Имя должно
начинаться с букв A-Z, a-z.
-
- Имя поля
может содержать буквы (A-Z, a-z), цифры, знак $ и символ
подчеркивания (_).
-
- Пробелы в
имени недопустимы.
-
- Для имен
таблиц запрещается
использовать
зарезервированные слова InterBase.
Следующий
(после выбора имени поля) шаг
состоит в задании типа поля. Типы
полей очень сильно различаются
друг от друга, в зависимости от
формата таблицы. Для получения
списка типов полей перейдите к
столбцу “Type”, а затем нажмите
пробел или щелкните правой кнопкой
мышки. Приведем списки типов полей,
характерные для форматов Paradox, dBase и
InterBase.
Итак, поля
таблиц формата Paradox могут иметь
следующий тип (для ввода типа поля
можно набрать только подчеркнутые
буквы или цифры):
Табл. A:
Типы полей формата Paradox
Alpha |
строка
длиной 1-255 байт, содержащая
любые печатаемые символы |
Number |
числовое
поле длиной 8 байт, значение
которого может быть
положительным и отрицательным.
Диапазон чисел - от 10-308 до
10308 с 15 значащими цифрами |
$ (Money) |
числовое
поле, значение которого может
быть положительным и
отрицательным. По умолчанию,
является форматированным для
отображения десятичной точки и
денежного знака |
Short |
числовое
поле длиной 2 байта, которое
может содержать только целые
числа в диапазоне от -32768 до 32767 |
Long Integer |
числовое
поле длиной 4 байта, которое
может содержать целые числа в
диапазоне от -2147483648 до 2147483648 |
# (BCD) |
числовое
поле, содержащее данные в
формате BCD (Binary Coded Decimal).
Скорость вычислений немного
меньше, чем в других числовых
форматах, однако точность -
гораздо выше. Может иметь 0-32
цифр после десятичной точки |
Date |
поле
даты длиной 4 байта, которое
может содержать дату от 1
января 9999 г. до нашей эры - до 31
декабря 9999 г. нашей эры.
Корректно обрабатывает
високосные года и имеет
встроенный механизм проверки
правильности даты |
Time |
поле
времени длиной 4 байта,
содержит время в миллисекундах
от полуночи и ограничено 24
часами |
@ (Timestamp) |
обобщенное
поле даты длиной 8 байт -
содержит и дату и время |
Memo |
поле
для хранения символов,
суммарная длина которых более
255 байт. Может иметь любую
длину. При этом размер,
указываемый при создании
таблицы, означает количество
символов, сохраняемых в
таблице (1-240) - остальные
символы сохраняются в
отдельном файле с расширением
.MB |
Formatted Memo |
поле,
аналогичное Memo, с добавлением
возможности задавать шрифт
текста. Также может иметь любую
длину. При этом размер,
указываемый при создании
таблицы, означает количество
символов, сохраняемых в
таблице (0-240) - остальные
символы сохраняются в
отдельном файле с расширением
.MB. Однако, Delphi в стандартной
поставке не обладает
возможностью работать с полями
типа Formatted Memo |
Graphic |
поле,
содержащее графическую
информацию. Может иметь любую
длину. Смысл размера - такой же,
как и в Formatted Memo. Database Desktop
“умеет” создавать поля типа
Graphic, однако наполнять их можно
только в приложении |
OLE |
поле,
содержащее OLE-данные (Object Linking and
Embedding) - образы, звук, видео,
документы - которые для своей
обработки вызывают создавшее
их приложение. Может иметь
любую длину. Смысл размера -
такой же, как и в Formatted Memo. Database
Desktop “умеет” создавать поля
типа OLE, однако наполнять их
можно только в приложении. Delphi
“напрямую” не умеет работать
с OLE-полями, но это легко
обходится путем использования
потоков |
Logical |
поле
длиной 1 байт, которое может
содержать только два значения -
T (true, истина) или F (false,
ложь). Допускаются строчные и
прописные буквы |
+ (Autoincrement) |
поле
длиной 4 байта, содержащее
нередактируемое (read-only)
значение типа long integer.
Значение этого поля
автоматически увеличивается
(начиная с 1) с шагом 1 - это очень
удобно для создания
уникального идентификатора
записи (физический номер
записи не может служить ее
идентификатором, поскольку в
Парадоксе таковой отсутствует.
В InterBase также отсутствуют
физические номера записей, но
отсутствует и поле Autoincrement. Его с успехом заменяет
встроенная функция Gen_id,
которую удобней всего
применять в триггерах) |
Binary |
поле,
содержащее любую двоичную
информацию. Может иметь любую
длину. При этом размер,
указываемый при создании
таблицы, означает количество
символов, сохраняемых в
таблице (0-240) - остальные
символы сохраняются в
отдельном файле с расширением
.MB. Это полнейший аналог поля BLOb
в InterBase |
Bytes |
строка
цифр длиной 1-255 байт,
содержащая любые данные |
Поля таблиц
формата dBase могут иметь следующий
тип (для ввода типа поля можно
набрать только подчеркнутые буквы
или цифры):
Табл. B:
Типы полей формата dBase
Character (alpha) |
строка
длиной 1-254 байт, содержащая
любые печатаемые символы |
Float (numeric) |
числовое
поле размером 1-20 байт в формате
с плавающей точкой, значение
которого может быть
положительным и отрицательным.
Может содержать очень большие
величины, однако следует иметь
в виду постоянные ошибки
округления при работе с полем
такого типа. Число цифр после
десятичной точки (параметр Dec в
DBD) должно быть по крайней мере
на 2 меньше, чем размер всего
поля, поскольку в общий размер
включаются сама десятичная
точка и знак |
Number (BCD) |
числовое
поле размером 1-20 байт,
содержащее данные в формате BCD
(Binary Coded Decimal). Скорость
вычислений немного меньше, чем
в других числовых форматах,
однако точность - гораздо выше.
Число цифр после десятичной
точки (параметр Dec в DBD) также
должно быть по крайней мере на 2
меньше, чем размер всего поля,
поскольку в общий размер
включаются сама десятичная
точка и знак |
Date |
поле
даты длиной 8 байт. По
умолчанию, используется формат
короткой даты (ShortDateFormat) |
Logical |
поле
длиной 1 байт, которое может
содержать только значения
“истина” или “ложь” - T,t,Y,y
(true, истина) или F,f,N,n (false,
ложь). Допускаются строчные и
прописные буквы. Таким образом,
в отличие от Парадокса,
допускаются буквы “Y” и “N”
(сокращение от Yes и No) |
Memo |
поле
для хранения символов,
суммарная длина которых более
255 байт. Может иметь любую
длину. Это поле хранится в
отдельном файле. Database Desktop не
имеет возможности вставлять
данные в поле типа Memo |
OLE |
поле,
содержащее OLE-данные (Object Linking and
Embedding) - образы, звук, видео,
документы - которые для своей
обработки вызывают создавшее
их приложение. Может иметь
любую длину. Это поле также
сохраняется в отдельном файле.
Database Desktop “умеет” создавать
поля типа OLE, однако наполнять
их можно только в приложении.
Delphi “напрямую” не умеет
работать с OLE-полями, но это
легко обходится путем
использования потоков |
Binary |
поле,
содержащее любую двоичную
информацию. Может иметь любую
длину. Данное поле сохраняется
в отдельном файле с
расширением .DBT. Это полнейший
аналог поля BLOb в InterBase |
Поля таблиц
формата InterBase могут иметь следующий
тип:
Табл. C:
Типы полей формата InterBase
SHORT |
числовое
поле длиной 2 байта, которое
может содержать только целые
числа в диапазоне от -32768 до 32767 |
LONG |
числовое
поле длиной 4 байта, которое
может содержать целые числа в
диапазоне от -2147483648 до 2147483648 |
FLOAT |
числовое
поле длиной 4 байта, значение
которого может быть
положительным и отрицательным.
Диапазон чисел - от 3.4*10-38
до 3.4*1038 с 7 значащими
цифрами |
DOUBLE |
числовое
поле длиной 8 байт (длина
зависит от платформы), значение
которого может быть
положительным и отрицательным.
Диапазон чисел - от 1.7*10-308
до 1.7*10308 с 15 значащими
цифрами |
CHAR |
строка
символов фиксированной длины
(0-32767 байт), содержащая любые
печатаемые символы. Число
символов зависит от Character Set,
установленного в InterBase для
данного поля или для всей базы
данных (например, для символов
в кодировке Unicode число символов
будет в два раза меньше длины
строки) |
VARCHAR |
строка
символов переменной длины (0-32767
байт), содержащая любые
печатаемые символы. Число
символов также зависит от Character
Set, установленного в InterBase для
данного поля или для всей базы
данных |
DATE |
поле
даты длиной 8 байт, значение
которого может быть от 1 января
100 года до 11 декабря 5941 года
(время также содержится) |
BLOB |
поле,
содержащее любую двоичную
информацию. Может иметь любую
длину. Database Desktop не имеет
возможности редактировать
поля типа BLOB |
ARRAY |
поле,
содержащее массивы данных.
InterBase позволяет определять
массивы, имеющие размерность 16.
Поле может иметь любую длину.
Однако, Database Desktop не имеет
возможности не только
редактировать поля типа ARRAY, но
и создавать их |
TEXT BLOB |
подтип
BLOB-поля, содержащее только
текстовую информацию. Может
иметь любую длину. Database Desktop не
имеет возможности
редактировать поля типа TEXT BLOB |
Итак, мы
изучили все типы полей, являющиеся
“родными” для Delphi.
После этого для
таблиц Paradox мы можем определить
поля, составляющие первичный ключ,
причем все они должны быть в начале
записи, а первое поле, входящее в
ключ, должно быть первым полем в
записи. Для этого достаточно по ней
дважды щелкнуть мышкой или нажать
любую клавишу.
После
создания таблицы, с ней можно
связать некоторые свойства,
перечень которых зависит от
формата таблицы. Так, для таблиц
формата Paradox можно задать:
-
- Validity Checks (проверка
правильности) - относится к
полю записи и определяет
минимальное и максимальное
значение, а также значение по
умолчанию. Кроме того,
позволяет задать маску ввода
-
- Table Lookup (таблица для
“подсматривания”) - позволяет
вводить значение в таблицу,
используя уже существующее
значение в другой таблице
-
- Secondary Indexes (вторичные
индексы) - позволяют
доступаться к данным в порядке,
отличном от порядка,
задаваемого первичным ключом
-
- Referential Integrity (ссылочная
целостность) - позволяет задать
связи между таблицами и
поддерживать эти связи на
уровне ядра. Обычно задается
после создания всех таблиц в
базе данных
-
- Password Security (парольная
защита) - позволяет закрыть
таблицу паролем
-
- Table Language (язык таблицы) -
позволяет задать для таблицы
языковый драйвер.
В таблицах
dBase не существует первичных
ключей. Однако, это обстоятельство
можно преодолеть путем определения
уникальных (Unique) и поддерживаемых
(Maintained) индексов (Indexes). Кроме того, для
таблиц dBase можно определить и язык
таблицы (Table Language) - языковый
драйвер, управляющий сортировкой и
отображением символьных данных.
Определения
дополнительных свойств таблиц всех
форматов доступны через кнопку
“Define” (для таблиц InterBase данная
кнопка называется “Define Index...” и
позволяет определять лишь только
индекс, но не первичный ключ) в
правой верхней части окна (группа
Table Properties). Причем, все эти действия
можно проделывать не только при
создании таблицы, но и тогда, когда
она уже существует. Для этого
используется команда Table|Restructure Table
(для открытой в данный момент
таблицы) или Utilities|Restructure (с
возможностью выбора таблицы).
Однако, если Вы желаете изменить
структуру или добавить новые
свойства для таблицы, которая в
данный момент уже используется
другим приложением, Database Desktop
откажет Вам в этом, поскольку
данная операция требует
монопольного доступа к таблице. Но
зато все произведенные в структуре
изменения сразу же начинают
“работать” - например, если Вы
определите ссылочную целостность
для пары таблиц, то при попытке
вставить в дочернюю таблицу данные,
отсутствующие в родительской
таблице, в Delphi возникнет
исключительное состояние.
В заключение
отметим еще часто используемую
очень полезную возможность Database
Desktop. Создавать таблицу любого
формата можно не только “с чистого
листа”, но и путем копирования
структуры уже существующей
таблицы. Для этого достаточно
воспользоваться кнопкой “Borrow”,
имеющейся в левом нижнем углу окна.
Появляющееся диалоговое окно
позволит Вам выбрать существующую
таблицу и включить/выключить
дополнительные опции, совпадающие
с уже перечисленными свойствами
таблиц. Это наиболее легкий способ
создания таблиц.
-
- Заключение
Итак, на
данном уроке мы познакомились со
штатной утилитой, используемой для
интерактивного создания и
модификации таблиц различной
структуры. И хотя управление
таблицами можно осуществлять с
помощью различных средств
(SQL-скрипт в WISQL, компонент TTable, компонент TQuery), данная утилита
позволяет делать это в
интерактивном режиме наиболее
простым способом.
|