Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Работа с полями наборов данных

Поле набора данных представляет собой столбец таблицы. В среде Delphi предусмотрен специальный объект Field для работы с полями. Данный объект имеет тип TField. Наследниками этого объекта являются TIntegerField, TFloatField и т. д. Для того чтобы программист мог работать с отдельными полями набора данных, в Delphi определены специальные методы и свойства, которые мы и рассмотрим.

Свойство FieldCount имеет тип Integer и содержит число полей данного набора данных. Свойство доступно только для чтения. Приведем пример чтения значения свойства FieldCount:

a:=Table1.FieldCount; // a – переменная типа Integer

ВНИМАНИЕ. Количество полей набора данных может не быть равным числу полей физической таблицы базы данных, так как в набор данных могут быть не включены некоторые поля таблицы.

Свойство Fields имеет тип TFields и хранит список всех несоставных полей набора данных. Его можно представить себе в виде массива, который содержит поля набора данных, каждое под своим номером (индексом). Вы можете обращаться к конкретному полю набора данных при помощи указания его индекса (Index). Нумерация индексов начинается с нуля и заканчивается значением FieldCount-1. Если приложению известен тип данных конкретного поля, то его значение можно прочитать с помощью свойства Fields:

Edit1.Text:=Table1.Fields.Fields[1].AsString;

Кроме того, допускается запись значения в нужное поле набора данных:

Table1.Edit; // Переводим набор данных в режим редактирования Table1.Fields.Fields[1].AsString:=Edit1.Text; Table1.Post; // Записываем данные в таблицу

Вы, вероятно, обратили внимание на то, что при вставке в поле значения мы применили такое свойство объекта Field, как AsString. Данное свойство позволяет обращаться к содержимому поля как к строковому значению. Кроме рассмотренного свойства, имеются еще несколько: AsInteger — обращение как к целой величине, AsFloat — как к вещественной, AsVariant — как к вариантной, AsCurrency — как к денежной, AsDateTime — как к «дате-времени» и AsBoolean — обращение как к логическому (булевому) значению.

ВНИМАНИЕ. При доступе к полю набора данных нужно всегда четко представлять, какого оно типа. Так как, например, если вы обращаетесь к строковому полю с использованием свойства AsFloat, возникнет исключительная ситуация.

Обращение к полям по их номеру не всегда эффективно, поскольку номер поля — величина не постоянная. Номера полей зависят от многих факторов: от порядка полей в физической таблице базы данных, от состава полей набора данных в настоящий момент времени, от значений свойств визуальных компонентов. Поэтому доступ к полю по его номеру чреват ошибками. На практике для доступа к полям разработчики чаще всего используют методы FindField и FieldByName.

Метод FindField (const FieldName: string): TField; обнаруживает поле по его имени. Если такое поле найдено, то метод возвращает объект типа TField, то есть поле, соответствующее параметру FieldName. В случае отрицательного результата возвращается значение nil. Данный метод похож на рассматриваемый далее метод FieldByName за исключением того, что он возвращает значение nil в случае, когда поле не найдено, а метод FieldByName генерирует исключительную ситуацию.

ВНИМАНИЕ. Параметр FieldName указывает имя поля физической таблицы базы данных, которое было задано при первичном проектировании таблицы.

Метод FieldByName(const FieldName: string): TField; также ищет поле по его имени. В случае успешного поиска возвращается поле, соответствующее параметру FieldName. В противном случае генерируется исключительная ситуация EDatabaseError.

Вы можете выбрать как первый, так и второй метод для работы с полями — это дело вкуса.

Рассмотрим пример кода, в котором заменим значение поля с помощью вызова метода FindField:

Table1.Edit; // Переводим набор данных в режим редактирования Table1.FindField(‘Number’).AsInteger:=10; Table1.FindField(‘Name’).AsString:=’Вячеслав’; Table1.FindField(‘Surname’).AsString:=’Понамарев’; Table1.Post; // Записываем данные в таблицу

Мы уже немного научились использовать объект поля Field. Теперь остановимся на нем более подробно.

Как уже было сказано ранее, объект Field имеет тип TField, который является абстрактным классом. Поэтому вместо него применяются классы-наследники, перечисленные в табл. 3.2.

Таблица 3.2. Наследники класса TField

Класс-наследник Вид поля набора данных
TADTField Поле абстрактного типа данных (Abstract Data Type) может использовать определенные типы, созданные на сервере баз данных. Может содержать массивы, ссылки и другие данные
TAgregateField Составное поле. Позволяет объединять разнородные данные полей набора данных
TArrayField Поле массива. Содержит набор полей одного типа
TAutoIncField Поле, автоматически увеличивающее свое значение (автоинкрементное). Может служить счетчиком записей набора данных. Диапазон значений: от –2 147 483 648 до 2 147 483 647. Этот тип поля чаще всего использу- ется в качестве уникального первичного ключа
TBCDField Двоично-десятичное поле (Binary-Coded Decimal). В основном требуется для хранения денежных величин. Обычно такое поле содержит деся- тичные значения. Так как Delphi ранее не поддерживала собственного типа BCD, для работы с этим полем компилятор использует денежный тип Currency, из-за чего значение этого поля ограничено 20 значащими цифрами
TBLOBField Large OBjects) Данное поле содержит ссылки на большие двоичные объекты (Binary Этот тип поля является прямым предком для двух других типов полей: TGraphicField и TMemoField
TBooleanField Поле логического (булевого) типа. Может иметь значения true или false
TBytesField Последовательность байтов фиксированной длины
TCurrencyField Поле содержит значения денежного типа (положительные или отрица- тельные) от 5,0x10-324 до 1,7x10308 с точностью до 15 знаков после запятой
TDataSetField Поле обеспечивает доступ к вложенному набору данных
TDateField Поле содержит дату
TDateTimeField Поле содержит дату и время
TFloatField Данное поле содержит вещественные значения. Они могут находиться в диапазоне от 5,0x10-324 до 1,7x10308 с точностью до 15 знаков после запятой
TFMTBCDField Данные представлены в истинной двоично-десятичной форме
TGraphicField Графическое поле
TGUIdField Поле предназначено для работы с уникальными глобальными иденти- фикаторами (Globally Unique Identifiers, GUIDs)
TIDispatchField Поле содержит указатели на интерфейсы Idispatch
TIntegerField Поле для хранения целочисленных 32-битных значений со знаком. Может содержать числа в диапазоне от –2 147 483 648 до 2 147 483 647
TLargeIntField Поле большого целочисленного значения (64-битного)
TMemoField Memo-поле, служит для хранения текста
TReferenceField Поле содержит ссылки или указатели на другие объекты
TSmallIntField Поле маленького целочисленного значения (16-битного). Допускаются числа в диапазоне от –32 768 до 32 767
TSQLTimeStampField Содержит данные о дате и времени в формате, совместимом с драйве- рами dbExpress
TStringField Строковое поле. Заполняется строками простого текста длиной до 8192 символов
TTimeField Поле времени
TVarBytesField Поле байтов переменного размера. Значение длины содержится в первых двух байтах
TVariantField Поле вариантного типа
TWideStringField Поле длинных строк
TWordField Поле целочисленного 16-битного значения без знака. Диапазон значений от 0 до 65 535

В дальнейшем мы будем применять термин TField для обозначения любого из объектов, перечисленных в табл. 3.1.

Для того чтобы проверить, какой тип имеет конкретное поле таблицы, используйте свойство DataType типа TFieldType. Оно может принимать значения, представленные в табл. 3.3.

Таблица 3.3. Значения свойства DataType

Значение Описание
ftUnknown Неопределенный тип
ftString Поле символа или строки
ftSmallInt 16-битное целое поле
ftInteger 32-битное целое поле
ftWord 16-битное целое поле без знака
ftBoolean Логическое (булевское) поле
ftFloat Поле вещественных чисел
FtCurrency Поле денежных значений
FtBCD Поле двоично-десятичных значений
FtDate Поле даты
FtTime Поле времени
FtDateTime Поле даты и времени
FtBytes Поле байтовых значений фиксированной длины
FtVarBytes Поле байтовых значений переменной длины
FtAutoInc Поле, автоматически увеличивающее свое значение
FtBLOB BLOB-поле
FtMemo Memo-поле
ftGraphic Графическое поле
ftFmtMemo Memo-поле, содержащее форматированный текст
ftParadoxOLE Поле OLE для таблиц Paradox
ftDBaseOLE Поле OLE для таблиц dBase
ftTypedBinary Двоичное поле
ftCursor Курсор хранимой процедуры Oracle
ftFixedChar Символьное поле фиксированной длины
ftWideString Поле длинной строки
ftLargeInt Поле большого целого числа
ftADT Поле данных абстрактного типа
ftArray Поле массива
ftReference Поле, содержащее ссылки и указатели на объекты
ftDataSet Поле типа TDataSet
ftOraBLOB BLOB-поле в таблице Oracle 8
ftOraCLOB CLOB-поле в таблице Oracle 8
ftVariant Данные неизвестного или неопределенного типа
ftInterface Поле ссылок на интерфейсы (IUnknown)
ftIDispatch Поле ссылок на интерфейсы (IDispatch)
ftGUID Поле GUID
ftTimeStamp Поле даты и времени, доступное с помощью средств dbExpress
ftFMTBCD Поле двоично-десятичного значения, являющегося слишком большим для ftBCD

Теперь мы можем перейти к рассмотрению особенностей наборов данных Table и Query.

<== предыдущая лекция | следующая лекция ==>
Режимы наборов данных. В примере использования события BeforeClose мы упомянули о режиме набора данных (свойстве State) | Набор данных Table
Поделиться с друзьями:


Дата добавления: 2014-01-15; Просмотров: 948; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.015 сек.