Пятница, 29.03.2024
Меню сайта
Вход на сайт
Логин:
Пароль:
Поиск
Статистика
Рейтинг@Mail.ru Яндекс.Метрика
Реклама
C++ Delphi Прочее
Динамически создаваемые псевдонимы
Использование псевдонима для доступа к базе данных обеспечивает независимость программы от размещения данных в системе, позволяет размещать программу работы с данными и базу данных на разных дисках компьютера, в том числе и на сетевом. Вместе с тем, для простых баз данных типичным решением является размещение базы данных в отдельном подкаталоге того каталога, в котором находится программа работы с базой данных. Таким образом, программа работы с базой данных всегда "знает", где находятся данные. При таком подходе можно отказаться от создания псевдонима при помощи BDE Administrator и возложить задачу создания псевдонима на программу работы с базой данных. Причем, псевдоним будет создаваться автоматически во время запуска программы и уничтожаться во время завершения ее работы. Очевидно, что такой подход облегчает администрирование базы данных.
В качестве иллюстрации сказанного в листинге приведен вариант программы работы с базой данных "Школа", которая для доступа к базе данных использует динамически создаваемый псевдоним:

Code
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 3771 05.01.2010
Материалы по теме: