Реализация доступа к базам данных в среде DELPHI
Класс TDATASOURCE
Класс TDataSource реализует связь между компонентами - наборами данных и элементами управления, используемыми для отображения данных.
При построении отношений между таблицами "родительская-дочерняя" компонент "источник данных" служит для связывания наборов данных, указывая родительский набор данных.
Класс TDataSource содержит набор свойств и методов, используемых для доступа к набору данных, включая следующие:
- AutoEdit - свойство, определяющее, будет ли автоматически вызываться метод Edit набора данных при получении фокуса элементом управления, ассоциированным с источником данных;
-
DataSet - свойство, указывающее используемый набор данных.
Изменяя значение свойства DataSet во время выполнения, можно эффективно переключаться на работу с различными наборами данных, отображая разные наборы данных в одних и тех же элементах управления.
Например: DataSource.DataSet := Table1;.
- Enabled - свойство, определяющее, будет ли элемент управления отображать ассоциированные с ним данные, или будет отображаться пустым;
-
State - свойство, позволяющее определить состояние используемого набора данных.
Например:
if DataSource1.Dataset <> nil then //Кнопка доступна только в том случае, если набор //данных находится в состоянии редактирования //или вставки новой записи BtnPost1.Enabled := DataSource1.State in [dsEdit, dsInsert];
Класс TTABLE
Компонент типа TTable используется для доступа к базам данных посредством определения источника данных DSN и имени таблицы базы данных. При этом допускается выбор всех полей таблицы или только части полей, а также задание фильтра, определяющего, какие строки таблицы будут доступны.
Компоненты типа TTable могут использовать все свойства и методы, наследуемые от класса TDataSet, а также свойства и методы класса TTable для набора данных, включая следующие:
- DatabaseName - свойство, определяющее имя источника данных DSN;
- CanModify - свойство, определяющее, может ли приложение выполнять вставку, редактирование и удаление записей в таблице;
- DefaultIndex - свойство, определяющее, должны ли данные в таблице быть упорядочены при ее открытии. Если значение свойства равно True (по умолчанию), то выполняется упорядочивание по первичному ключу или уникальному индексу;
- IndexName - свойство, позволяющее определить вторичный индекс, используемый для сортировки открываемого набора данных;
- Exclusive - свойство, позволяющее установить исключительный режим доступа к таблице (значение свойства должно быть определено до открытия таблицы);
- MasterSource - свойство, определяющее имя компонента "источник данных" родительской таблицы для установления отношения между таблицами "родительская-дочерняя";
- MasterFields - свойство, определяющее одно или несколько полей из родительской таблицы, служащих для связи с соответствующими полями данной дочерней таблицы (Это задает отношение между родительской и дочерней таблицами. Поля в списке разделяются точкой с запятой);
- ReadOnly - свойство, позволяющее установить для таблицы режим доступа "только для чтения";
- TableName - свойство, указывающее используемую таблицу базы данных;
- RecNo - свойство, указывающее номер текущей записи набора данных;
- FindKey - метод, выполняющий поиск значения или значений, перечисленных в списке, для ключевого поля;
-
FindNearest - метод, перемещающий курсор на запись, содержащую значение, наиболее близкое к указанному значению ключевого поля (поиск может выполняться как по одному значению, так и по нескольким, если используется составной индекс).
Например:
{Изменение значения в компоненте Edit1 автоматически перемещает позицию курсора в наборе данных Table1} procedure TForm1.FormActivate(Sender: TObject); begin Table1.DatabaseName := 'DBDemos'; Table1.TableName := 'Customer.db'; Table1.Active := True; Table1.IndexName := 'ByCompany'; {Ключевое поле} end; {Обработчик события OnChange (изменение значения) для компонента Edit1} procedure TForm1.Edit1Change(Sender: TObject); begin Table1.FindNearest([Edit1.Text]); {Выполнение поиска} end;
-
Locate - метод, используемый для поиска первого вхождения значения указанного поля или набора полей (если запись найдена, то она становится текущей).
Например:
with Table1 do Locate('F1;F2', VarArrayOf(['ABC', 123]), [loPartialKey]);