Московский государственный университет имени М.В.Ломоносова
Опубликован: 20.12.2005 | Доступ: свободный | Студентов: 3142 / 371 | Оценка: 4.22 / 3.86 | Длительность: 12:03:00
ISBN: 978-5-9556-0068-0
Лекция 12:

Реализация доступа к базам данных в среде 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]);