Основные отличия SQL Explorer от BDE Administrator
1) Если открыть объект MYBase в SQL Explorer, щелкнув на значке «+» перед его именем, на правой панели SQL Explorer будут показаны все таблицы БД, а значок базы помечается зелёной рамкой, указывающей что БД MyBase открыта.
2) В утилите SQL Explorer можно вводить текст SQL запросов на вкладке Enter SQL.
№35. Основные свойства, методы и события класса TField.
Обращаться к полям таблицы БД позволяет класс TFIELD. Данный класс служит как бы оболочкой для физического поля записи, дополняя его набором свойств и методов, необходимых разработчику. На основе класса TField создаются псевдополя: вычисляемые поля, поля соответствия и т.д.
Тип TField в программе реально не присутствует, вместо него используется множество его наследников, соответствующих конкретным типам полей и записей (например, TDateField, TGraphicField и т.д.)
Основные свойства класса TField.
Свойства | Назначения |
AsXXXX | Группа свойства этого вида приводит значения поля к нужному типу. Вместо XXXX в названии поля могут использоваться: Boolean, Variant, Currency, Float, Integer, String, BCD – приведение к типу двоично-десятичных данных. |
Calculated | Имеет значение True, если значение поля вычисляется в обработчике события OnCalcFields. |
CanModify | Имеет значение True, если значение поля можно редактировать |
DataSet | Набор данных, к котрому принадлежит поле |
DataSize | Содержит размер данных в байтах |
DataType | Тип данных поля |
DefaultExpression | Выражение SQL, которое определяет значение в поле по умолчанию, если значение не выносится в это поле явно |
EditMask | Определяет маску, которая будет использоваться для фильтрации и форматирования вводимого значения |
FieldKind | Определяет вид поля (обычное, вычисляемое, внутреннее вычисляемое, агрегированное, поле соответствия) |
FieldName | Название поля физической таблицы БД |
HasConstraints | Имеет значение True, если поле включает ограничение на допустимое значение |
Required | Имеет значение True, если поле обязано содержать значение |
Size | Текущая длина записи в полях с переменной длиной записи |
Text | Текст, которым отображается значение поля в режиме редактирования. В остальных режимах поле отображается содержимым свойства DisplayText |
Value | Содержит текущее значение поля |
Visible | Разрешает или запрещает показ поля в визуальных компонентах |
Основные методы класса TField
Метод | Назначение |
Procedure AssignValue (const Value: TVarRec); | Преобразует вариант Value с помощью свойства Asxxxx и помещает полученное значение в Value |
Procedure Clear; | Очищает значение поля |
Function IsValidChar (InputChar: Char):Boolean; | Возвращает True, если символ InputChar может присутствовать в текстовом представлении значения поля |
Основные события класса TField
Событие | Условие генерации |
OnChange | Данные в поле были изменены |
OnGetText | Произошел запрос значений свойств Text и DisplayText |
OnSetText | Свойство Text получает новое значение |
OnValidate | Возникает после изменения значения поля до записи в буфер. Обработчик этого события должен проверять правильность введенных данных. |
№36 Типы данных поля, виды полей. Объекты для реальных полей
В свойстве DataType может быть указан один из различных типов данных ( ftString, ftFloat, ftBoolean, FtInteger, Ftcurrence – денежный, FtTime, ftDAte, ftAutoInc –автоинкрементное поле, ftBlob –двоичное поле переменной длины, FtMemo многострочный текст, FtArray –массив, FtReference – ссылочный текст, FtDataset- набор данных.
Виды полей
1) fkData – обычное поле, содержит данные.
2) fkCalculated – вычисляемое поле.
3) fkLookUp – подстановочное поле(поле соответствия)
4) fkInternalcalс – внутреннее вычисляемое поле (его значение заносится в БД _
5) fkAggregate – агрегатное поле (предназначено для выполнения вычислений со значениями полей набора данных с использованием агрегатных функций SQL
Объекты для реальных полей
Для удобства работы с конкретным полем можно создать объект-поле (постоянное поле) класса TField или одного из его специализированных потомков – TdateField, TStringField.
Объек-полесоздается на топе создания программы с помощью редактора полей. Если определен объект-поле, то получить доступ к полю можно по имени этого объекта.Радактор полей присваивает объектам-полям имнеа путем сцеплнеия имени компонента Table и имени поля.
Пример: добавим в модуль данных компоненты Table и DataSource
Type
Zakaz: Ttable;
SourceZakaz : TAutoIncField;
Zakazid_zak: TautoIncFiekld
ZakazDate_zak: TDateField;
Когда выбрана толица или компонетн набор данных (TTable) для вызова редактора полей необходимо выбрать в контекстном меню fieldsEditor в появившемся списке постоянных полей, первоначально пустом, в контекстном меню можно выбрать команду Add All Fields для добавления всех полей, или команду Add Fields для добвления некоторых. В дальнейшем поля можно удалять из списка(физически они остаются в таблице), возраать обатно,менять поядое следования, настраивать свойства и т.д.
Сортировка БД
А)стр 18 пдф файла БД
DM.Magazin.AddIndex (‘FS’, ‘Nommang’, [ixunique,ixdescending]); по убыванию
Б) DM.Magazin.IndexFieldNames:= ‘Nommang’;) по возратстанию
DM.tovar.indexname := ‘nameT’;
DM.magazin.addindex(‘FS1’,’director’, [ixdescending]
Вместо свойства indexname используем свойство indexfieldnames
fffff
№37 Обращение к значению поля. Создание вычитаемых полей
К занчению поля можно обратится при помощи свойств Value и ASXXXX класса TField или его потомков:
Property Value: Variant;
Proprety asCurrency : Currency;
Пример, т.к. заказ id заказа поле TАutoIncField, то для приведения его к типу String необходимо воспользоваться свойством AsString:
Edit////
Естественно, что тип поля должен быть совместим с типом данных к которым приводится значения поля. Например если ZakazDate поле TDаteField, то попытка привести его к несовместному типe Integer приведет к ошибке.
Если для таблицы БД не задан ни один объект-поле, то получить доступ к значению полей этой таблицы можно с помощью их метода FieldbyName:
Function FieldByName (const FieldName : String): TField;
Так же получить доступ к значению поля можно через его свойства Fields и FieldValues:
Property Fields[index]: TField;
Property FieldValues [имя_поля]: Variant;
Нумерация полей в свойстве Fields начинается с 0.
Пример. Следующие обращения идентичны
Zakaz.FieldByName (‘Kod_pok’).AsInteger:=3;
Zakaz[‘kod_pok’]:=3;
Zakaz.FieldValues[‘kod_pok’]:=3;
Zakaz.Fields[1].AsInteger:=3;
Cdkqcndf FieldValues обладает двумя особенностями: оно имеет значение вариантного типа. 2 допускает обращение со списком полей, это позволяет единственным операторам обращения к этому свойству прочитать или записать сразу несколько полей текущей записи. Имена полей указываются в общих кавычках через точку с запятой.
Вычисляемые поля - это поля значения, которых берутся не из таблиц БД а рассчитываются на основе уже существующий полей текущей записи.
Путь таблица prodazha имеет поля: kol- количество проданного товара, Cena – стоимость этого товара. Построим вычисляемое поле summa, для этого добавим это поле в список полей таблицы prodazha ( команда NewField в редакторе полей), укажем его тип currency, выберем с помощью переключает FieldType вариант Calculated.
В обработчике события OnCalcField соответствующего компонента Table запишем
ProdazhaSumma.Value:= ProdazhaKol.Value*ProdazhaCaena.Vakue;
В результате таблица prodazha примет вид
Kol | Cena | Summa |
100.00 | 200.00 | |
20.10 | 100.50 | |
50.50 | 202.000 |
№38 проверка правильности введенного в поле значения. Формирование текстового представления поля
Для контроля за правильностью вводимых в поле значений используется событие OnValueDаte и OnSetText объекта поля. Оба события наступают после изменения значения поля, но до его запоминания в таблице.
В обработчике OnValueDate в случае обнаружения неверного значения программа должна предотвратить его запоминание, создав исключительную ситуацию или обратившись к глобальной процедуре Abort.
Например полк Kod_pok не может содержать отрицательных значений, в обработчике события OnValuueDate запишем
If ZakazKod_pok<0 then
Begin
ShoeMessage ( ‘ Код покупателя не может быть отрицательным!’);
Abort;
End;
Отказавшись от запоминания неверного значения в таблице, пользователь не сможет покинуть это поле до тех пор, пока не введет в него правильное значение.
Событие OnSetText можно просто игнорировать неверные значения, и не создавать исключительную ситуацию. В обработчике этого события программа должна присвоить полю новое значение или оставить поле без изменения.
Procedure TDM.zakazkod_pokSetText (Sender : TField; const Text : string);
Begin
If StrtoFloat(text)<0 then
ShowMessage ( ‘ Код покупателя не может быть отрицательным!’)
Else Zakazkod_pok.Vaiue := STrtoFloat ( text);
End;
Для формирования текстового представления поля используется обработчик события OnGetTExt объекта-поля.
Пример:
Пусть поле Sex таблицы заказчики, имеет логический тип. Обработчик выводит текст «муж» или «жен» в зависимости от значения поля.
Procedure TForm.ZakazchikikSexGetText(Sender: TField; var Text:String; DisplayText:Boolean);
Begin
If ZakazchikiSex.Value {=true} then
Text:= ‘Myж’
Else Text:= ‘Жен’;
End;
После деноминации уберем 3 лишних нуля в денежном поле и вставим разделители для удобства чтения длинных сумм.
Procedure TForm.tbNovarObrotGetText(Sender: TField; var Text:String; DisplayText:Boolean);
Begin
Text := Floattostrf(tbTovarOborot.AsFloat/1000, ffNumber,10,2);
End;
Дата добавления: 2017-02-20; просмотров: 638;