Типы данных, используемых в Paradox
Обозначение |
Размер
|
Тип данных
|
Пояснение
|
1 |
2 |
3 |
4 |
А
|
1 - 255
|
Alpha
|
Строковое поле, содержащее любые печатаемые ASCII символы. |
N
|
|
Number
|
Действительные числа от -10307 до 10308 с 15 значащими разрядами. Для выбора формата представления надо использовать Paradox. |
$
|
|
Money
|
Положительные или отрицательные числа, отличающиеся от Number формой представления и символом денежной единицы. |
s |
|
Short |
Короткие целые числа от –32 767 до 32 767 |
I
|
|
Long Integer
|
Длинные целые числа от 2 147 483 648 до 2 147 483 647 |
#
|
0 - 32
|
BCD
|
Числа в формате BCD (Binary Coded Decimal). Этот тип введен для совместимости с другими приложениями, использующими BCD. В поле типа BCD можно вводить до 15 значащих разрядов. |
D
|
|
Date
|
Значения, представляющие собой даты. |
T
|
|
Time
|
Значения, представляющие собой время. |
@
|
|
Timestamp
|
Значения, хранящие время и дату. При вводе значения в поле типа Timestamp пользователь может последовательно нажимать клавишу пробела, чтобы ввести текущее время и дату. |
M |
1 – 240 |
Memo |
Поля для хранения текстов неограниченной длины. Тексты хранятся в отдельных файлах .mb. Указываемый размер — это число первых символов текста, хранящихся непосредственно в таблице. |
F |
0 – 240 |
Formatted Memo |
Поля для хранения форматированных текстов неограниченной длины. Тексты хранятся в отдельных файлах .mb. Указываемый размер - это число первых символов текста, хранящихся непосредственно в таблице. |
G |
|
Graphic |
Изображения из файлов в форматах .bmp, .pcx, .tif, .gif или .eps. Database Desktop преобразует их в формат .bmp. |
O |
|
OLE |
Данные типа OLE - изображения, звуки, документы. Database Desktop не поддерживает поля этого типа. Просмотр полей OLE возможен в Paradox или в приложениях C++Builder. |
L |
|
Logical |
Логические поля. По умолчанию возможные значения — true и false. |
+ |
|
Autoincrement |
Автоматически увеличивающееся на 1 длинное целое. Только для чтения. При удалении записей значения полей в оставшихся записях не изменяются. |
B |
|
Binary |
Данные, хранящиеся в отдельных двоичных файлах .mb, которые Database Desktop не интерпретирует. В файлах могут храниться звуки и любые другие данные. |
Y |
1 – 255 |
Bytes |
Данные, которые Database Desktop не интерпретирует. В отличие от полей Binary хранятся в таблице, а не во внешних файлах. |
В правой части окна структуры таблицы (см. рис. 4) задаются свойства таблицы (Table properties).
Validity Checks — проверка правильности значений. Можно задать следующие характеристики поля:
Required Field |
Этим индикатором отмечаются те поля, значения которых обязательно должны содержаться в каждой записи. |
Minimum
|
Минимальное значение. Это свойство полезно задавать для числовых полей. |
Maximum |
Максимально значение. Это свойство полезно задавать для числовых полей. |
Default
|
Значение по умолчанию. Это свойство полезно задавать для числовых и логических полей. |
Picture
|
Шаблон для ввода данных. Например, можно задать шаблон номера телефона «###-##-##» и др. |
Assist |
Эта кнопка вызывает диалоговое окно, помогающее создать шаблон Picture и занести его в список, из которого в дальнейшем его можно брать при создании новых таблиц. |
Table Lookup — таблица просмотра. Этот раздел позволяет связать с полем данной таблицы какое-то поле другой просматриваемой таблицы, из которого будут браться допустимые значения. При выборе Table Lookup на экране появляется кнопка Define — определить. При ее нажатии открывается диалоговое окно, показанное на рис. 5. В нем можно для данного поля задать таблицу просмотра (Lookup table). При этом вы можете воспользоваться выпадающим списком драйверов или псевдонимов (Drive or Alias) и кнопкой просмотра (Browse). Затем кнопкой со стрелкой следует занести поле просматриваемой таблицы, из которого будут браться допустимые значения.
Рис. 5. Окно задания таблицы просмотра
Secondary Indexes — вторичные индексы. Этот раздел позволяет создать необходимые для дальнейшей работы вторичные индексы (первичный индекс создается по ключевым полям). Например, для дальнейшего использования таблицы Prod полезен будет индекс, упорядочивающий таблицу по дате и коду продукции.
Чтобы создать новый вторичный индекс, следует нажать кнопку Define — определить. Откроется диалоговое окно, представленное на рис. 6. В его левом окне Fields содержится список доступных полей, в правом окне Indexed fields можно подобрать и упорядочить список полей, включаемых в индекс. Для переноса поля из левого окна в правое надо выделить интересующее поле или группу полей и нажать кнопку со стрелкой вправо или дважды щелкнуть по выбранному полю. Стрелками Change order (изменить последовательность) можно изменить порядок следования полей в индексе.
Рис. 6. Окно задания индекса
Панель радиокнопок Index Options (опции индекса) позволяет установить следующие характеристики:
Unique
|
Установка этой опции не позволяет индексировать таблицу, если в ней находятся дубликаты совокупности включенных в индекс полей. |
Descending |
При установке этой опции таблица будет упорядочиваться по степени убывания значений (по умолчанию упорядочивание производится по степени нарастания значений). |
Case Sensitive |
При установке этой опции будет приниматься во внимание регистр, в котором введены символы. |
Maintained |
Если эта опция установлена, то индекс обновляется при каждом изменении в таблице. В противном случае индекс обновляется только в момент связывания с таблицей или передачи в нее запроса. Это несколько замедляет обработку запросов. Поэтому полезно включать эту опцию для обновляемых таблиц. Если таблица используется только для чтения, эту опцию лучше не включать. |
После того, как индекс сформирован, следует нажать кнопку ОК. Открывается окно (рис. 7), в котором задается имя индекса.
Рис. 7. Окно задания имени индекса
Завершение создания таблицы
После того, как все необходимые данные о структуре таблицы внесены, следует щелкнуть на кнопке Save as (сохранить как). Откроется окно, напоминающее обычный диалог сохранения в файле. От обычного это окно отличается выпадающим списком Alias. Этот список содержит псевдонимы различных баз данных, из которого можно выбрать базу данных, в которую будете сохранять свою таблицу. Если не требуется сохранять таблицу в одной из существующих баз данных, то можно воспользоваться обычным списком "Сохранить" в верхней части окна. При этом вы с помощью обычной быстрой кнопки можете создать новую папку (каталог), так как для Paradox база данных — это каталог, в котором сохраняется таблица.
Изменение структуры и заполнение таблицы с помощью Database Desktop
После того, как таблица создана, ее можно открыть командой File|Open. Если при сохранении структуры таблицы была использована опция Display Table, то таблица откроется автоматически С помощью разделов меню Table можно просмотреть содержимое таблицы (команда Table|View Data) или редактировать его (команда Table|Edit Data). Команда Table|Info Structure позволяет просмотреть информацию о структуре таблицы, а команда Table|Restructure позволяет изменить структуру таблицы или какие-то ее характеристики. При выполнении этой команды вы попадаете в окно, аналогичное используемому ранее при разработке структуры.
Компоненты C++Builder, используемые для работы БД
Для работы с БД в C++Builder имеются несколько основных компонент(объектов), которые постоянно используются для доступа к БД. Эти объекты могут быть разделены на три группы:
невизуальные: TTable, TQuery, TDataSet, TField
визуальные: TDBGrid, TDBEdit, TDBNavigator
связующие: TDataSource
Первая группа включает невизуальные классы, которые используются для управления таблицами и запросами. Эта группа сосредотачивается вокруг компонент типа TTable, TQuery, TDataSet и TField. В Палитре Компонент эти объекты расположены на странице Data Access.
Вторая важная группа классов - визуальные, которые показывают данные пользователю, и позволяют ему просматривать и модифицировать их. Эта группа классов включает компоненты типа TDBGrid, TDBEdit, TDBImage и TDBComboBox. В Палитре Компонент эти объекты расположены на странице Data Controls.
Имеется и третий тип, который используется для того, чтобы связать предыдущие два типа объектов. К третьему типу относится только невизуальный компонент TDataSource.
Для работы с базами данных необходимо проанализировать и правильно установить значения ключевых свойств компонент доступа и управления. В дальнейшем будем выделять ключевые свойства, методы и события подчеркиванием.
C++Builder поддерживает "трехступенчатую" модель разработки приложения баз данных. В этой модели компонента управления связана с компонентой источника, а та, в свою очередь, получает фактические данные таблицы или запроса посредством механизма BDE. Рис. 8 показывает пример взаимосвязи компонент.
Рис. 8 - Взаимосвязь компонент управления и доступа к содержимому баз данных.
Среднее звено, компонента TDataSource, допускает менять фактическую таблицу на стадии проектирования формы без какого бы то ни было перепрограммирования самого приложения - все отображаемые элементы связаны с источником, а не с питающими его таблицей или запросом.
Обзор компонент работы с БД:
Компонент TDataSource.
Компонента TDataSource действует как интерфейс между некоторым объектом набора данных (таблица, запрос) и визуальной компонентой управления. С одной стороны, все наборы данных должны быть ассоциированы с некоторым источником. С другой стороны, каждая компонента управления должна быть ассоциирована с источником, чтобы получать данные для отображения и редактирования. Каждой компоненте набора данных должна соответствовать, по меньшей мере, одна компонента источника.
Некоторые свойства компонента:
AutoEdit разрешает или запрещает режим редактирования записей, вводимых в поля компонент управления. Значение true включает режим редактирования по умолчанию.
DataSet определяет имя конкретного набора данных (таблицы или запроса), который питает данный источник. Можно переключаться с одного набора данных на другой "на лету", во время выполнения программы.
С компонентой TDataSource связаны три события:
• OnDataChange возникает при перемещении курсора на новую запись и используется при необходимости "ручной" синхронизации поведения компонент управления.
• OnStateChange возникает при изменении свойства State наборов данных.
• OnUpdateData возникает перед обновлением текущей записи и используется при необходимости синхронизации поведения обычных компонент с изменениями некоторого набора данных.
