Ревунков Г.И. - Методические указания к лабораторному практикуму по курсу «Базы данных» (1075664), страница 17
Текст из файла (страница 17)
• Boolean - TBooleanFieid
• TDateTime - TDateField, TDateTimeField. TTimeField
Существуют следующие свойства AsXXXX для приведения типов полей:
• property AsBoolean: Boolean;
• property AsCurrency: Currency;
• property AsDateTime:TDateTime;
• property AsFloat: Double;
• property AsInteger: Integers;
• property AsInteger: String;
• property AsVariant: Variant;
Каждое из этих свойств приводит значение поля к соответствующему типу данных, означенному в названии свойства.
Например, если TablelNumber - поле TintegerFieid, для приведения его к типу String нужно воспользоваться свойством AsString:
Editl.Text := TablelNumber.AsString;
Tип поля должен быть совместимым с типом данных, к которому приводится значение поля. Например, если TablelSumma - поле TFloatField, попытка привести его к несовместимому типу Boolean приведет к ошибке.
Описание свойств, методов и событий класса TField приведено в приложении.
3.2.2. Проверка правильности введенных значений
Проверить введенное в поле значение на его соответствие некоторым ограничениям или условиям можно в обработчике события On Validate. Это событие наступает при изменении значения поля вручную или программно до выполнения метода Post набора данных, который запоминает изменения БД. Поэтому, если полю присвоено неверное значение, выполнение метода Post можно предотвратить, вызвав метод Abort или возбудив исключительную ситуацию.
3.2.3. Формирование текстового представления поля
Часто требуется некоторое дополнительное преобразование для более точного или более правильного представления хранящегося в поле значения. Для этих целей служит обработчик события OnGetText объекта-поля.
Обработчики выполняются только в работающей программе, поэтому на этапе конструирования не виден результат их работы.
3.2.3. СОЗДАНИЕ ВЫЧИСЛЯЕМЫХ ПОЛЕЙ
Создать вычисляемое (виртуальное) поле, значения которого не существуют в реальных ТБД, а вычисляются по значениям других полей, можно с помощью редактора полей. Для его вызова можно использовать контекстное меню (правой кнопкой мыши) и выбрать Field Editor. Для создания вычисляемых полей используется опция меню New Field.
В диалоговом окне New Field нужно выбрать переключатель Calculated, ввести имя создаваемого поля (Name), выбрать его тип (Type) и для строковых полей указать длину (Size).
Для нового поля будет создан компонент TField.
Чтобы вычислить значение нового поля, необходимо определить обработчик события OnCalcFields для компонента-источника, к которому оно принадлежит.
Событие OnCalcFields возникает всякий раз, когда курсор (указатель записи) перемещается в НД от записи к записи (например, после выполнения методов Next, Last и т. д. или при движении по записям в TDBGrid вручную. Это событие возникает и при инициализации НД (после открытия), а также после фильтрации записей в НД.
Если свойство AutoCalcFields набора данных содержит True, событие OnCalcFields наступает также и при модификации значений невычисляемых полей в режимах dslnsert и dsEdit данного НД или НД, с ним связанного.
Обработчик события OnCalcFields содержит реализацию алгоритма определения значения вычисляемого поля или группы полей. В этом обработчике значение может быть присвоено только вычисляемому полю и не может быть присвоено полю, определенному в структуре таблицы БД.
3.2.4. Поля выбора
Кроме обычных полей и вычисляемых полей, в Delphi имеется возможность созда¬ния полей выбора данных (lookup-полей).
Поле выбора данных одного НД содержит значения из другого набора данных, свя¬занного по ключу с НД, к которому принадлежит это поле. Будем называть первый НД родительским, а второй дочерним. Сразу же уточним, что поля выбора и специализи¬рованные компоненты выбора TDBLookupListBox, TDBLookupComboBox используют схожий механизм, основанный на реляционной связи двух НД, однако компоненты выбора не создают новых полей ни в одном наборе данных.
Для определения поля выбора данных, необходимо создать новое поле в редакторе полей и выбрать переключатель Lookup.
После выбора переключателя становятся доступными элементы группы Lookup definition, с помощью которых устанавливаются параметры связи наборов данных:
• DataSet Определяет имя родительского НД.
• Key Fields Определяет список ключевых полей родительского НД. По этим полям построен индекс для связи родительского НД с дочерним. Если в индексе имеется несколько полей, они разделяются точками с запятыми.
• Lookup Fields Определяет список ключевых полей дочернего НД. По этим полям постро¬ен индекс для связи дочернего НД с родительским. Если в индексе имеется несколько полей, они разделяются точками с запятыми.
• Result Field Поле дочернего НД, возвращаемое в качестве результата. Необходимо следить, чтобы типы вновь создаваемого поля и поля результата совпадали.
Перечисленным элементам окна New Field редактора полей соответствуют свойства LookupDataSet, KeyFields, LookupKeyFields и LookupResultField класса Tfield.
Поля выбора могут использоваться для показа дополнительной информации из дочернего НД при навигации по родительскому набору, если наборы связаны отношением один-к-одному, или для выбора значения записи дочернего НД из списка всех возможных значений родительского набора при связи один-ко-многим.
3.2.5.Поля TXXXFIELD
3.2.5.1. Строковые поля
Поле TStringField предназначено для хранения строк длиной до 255 символов.
Свойство
property Transliterate: Boolean
указывает, следует ли производить преобразование символов в кодировку ANSI при чтении строк из реальной ТБД и при записи строк обратно в ТБД в том случае, если строки в ТБД хранятся не в ANSI -кодировке или содержат расширенные ANSI символы. Когда в свойстве установлено значение True, для преобразования используются функции AnsiToNative и Native ToAnsi.
Для работы с TStringField предназначены компоненты TDBLabel и TDBEdit. Поле TMemoField предназначено для хранения множества строк неопределенной длины. Специфичные свойства TStringField:
• property BlobSize: Integer; - содержит размер поля в байтах.
• property Transliterate: Boolean; - смотрите описание свойства TStringField.Transliterate.
Специфичные методы:
procedure Clear; - очищает поле.
procedure LoadFromFile(const FileName: Strings); - загружает содержимое поля из файла.
procedure LoadFromStream (Stream: TStream) ; - загружает содержимое поля из потока.
procedure SaveToFile(const FileName: String); - сохраняет содержимое поля в файле.
procedure SaveToStream(Stream: TStream); - сохраняет содержимое поля в потоке.
Для работы с мемо-полями используются компоненты TDBMemo и TDBRichEdit.
3.2.5.2. Целочисленные поля
Целочисленные поля применяются для хранения целых чисел различной длины:
TIntegerField от -2 147 483 648 до +2 147 483 647 TSmallintField от -32 768 до +32 767
TWordField от О до 65 535
Свойства
property MaxValue: Longint
и
property MinValue: Longint
определяют максимальное и минимальное значение поля. По умолчанию содержат 0, что означает отсутствие ограничений. Если MaxValue > MinValue и при вводе в поле вводимое значение вышло из указанного диапазона, возникает исключительная ситуация. Свойство
property DisplayFormat: String
осуществляет форматирование данных перед их показом во всех режимах, кроме режима редактирования. Для него форматирование осуществляет свойство:
property EditFormat: String.
Оба свойства унаследованы полями от общего родителя TNumericField. Для описания формата в них могут использоваться следующие символы - cпецификаторы форматирования чисел:
• 0 - Определяет поле для цифры. Если в данной позиции форматируемое число имеет значащую цифру, она выводится, если нет - выводится 0.
• # - Определяет поле для цифры. Если в данной позиции форматируемое число имеет значащую цифру, она выводится, если нет - ничего не выводится.
• . - Поле для разделителя целой и дробной частей числа. Если в строке больше одной точки, вторая и все следующие точки игнорируются.
• , - Каждая группа из трех цифр будет отделяться от соседней слева цифры разделите-лем тысяч. Положение и количество запятых в строке формата не имеет значения.
E+, e+, E-, e- - Признак представления числа в научном формате. В этом случае число представляется мантиссой и десятичным порядком, между которыми стоит символ Е. Спецификаторы Е+ и е+ предписывают выводить знак + перед неотрицательным десятичным порядком, при использовании Е- и е- знак + перед порядком не выводится.
• ; - Разделитель спецификаторов формата для положительного, отрицательного и нулевого числа.
Любые другие символы строки Format, а также заключенные в апострофы или кавычки специальные символы-спецификаторы помещаются в выходную строку без преобразования.
С помощью символа «;» можно задавать различные формы представления положительного, отрицательного и нулевого числа. При этом набор спецификаторов без «;» относится ко всем числам. Если используется один символ «;», то спецификаторы слева от него применяются для форматирования положительных чисел, справа -отрицательных, а вывод нулей подавляется.
При использовании двух символов «;» первый набор - для положительных, второй - для отрицательных и третий - для нулевых чисел.
Например, спецификаторы '#;Нуль' для Value = -1 выведут Нуль,
а для Value = 0 ничего не выведут, в то время как спецификаторы
' #; 0 0; Нуль ' для Value ==-1 выведут 01,
а для Value = 0 - строку Нуль .
Спецификаторы ' #;; Нуль ' для Value =-1 выведут -1, т. к. в этом случае спецификатор для отрицательных чисел не задан и для их вывода будет использован спецификатор положительных чисел, в то время как спецификаторы ' #; ; Нуль ' подавляют вывод отрицательных чисел.
3.2.5.3. Вещественные поля
Вещественные поля используются для хранения вещественных чисел:
• TFloatField - числа от 5, 0*10 Е-324 до 1, 7*104Е+308 с точностью 15-16 цифр.
• TCurrencyField - аналогично TFloatField, но в денежном формате.
• TBCDField - вещественные десятичные числа в двоично-десятичном виде с фиксированным количеством разрядов после точки;
Delphi не поддерживает -тип BCD, поэтому при работе с полем используется тип Currency, что определяет до 20 значащих цифр и до 4 цифр после запятой; применяется только в таблицах Paradox.
Свойство
property Precision: Integer;
определяет количество знаков после десятичной точки (по умолчанию 15). Это свойство не может иметь значение меньше 2.
Свойства MaxValue, Min Value, DisplayFormat и EditFormat аналогичны по назначению таким же свойствам целочисленных полей.
3.2.5.4. Логические поля
Поля TBooleanField предназначены для хранения логических значении. Их свойство
property DisplayValues: String
определяет формат отображения данных, например: True; False, Да;Нет и т. п.
Если свойство не определено, значения отображаются как True и False, в противном случае часть строки до первого символа «;» используется для представления значения Истина, а остальная часть - для представления значения Ложь.
3.2.5.5. Поля даты и времени
• TDateTime - Содержит значения даты и времени в формате TDateTime.
• TDateField - Содержит значения даты в формате TDate.
• TTimeField - Содержит значения времени в формате TTime.
Их свойство
property DisplayValues: String
предназначено для форматирования значений, отображаемых в визуальных компонен¬тах. Строка Display Values может содержать такие символы-спецификаторы:
• с - Отображает сначала дату в формате дд.мм.гг, а затем через пробел время в формате чч.мм.сс.
• d - Отображает день без ведущего нуля.
• dd - Отображает день с ведущим нулем.
• dddd - Отображает день недели: воскресенье (для нерусифицированной версии Windows - sunday).
• ddddd - Отображает дату в формате дд.мм.гг.
• dddddd - Отображает дату в формате день Месяц год.
• m - Отображает число месяца без ведущего нуля.
• mm - Отображает число месяца с ведущим нулем.
• mmm - Отображает сокращенное название месяца: июн.
• mmmm - Отображает полное название месяца.
• у или уу - Отображает две последние цифры года.
• ууу или уууу - Отображает все цифры года.
• h - Отображает час без ведущего нуля.
• hh - Отображает час с ведущим нулем.
• п - Отображает минуты без ведущего нуля.
• пп- Отображает минуты с ведущим нулем.
• S -Отображает секунды без ведущего нуля.
• SS- Отображает секунды с ведущим нулем.
• t -Отображает время в формате чч:мм.
• tt -Отображает время в формате чч:мм.
• am/pm -Отображает время в 12-часовом формате (am - до полудня, рт - после полудня).
• ampm -Отображает время в 12-часовом формате, но без указания до/после полудня.
• a/p -Отображает время в 12-часовом формате (а - до полудня, р - после полуд¬ня).
• / - Отображает используемый в Windows разделитель даты.
• : -Отображает используемый в Windows разделитель времени.