Динамически создаваемые псевдонимы

{codecitation class=»brush: pascal; gutter: false;» width=»600px»}

Использование псевдонима для доступа к базе данных обеспечивает независимость программы от размещения данных в системе, позволяет размещать программу работы с данными и базу данных на разных дисках компьютера, в том числе и на сетевом. Вместе с тем, для простых баз данных типичным решением является размещение базы данных в отдельном подкаталоге того каталога, в котором находится программа работы с базой данных. Таким образом, программа работы с базой данных всегда «знает», где находятся данные. При таком подходе можно отказаться от создания псевдонима при помощи 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 передается полное имя каталога базы данных.

{/codecitation}

Добавить комментарий