Динамически создаваемые псевдонимы
Использование
псевдонима для доступа к базе данных обеспечивает независимость программы от
размещения данных в системе, позволяет размещать программу работы с данными и
базу данных на разных дисках компьютера, в том числе и на сетевом. Вместе с тем,
для простых баз данных типичным решением является размещение базы данных в
отдельном подкаталоге того каталога, в котором находится программа работы с
базой данных. Таким образом, программа работы с базой данных всегда "знает", где
находятся данные. При таком подходе можно отказаться от создания псевдонима при
помощи BDE Administrator и возложить задачу создания псевдонима на программу
работы с базой данных. Причем, псевдоним будет создаваться автоматически во время запуска
программы и уничтожаться во время завершения ее работы. Очевидно, что такой
подход облегчает администрирование базы данных.
В качестве
иллюстрации сказанного в листинге 17.3 приведен вариант программы работы с базой
данных "Школа", которая для доступа к базе данных использует динамически
создаваемый псевдоним.
Листинг
17.3. База данных "Школа" (псевдоним БД создается
динамически)
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 передается полное имя каталога базы данных.