В среде разработки Delphi можно создавать приложения для работы с самыми разными базами данных. Такая универсальность подразумевает необходимость применения средств, которые бы обеспечили возможность работы со многими типами данных, используемыми в этих базах данных.
Естественно, что существует большая группа типов данных, конкретная реализация которых практически не отличается от платформы к платформе. Это, например, строки, символы, целые и вещественные числа и т. д.
Есть типы данных, которые реализованы далеко не на каждой платформе. Есть, наконец, просто уникальные типы данных.
Для удовлетворения потребностей разработчиков в Delphi применен следующий способ работы с типами данных.
Тип данных однозначно связан с конкретным полем таблицы базы данных. Без этого поля само понятие типа данных не имеет практического смысла. В Delphi свойства абстрактного поля инкапсулирует класс TField, который не имеет заранее определенного типа данных. Уже от этого класса порождено целое семейство классов для типизированных полей (см. рис. 13.1), каждый из которых умеет обращаться со своим типом данных.
Примечание
В классе TField имеется свойство DataType, которое отвечает за тип данных, но оно не может быть изменено.
Весь список доступных типов данных содержится в типе TFiieidType:
type TFieldType = (ftUnknown, ftString, ftSmallint, ftlnteger, ftWord, ftBoolean, ftFloat, ftCurrency, ftBCD, ftDate, ftTime, ftDateTime, ftBytes, ftVarBytes, ftAutoInc, ftBlob, ftMemo, ftGraphic, ftFmtMemo, ftParadoxOle, ftDBaseOle, ftTypedBinary, ftCursor, ftFixedChar, ftWideString, ftLargeint, ftADT, ftArray, ftReference, ftDataSet, ftOraBlob, ftOraClob, ftVariant, ftlnterface, ftlDispatch, ftGuid, ftTimeStamp, ftFMTBcd);
В табл. 13.1 рассматриваются все типы данных, которые можно использовать при разработке приложений для работы с базами данных.
Таблица 13.1. Типы данных
Тип |
Класс |
Описание |
Неизвестный (ftUnknown) |
Неопределенный тип данных |
|
Строковый (ftString) |
TStringField |
Строка длиной до 8192 символов |
Целый короткий (ftSmallint) |
TSmalllntField |
16-битное целое в диапазоне от -32 768 до 32 767 |
Целый (ftlnteger) |
TIntegerField |
32-битное целое в диапазоне от -2 147 483 648 до 2 147 483 647 |
Целый положительный (ftWord) |
TWordField |
1 6-битное целое в диапазоне от 0 до 65535 |
Логический (ftBoolean) |
TBooleanField |
Значения True и False |
Вещественный (ftFloat) |
TFloatField |
Вещественные положительные и отрицательные числа с точностью 15 цифр после запятой в диапазоне от 5,0x1 0"324 до 1,7x1 0308 |
Денежный (ftCurrency) |
TCurrencyField |
Вещественные положительные и отрицательные числа с точностью 15 цифр после запятой в диапазоне от 5,0x1 0"324 до 1,7x1 0308. Дополнительно вставляется символ валюты |
Десятичный с двоичным кодированием (ftBCD) |
TBCDField |
Вещественные числа с повышенной точностью (до 4 знаков перед запятой и до 20 знаков после запятой). Могут храниться в двоичном и десятичном форматах |
Дата (ftDate) |
TDateField |
Дата |
Время (ftTime) |
TDateTimeField |
Время |
Календарный (ftDateTime) |
TDateTimeField |
Комбинированный формат с одновременным хранением даты и времени |
Фиксированный буфер (ftBytes) |
TBytesField |
Набор байтов фиксированного размера. Для работы с этим типом требуется выделять и освобождать память (методы GetMem И FreeMem) |
Переменный буфер (ftVarBytes) |
TVarBytes Field |
Набор байтов переменного размера. Текущий размер буфера хранится в первых двух байтах. Для работы с этим типом требуется выделять и освобождать память (методы GetMem И FreeMem) |
Автоинкрементный (ftAutoInc) |
TAutoIncField |
Значение поля в каждой новой записи автоматически увеличивается на 1 . Целое число в диапазоне от -2 147 483 648 до 2 147 483 647. Применяется для обеспечения уникальности значений ключей |
BLOB (ftBlob) |
TBLOBField |
Большой двоичный массив. Используется для хранения любых данных, которые можно преобразовать в цифровой массив (Memo, Graphic). В базах данных такие данные хранятся в отдельных файлах, а поле содержит лишь ссылки на них |
Memo (ftMemo) |
TMemoField |
Набор строк произвольной длины |
Графический (ftGraphic) |
TGraphicField |
Формат для хранения изображений |
Форматированный Memo (ftFmtMemo) |
Форматированный набор строк произвольной длины |
OLE Paradox (ftParadoxOle) |
Поле OLE для таблиц Paradox |
OLE dBASE (ftDBaseOle) |
Поле OLE для таблиц dBASE |
|
Типизированный двоичный (ftTypedBinary) |
Типизированный двоичный |
|
Курсор Oracle (ftCursor) |
Курсор для хранимых процедур сервера Oracle |
|
Фиксированный символьный (ftFixedChar) |
TStringField |
Строка символов с нулевым символом в конце |
Расширенный строковый (ftWideString) |
Динамически выделяемая строка 16-битных символов в кодировке Unicode |
|
Целый большой (ftLargeint) |
TLargelntField |
64-битное целое число |
Абстрактный (ftADT) |
TADTField |
Произвольный тип данных, создаваемый пользователем на сервере БД и используемый в приложении |
Массив (ftArray) |
TArrayField |
Массив полей любого типа, кроме TarrayField |
Ссылочный (ftReference) |
TReferenceField |
Указатель на объект, содержащийся в другой таблице |
Набор данных (ftDataSet) |
TDataSetField |
Содержит набор данных, интегрированный в текущий набор данных |
BLOB Oracle 8 (ftOraBlob) |
Тип BLOB для сервера Oracle 8 |
|
CLOB Oracle 8 (ftOraClob) |
Тип CLOB для сервера Oracle 8 |
|
Вариант (ftVariant) |
TVariantField |
Вариант |
Интерфейс (ftlnterface) |
TInterfaceField |
Ссылка на интерфейс (потомок от lUnknown) |
Ссылка на интерфейс IDispatch (ftlDispatch) |
TIDispatchField |
Ссылка на интерфейс (потомок от IDispatch) |
Глобальный идентификатор (ftGuid) |
TGuidField |
Глобальный идентификатор GUID |
Календарный (ftTimeStamp) |
Календарный тип для наборов данных dbExpress |
|
Десятичный с двоичным кодированием (ftFMTBcd) |
TFMTBCDField |
Тип BCD повышенной точности |