Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция 7.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.04 Mб
Скачать

Var s: string;

X: real;

begin

// Доступ к полю по его имени в наборе данных

s:=Tablel.FieldByName('Salary').Value;

x:=Tablel.FieldByName('Salary').Value;

Label1.Caption:=s;

Label2.Caption:=FloatToStr(x);

// Доступ к полю как к отдельному компоненту

х:=TablelSalary.Value;

Label3.Caption:=FloatToStr(x);

// Поле вещественного типа,

// в связи с чем следующий оператор присваивания недопустим

// s:=TablelSalary.Value;

end;

Здесь чтение значения поля Salary текущей записи набора данных Tablel вы­полняется несколькими способами. При доступе к полю по имени в наборе данных значение вещественного поля Salary можно читать и использовать и как строковое, и как вещественное значение. При доступе к полю как к отдельному компоненту тип переменной, в данном случае х, должен соответствовать типу поля.

Замечание

Доступ к полю по имени объекта типа TField, например, Tableisalary, возмо­жен только для статических полей, которые существуют на этапе разработки приложения. Попытка использовать имя объекта динамического поля приводит к ошибке при компиляции, т. к. объект поля еще не создан.

Поскольку при доступе к полю с помощью свойства Value программист должен обеспечивать преобразование и согласование типов значений, то часто более удобно использовать варианты свойства AsXXX:

  • AsVariant типа Variant;

  • AsString типа String;

  • As Integer типа Longint;

  • AsFloat типа Double;

  • AsCurrency типа Currency;

  • AsBoolean типа Boolean;

  • AsDateTime типа TdateTime.

При использовании любого из этих свойств выполняется автоматическое преоб­разование типа значения поля к типу, соответствующему названию свойства. При этом преобразование должно быть допустимо, в противном случае возни­кает ошибка компиляции по несоответствию типов, например, при попытке прочитать логическое значение как целочисленное.

Приведем теперь пример, где доступ к значению поля происходит с помощью свойств AsXXX:

procedure TForml.Button2Click(Sender: TObject);

Var s: string;

X: real;

begin

// Доступ к полю по его имени в наборе данных

s:=Tablel.FieldByName('Salary').AsString;

x:=Tablel.FieldByName('Salary').AsFloat;

Label1.Caption:=s; Label2.Caption:=FloatToStr(x) ;

// Доступ к полю как к отдельному компоненту

s:=TablelSalary.AsString;

х:=TablelSalary.AsFloat;

Label3.Caption:=s;

Label4.Caption:=FloatToStr(x);

end;

Как и в предыдущем примере, чтение значения поля Salary осуществляется не­сколькими способами. Доступ к полю выполняется по имени поля и по имени объекта поля, а значение поля интерпретируется как строковое или как вещест­венное.

Замечание

Для того чтобы записать значение в поле, оно должно допускать модифика­цию, а набор данных должен находиться в соответствующем режиме, напри­мер, редактирования или вставки.

При необходимости программист может запретить модификацию поля, а также скрыть его, используя свойства ReadOnly и Visible типа Boolean. Сама возмож­ность модификации данных в отдельном поле определяется значением свойства CanModify типа Boolean. Напомним, что свойства ReadOnly и CanModify есть также и у набора данных: они определяют возможность модификации набора данных (всех его полей) в целом.

Замечание

Даже если набор данных является модифицируемым и его свойство CanModify имеет значение True, для отдельных полей этого набора редактирование мо­жет быть запрещено, и любая попытка изменить значение такого поля вызовет исключительную ситуацию.

Если поле является невидимым (свойство Visible установлено в False), но разрешено для редактирования (свойство ReadOnly стоит в False), то можно изменить значения этого поля программно.

Рассмотрим управление видимостью поля и возможностью его модификации на примере:

Tablel.FieldByName('Number').ReadOnly:=true;

Tablel.FieldByName('Salary').Visible:=false;

Здесь для поля Number запрещаются любые изменения, а поле salary скрывает­ся, однако для него по-прежнему допускаются чтение и изменение значения.

Для полей, имеющих типы TBLOBField (BLOB-объект), TGraphicField (графи­ческое изображение) и TMemoField (текст), доступ к их содержимому выполняет­ся обычными для объектов данного типа способами. Например, для загрузки содержимого из файла можно использовать метод LoadFromFile.

Проверка типа и значения поля

При выполнении программы можно выяснить тип данных конкретного поля. Это удобно делать в случае, когда, например, типы данных полей таблиц БД заранее неизвестны.

Тип данных поля таблицы определяет свойство DataType типа TFieldType, при­нимающее следующие значения:

ftUnknown — тип неизвестен или неопределен;

ftString — короткая строка длиной не более 255 символов;

ftSmallInt — короткое целое число;

ftInteger — целое число;

ftWord — целое число без знака;

ftBoolean — логическое значение;

ftFloat — вещественное число;

ftCurrency — денежное значение;

ftBCD — число в формате BCD (двоично-десятичный формат);

ftDate — дата;

ftTime — время;

ftDateTime — дата и время;

ftBytes — байтовое значение фиксированной длины;

ftVarBytes — байтовое значение переменной длины;

ftAutoInc — автоинкрементное значение;

ftBlob — BLOB-объект (Binary Large Object — большой двоичный объект);

ftMemo — текст (Memo);

ftGraphic — графический объект;

ftFmtMemo — форматированный текст (Memo);

ftParadoxoie — поле OLE для таблицы Paradox;

ftDBaseOle — поле OLE для таблицы dBASE;

f tTypedBinary — типированное двоичное значение;

ftCursor — курсор для хранимой процедуры Oracle;

ftFixedChar — фиксированное количество символов;

ftWideString — строка;

ftLargeInt — длинное целое число;

ftADT — значение абстрактного типа;

ftArray — массив;

ftReference — REF-поле;

ftDataSet — DataSet-поле.

Программист с помощью специальных свойств может задать ограничения для вводимых в поля значений, а также проверить введенные значения.

Набор символов, допускаемых при вводе значений поля, зависит от типа дан­ных поля:

  • ftBoolean — все символы;

  • ftSmallInt — цифры 0 . . . 9, знаки + и -;

  • ftWord — цифры 0 . . . 9, знаки + и -;

  • ftAutoInc — цифры 0 . . . 9, знаки + и -;

  • ftDate — все символы;

  • ftInteger — цифры 0 . . . 9, знаки + и -;

  • ftTime — все символы;

  • ftCurrency — цифры 0 . . . 9, знаки + и -, символы E или е, разделитель раз­рядов целой и дробной части;

  • ftDateTiine — все символы;

  • ftFloat — цифры 0 . . . 9, знаки + и -, символы E или е, разделитель разрядов целой и дробной части;

  • ftBCD — цифры 0 . . . 9, знаки + и -, символы E или е, разделитель разрядов целой и дробной части;

  • ftString, ftVarBytes, ftBytes, ftBlob, ftDBaseOle, ftFmtMemo, ftGraphic, ftMemo, ftParadoxOle, ftTypedBinary, ftUnknown И ftCursor — все символы.

Отметим, что разделитель разрядов целой и дробной части числа (десятичный разделитель) зависит от установок Windows, выполненных через панель управ­ления.

Набор допустимых для поля символов содержит свойство validChars типа TFieldChars, который описан как множество символов:

type TFieldChars = set of Char;

Для проверки, разрешен ли символ для ввода в качестве значения поля, удобно использовать метод IsValidChar (InputChar: Char): Boolean. Он возвращает зна­чение True, если заданный параметром InputChar символ является для данного поля допустимым, и False — если символ не допускается.

Вот как осуществляется проверка допустимости символа в программе: