Свойства индексов доступны для редактирования при выборе индекса в окне Editing Table1.IndexDefs, которое появляется при выборе свойства IndexDefsкомпонента Table.
Направление сортировки можно задать для поля с помощью значения свойства Options: ixDescending=true – сортировка по убыванию значений, = false –по возрастанию значений.
Например, выполнение сортировки значений полей с использованием компонента RadioGroup.
В приложении можно выполнять создание, удаление, переименование таблиц, а также установку доступа к таблицам.
Для программирования этих действий в приложении необходимо использовать следующие свойства набора данных Table.
Свойства:
DatabaseName–путь к файлам базы данных (папка)
TableType – тип таблицы:
ttDefault – (по умолчанию) формат определяется по расширению названия файла:
DB или отсутствует – таблица Paradox;
DBF – таблица dBase;
TXT – таблица ASCII;
ttParadox – таблица Paradox;
ttDBase – таблица dBase;
ttFoxPro – таблица FoxPro;
ttASCII – таблица ASCII (текстовый файл, разбитый на колонки).
FieldDefs –описание полей,
IndexDefs – описание индексов,
TableName – название таблицы, т.е. имя физического файла таблицы, который находится в папке, указанной в свойстве DatabaseName.
IndexName – название индекса;
IndexFieldNames – список столбцов, используемых в индексе таблицы.
Для свойства FieldDefs определены следующие методы:
Clear – очистка значения свойства,
Add(const Name:String; DataType:TFieldType; Size: Word; Required: Boolean) – добавляет к массиву полей описание нового поля, где
Name –название поля,
DataType – тип поля, который выбирается из списка: ftUnknown, ftString, ftSmallint, ftInteger, ftWord, ftBoolean, ftFloat, ftCurrency и т.д.
Size –размер поля или 0 (ноль),
Required – определяет, должно ли поле обязательно содержать значение (true) или может быть пустым (false).
Методы:
procedure CreateTable; - на диске создается пустая (без записей) таблица. Если таблица существует, то метод перезаписывает таблицу. Перед вызовом метода необходимо определить следующие свойства набора данных, причем набор данных должен быть закрыт:
- DatabaseName –путь к файлам базы данных (каталог),
- TableType –тип таблицы,
- FieldDefs – описание полей,
- IndexDefs– описание индексов,
- TableName –название таблицы.
procedure DeleteTable; -выполняется физическое удаление всех файлов таблицы, имя которой и путь определены в свойствах DatabaseNameи TableNameнабора данных.
procedure RenameTable(const NewTableName:String) – выполняет переименование всех файлов, относящихся к таблице. Здесь NewTableName – новое название таблицы.
Пример. Создание таблицы на основе набора данных Table.
Уровень доступа к базе данных определяет возможность записи и чтения данных в таблицу в случае одновременного обращения к ней из различных приложений. Такой режим набора данных Tableобеспечивается методами:
LockTable(LockTable:TLockTable) – устанавливается блокировка от вмешательства других приложений. Параметры
ltReadLock – таблица переводится в режим монопольного доступа; Например,
Table1.LockTable(ltReadLock);
ltWriteLock – другим пользователям запрещено записывать данные в таблицу, но разрешено считывать имеющиеся данные. Например,
Table1.LockTable(ltWriteLock);
UnLockTable(LockTable:TLockTable) – снимается блокировка таблицы. Например,
Table1.UnlockTable(ltReadLock);
Table1.UnlockTable(ltWriteLock).
Фильтрация – это задание ограничений для записей, которые отбираются в набор данных. Система Delphi позволяет выполнить фильтрацию записей по выражению и по диапазону. Для реализации фильтрации по выражению используются следующие свойства компонента Table:
Filter: String; - определяет текущий фильтр (условие) для набора данных. Содержит определенные ограничения на значения полей.
При записи условий фильтрации можно использовать:
имена полей таблицы, кроме имен вычисляемых полей !!
Filtered: Boolean – определяет, будут ли доступны все записи набора данных (false) или только отфильтрованные (true).
Например,
{В поле Edit1 задается условие фильтрации, а по кнопке Button1 задается режим фильтрации}
procedure Tform1.Button1Click (Sender:TObject);
begin
Table1.Filter:=Edit1.Text;
Table1.Filtered:=True;
end;
Примеры выражения, формируемого в поле Edit1:
1) T_Kol_vo<21 AND T_Kol_vo>10
2) T_Nazv='с*'
3) P_Date>'31.12.2006' OR P_Kol_vo<50
FilterOptions: TFilterOptions- параметры фильтрации, свойство множественного типа и может принимать комбинации двух значений:
foCaseInsensitive – регистр букв не учитывается,
foNoPartialCompare – выполняется проверка на полное соответствие содержимого поля и значения, заданного для поиска. При выключенном значении для фильтра Tovar=’K*’ будут отобраны все записи, для которых в поле Tovar первым символом является символ K.
По умолчанию обе опции выключены.
Например, DM2.TbTovar.FilterOptions:=[foCaseInsensitive];
Пример. Формирование выражения из значений различных компонентов для текстового и числового поля:
где ComboBox1.Text- имя поля, Edit1.Text – отношение, Edit2.Text – значение.
Пример 1. Фильтрация по выражению в таблице Sotrudniki. (Alias:Sotrudniki)
procedure TForm1.FormCreate(Sender: TObject);
begin
TbSotrudniki.Filter:='';
TbSotrudniki.FilterOptions:=[foCaseInsensitive];
TbSotrudniki.Filtered:=true;
end;
procedure TForm1.btnFilterClick(Sender: TObject);
begin
// Фильтровать по дате рождения
if rbBirthday.Checked then TbSotrudniki.Filter:='S_Birthday>'''+
DateToStr(dtpbirthdaymin.Date)+''' AND S_Birthday<'''+
Datetostr(dtpbirthdaymax.Date)+'''';
// Фильтровать по выражению
if rbexpression.Checked then TbSotrudniki.Filter:=Edexpression.Text;
// Фильтрация отсутствует
if rbnofilter.Checked then begin
TbSotrudniki.Filter:='';
Edexpression.Text:='';
end;
end;