Работа с таблицами и данными
Локальные базы данных в Delphi
Редактор полей Fields Editor
- DefaultFields : Tboolean
С помощью Редактора полей разработчик может выполнить следующие операции
- создать новое статическое поле;
- удалить статическое поле;
- изменить порядок следования статических полей.
Существует три типа статических полей:
- поле данных, связанное с соответствующим физическим полем таблицы;
- вычисляемое поле, значение которого рассчитывается в обработчике события onCalcFields во время выполнения приложения;
- поле выбора, значение которого можно выбирать из списка, формируемого на основе заданных критериев и правил.
Метод OnCalcFields выполняется при открытии набора данных, при переходе в режим редактирования, при передаче фокуса между компонентами отображения данных или колонок сетки, при удалении записи. Но для этого нужно, чтобы свойство AutoCalcFields набора данных было равно значению True.
Вычисляемые поля нельзя использовать при фильтрации набора данных при помощи метода-обработчика onFilterRecord , т. к. он вызывается до метода-обработчика OnCalcFields , а вычисляемые поля не сохраняются.
Набором данных в Delphi называется группа записей из одной или нескольких таблиц БД, доступная через компоненты Table и Query .
Обращение к полю
- по имени поля при помощи метода FieldByName;
формат: Function FieldByName(const FieldName:string):TField;
Например: Table1.FieldByName(‘Fam’);
- по номеру поля при помощи свойства Fields.
Для обращения к полю по его номеру используется свойство Fields[I:integer]:TField компонентов Table и Query, где i- это номер поля (нумерация начинается с нуля).
Например: Table1.Fields[1] // если поле Fam второе по счету.
Обращение к значению поля
К значению поля можно обратиться через свойства Value или AsXXXX
Свойство
AsBoolean
Тип
Обозначение
Boolean
AsDataTime
AsInteger
служит для приведения к типу Boolean
TDataTime
AsFloat
служит для приведения к типу DataTime
Integer
AsString
служит для приведения к типу LongInt
Double
служит для приведения к типу Real
String
служит для приведения к типу String
Если вы не вызывали редактор полей и не создавали для набора данных ни одного объекта-поля, то значение поля можно получить через свойство FieldByName.
Procedure TForm1.Button1Click(Sender : TObject);
Var N:Integer;
Begin
With Table1 do Begin
IndexFieldNames:=’Tab_n’; // назначаем текущим индексом – индекс по полю Tab_n, т.е. упорядочиваются записи таблицы по полю Tab_n.
Last; // переход на последнюю запись таблицы
N:=FieldByName(’Tab_n’).AsInteger; // считывается последнее значение
Append; // добавляется пустая запись
FieldByName(’Tab_n’).AsInteger:=n+1; // присваивается значение поля Tab_n для новой записи
End; End;
Форматированный ввод и вывод значений поля
Поля набора данных можно форматировать, т.е. выводить в нужном формате, используя свойство DisplayFormat: string ; и вводить по требуемой маске, используя свойство EditMask: string или EditFormat: string.
Маска представляет собой символьную строку. Она состоит из 3-х частей:
- собственно маска;
- символ, определяющий будут ли литералы (символ после указания «\») включаться в форматируемое значение как его часть (если 1 – то будут, если 0 – то не будут);
- символ, используемый в маске для представления пробела.
Все следующие символы будут на верхнем регистре, пока не встретиться Все следующие символы будут на нижнем регистре, пока не встретиться L Регистр не проверяется (остается так, как ввел пользователь) В данной позиции должен быть только символ алфавита A В данной позиции должен быть символ алфавита или цифра a Аналогично «А», но символ может отсутствовать C В позиции обязателен символ 0 В позиции обязателен цифровой символ 9 В позиции должен быть цифровой символ или никакой " width="640"
Символы, которые могут входить в маску ВВОДИМОЙ строки
Символ
Значение
!
Подавляются ведущие пробелы
Все следующие символы будут на верхнем регистре, пока не встретиться
Все следующие символы будут на нижнем регистре, пока не встретиться
L
Регистр не проверяется (остается так, как ввел пользователь)
В данной позиции должен быть только символ алфавита
A
В данной позиции должен быть символ алфавита или цифра
a
Аналогично «А», но символ может отсутствовать
C
В позиции обязателен символ
0
В позиции обязателен цифровой символ
9
В позиции должен быть цифровой символ или никакой
#
В позиции должен быть цифровой символ, плюс или минус или никакой
:
Разделитель часов, минут, секунд для значения типа время
/
Разделитель месяца, дня и года в датах
\
Следующий за ним символ является литералом, т.е. включается в форматируемое значение
_
Заменитель пробела в маске
;
Разделитель частей маски
Примеры:
Пусть Table1.Fields[4].EditMask:=’!\(999\)000\-00\-000;1’;
При введении в поле значения: 0952223344 на экране оно будет представлено в следующем виде: (095)222-33-44.
Пусть Table1.Fields[2].EditFormat:=’##.#’;
При вводе значения 134.52 отобразится в поле как 134.5
Символы, управляющие ВВОДОМ информации (для DisplayFormat)
Спецификатор
Назначение
0
Число. Если незначащий разряд =0, то показывать его
#
Число. Если незначащий разряд =0, то не показывать его
.
Десятичная точка, разделяет целую и дробную часть числа
,
Разделитель тысяч
;
Разделяет положительное, отрицательное и нулевое значение
E
Научный формат действительных чисел
Форматируемые числа: 987345,342 и 0,29
Формат
Выводимое значение 1
Не форматировано
Выводимое значение 2
987345.342
0
987345
0.29
0.00
0
987345.34
#
987345
0.29
#.##
987345.34
#,##0.00
987,345.34
.27
#.###E+00
0.27
9,873E+0.5
2.700E-1
Основные свойства набора данных
Свойство
Тип
RecordCount
Обозначение
integer
RecNo
integer
число записей в наборе данных;
BOF
номер текущей записи;
boolean
EOF
boolean
определяет начало набора данных (если курсор установлен на первую запись набора данных, то BOF=true);
определяет конец набора данных (если курсор установлен на последнюю запись набора данных EOF=true).
0, и к началу НД, если N" width="640"
Методы навигации
Метод
Выполняемые действия
Procedure First
Устанавливает курсор на первую запись НД
Procedure Last
Устанавливает курсор на последнюю запись НД
Procedure Next
Перемещает курсор на следующую запись НД
Procedure Prior
Перемещает курсор на предыдущую запись НД
Function MoveBy (N:integer):integer
Перемещает курсор на N записей к концу НД, если N0, и к началу НД, если N
Замечания:
- При перемещении по записям возникает событие AfterScroll .
- Набор данных – понятие логическое, а не физическое. Порядок следования записей в таблице определяется установленным индексом, обуславливающим сортировку, поэтому первая, последняя и текущая запись (ее номер) зависят от установленного индекса.
Procedure TForm1.Button1Click(sender:Tobject);
Var summ:integer;
Begin
summ:=0;
Table1.First;
While not Table1.eof do
begin
summ:=summ+Table1.
FieldByName(‘Сумма_плат’).AsInteger;
Table1.Next;
end;
Edit1.Text:=’Сумма всех платежей составляет’ + IntToStr(summ);
end ;
Закладки на записях в наборе данных
Метод
Обозначение
function GetBookMark :TBookMark
создает для текущей записи – объект-закладку и возвращает ссылку на него;
procedure GotoBookMark (BookMark:TBookMark)
перемещает курсор на запись, определяемую параметром-закладкой;
procedure FreeBookMark (BookMark:TBookMark)
освобождает системные ресурсы закладки BookMark;
function BookMark Valid (BookMark:TBookMark): Boolean
возвращает значение True, если закладке BookMark назначено значение, и False – если не назначено;
function CompareBookMarks (BookMark1, BookMark2: TBookMark): integer
сравнивает две закладки BookMark1 и BookMark2, и возвращает 0 – если закладки идентичны; 1 – если различаются.
Var MyBookMark : TBookMark;
begin
MyBookMark := Table1.GetBookMark; // создали закладку для текущей записи таблицы
…
If Table1.BookMark Valid (MyBookMark) then Table1.GotoBookMark (MyBookMark); // переход на запись, на которой заложена закладка
…
If Table1.BookMark Valid (MyBookMark) then Table1.FreeBookMark (MyBookMark); // освободили ресурсы, выделенные для закладки
end ;
Метод
Действие
Procedure Edit
Разрешить изменять текущую запись
Procedure Append
Добавить новую запись в конец НД
Procedure Insert
Добавить новую запись перед текущей
Procedure Delete
Удалить текущую запись
Procedure Post
Запомнить изменения текущей записи
Procedure Cancel
Отменить изменения текущей записи
Procedure Refresh
Обновить визуальные компоненты, связанные с НД, путем повторного считывания НД. Метод применяется после изменений, вносимых в НД.
1) Свойство CanModified : boolean набора данных определяет, может ли набор данных переводиться в состояние добавления или изменения записей: если CanModified = True, то может; если CanModified = false, то не может.
Если свойство НД ReadOnly = true, то CanModified автоматечески устанавливается в false.
2) Набор данных Query можно корректировать только в том случае, если он сформирован из одной таблицы БД и его свойство RequestLive =true. (если это свойство имеет значение true и синтаксис запроса таков, что его результат может быть модифицируем, пользователь может редактировать данные с сохранением их в базе данных. Если RequestLive имеет значение false, результат запроса возвращается в состоянии read-only).
Сортировка базы данных - это упорядочение записей по значениям одного из полей.
По возрастанию:
- числа - от наименьшего отрицательного до наибольшего положительного числа;
- текст - в алфавитном порядке (числа, знаки, латинский алфавит, русский алфавит);
- дата и время - в хронологическом порядке.
Для сортировки в свойство Sort помещают список полей сортировки, разделенных запятыми. Каждое поле может дополнительно снабжаться признаками ascending ( ASC ) или descending ( DESC ) для указания соответственно восходящего или нисходящего порядка сортировки.
Пример:
Table1.Sort := 'Name ASC, Date DESC’;
Фильтрация – это отбор записей по установленному критерию.
Фильтрация может осуществляться:
- по выражению;
- по диапазону.
Использование свойств Filter и Filtered
Условие, по которому выполняется фильтрация, записывается:
- в обработчике события OnFilterRecord ;
- или как строковое значение в свойстве Filter : String.
Элементы фильтра
- имена полей таблиц (если есть пробелы или русские буквы нужны []);
- операции сравнения (, =, , =);
- логические операции (and, or, not);
- арифметические операции (+, -, *, /);
- круглые скобки.
Параметры фильтрации задаются с помощью свойства FilterOptions : TFilterOptions:
- foCaseInsensitive – регистр букв не учитывается;
- foNoPartialCompare – выполняется проверка на полное соответствие содержимого поля и значения, заданного для поиска.
=5) and (OkladTable1.Filtered:=true; " width="640"
Пример: Требуется отобрать сотрудников, проработавших не менее 5 лет и имеющих оклад меньше 400 рублей (оклады хранятся в поле с именем Oklad, стаж работы – в поле Staj):
Table1.Filter:=’(Staj=5) and (Oklad
Table1.Filtered:=true;

Презентация "Локальные базы данных в Delphi" (106.14 KB)

