Delphi World - Динамически создаваемые псевдонимы
Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Динамически создаваемые псевдонимы

Использование псевдонима для доступа к базе данных обеспечивает независимость программы от размещения данных в системе, позволяет размещать программу работы с данными и базу данных на разных дисках компьютера, в том числе и на сетевом. Вместе с тем, для простых баз данных типичным решением является размещение базы данных в отдельном подкаталоге того каталога, в котором находится программа работы с базой данных. Таким образом, программа работы с базой данных всегда "знает", где находятся данные. При таком подходе можно отказаться от создания псевдонима при помощи BDE Administrator и возложить задачу создания псевдонима на программу работы с базой данных. Причем, псевдоним будет создаваться автоматически во время запуска программы и уничтожаться во время завершения ее работы. Очевидно, что такой подход облегчает администрирование базы данных.

В качестве иллюстрации сказанного в листинге приведен вариант программы работы с базой данных "Школа", которая для доступа к базе данных использует динамически создаваемый псевдоним.

unit school3_;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, DBGrids, Db, DBTables, ExtCtrls, DBCtrls, StdCtrls;

type
  TForm1 = class(TForm)
    Table1: TTable; // таблица (вся база данных)
    Query1: TQuery; // запрос (записи БД, удовлетворяющие критерию выбора)
    DataSource1: TDataSource; // источник данных - таблица или запрос
    DBGrid1: TDBGrid; // таблица для отображения БД или результата выполнения запроса
    DBNavigator1: TDBNavigator;
    DBText1: TDBText;
    Button1: TButton; // кнопка запрос
    Button2: TButton; // кнопка Все записи
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormActivate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

// щелчок на кнопке Запрос
procedure TForm1.Button1Click(Sender: TObject);
var
  fam: string[30];
begin
  fam := InputBox('Выборка информации из БД',
    'Укажите фамилию и щелкните на OK.', '');
  if fam <> '' // пользователь ввел фамилию
    then
  begin
    with form1.Query1 do begin
      Close; // закрыть файл-результат выполнения предыдущего запроса
      SQL.Clear; // удалить текст предыдущего запроса
      // записываем новый запрос в свойство SQL
      SQL.Add('SELECT Fam, Name, Class');
      SQL.Add('FROM ":Школа:school.db"');
      SQL.Add('WHERE');
      SQL.Add('(Fam = "' + fam + '")');
      SQL.Add('ORDER BY Name, Fam');
      Open; // активизируем выполнение запроса
    end;

    if Query1.RecordCount <> 0 then
      DataSource1.DataSet := Query1 // отобразить рез-т выполнения запроса
    else begin
      ShowMessage('В БД нет записей, удовлетворяющих критерию запроса.');
      DataSource1.DataSet := Table1;
    end;
  end;
end;

// щелчок на кнопке Все записи
procedure TForm1.Button2Click(Sender: TObject);
begin
  DataSource1.DataSet := Table1; // источник данных - таблица
end;

// активизация формы
procedure TForm1.FormActivate(Sender: TObject);
begin
  with Session do
  begin
    ConfigMode := cmSession;
    try
      { Если файл данных находиться в том же каталоге,
      что и выполняемый файл программы, то в программе
      путь к файлу данных может быть получен из командной
      строки при помощи функции ExtractFilePath(ParamStr(0)).
      В приведенном примере файл данных находиться в подкаталоге
      DATA каталога программы. }

      // создадим временный псевдоним для базы данны
      AddStandardAlias('Школа',
        ExtractFilePath(ParamStr(0)) + 'DATA\',
        'PARADOX');
      Table1.Active := True; // откроем базу данных
    finally
      ConfigMode := cmAll;
    end;
  end;
end;

end.

В рассматриваемом варианте программы предполагается, что база данных содержится в подкаталоге DATA того каталога, в котором находится выполняемый файл программы. Создает псевдоним процедура TForm1.FormActivate. Непосредственное создание псевдонима выполняет процедура AddstandardAlias, которой в качестве параметра передается имя псевдонима и соответствующее ему имя каталога. Так как во время разработки программы нельзя знать, в каком каталоге будет размещена программа работы с базой данных и, следовательно, подкаталог базы данных -DATA, имя каталога определяется во время работы программы путем обращения к функциям ParamStr(0) и ExtractFilePatch. Значение первой -полное имя выполняемого файла программы, второй — путь к этому файлу. Таким образом, процедуре AddstandardAiias передается полное имя каталога базы данных.

Проект Delphi World © Выпуск 2002 - 2017
Автор проекта: Эксклюзивные курсы программирования