Skip to Content

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

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

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

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

Листинг 17.3. База данных "Школа" (псевдоним БД создается динамически)

  1. unit school3_;
  2. interface
  3.  
  4. uses
  5. Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
  6. Dialogs, Grids, DBGrids, Db, DBTables, ExtCtrls, DBCtrls, StdCtrls;
  7.  
  8. type
  9. TForm1 = class(TForm)
  10. Table1: TTable; // таблица (вся база данных)
  11. Query1: TQuery; // запрос (записи БД, удовлетворяющие критерию выбора)
  12. DataSource1: TDataSource; // источник данных - таблица или запрос
  13. DBGrid1: TDBGrid; // таблица для отображения БД или результата выполнения запроса
  14.  
  15. DBNavigator1: TDBNavigator;
  16. DBText1: TDBText;
  17. Button1: TButton; // кнопка запрос
  18. Button2: TButton; // кнопка Все записи
  19.  
  20. procedure Button1Click(Sender: TObject);
  21. procedure Button2Click(Sender: TObject);
  22. procedure FormActivate(Sender: TObject);
  23.  
  24. private
  25. { Private declarations }
  26. public
  27. { Public declarations }
  28. end;
  29.  
  30. var
  31. Form1: TForm1;
  32.  
  33. implementation
  34. {$R *.DFM}
  35.  
  36. // щелчок на кнопке Запрос
  37.  
  38. procedure TForm1.Button1Click(Sender: TObject);
  39. var
  40.  
  41. fam: string[30];
  42.  
  43. begin
  44.  
  45. fam:=InputBox('Выборка информации из БД',
  46. 'Укажите фамилию и щелкните на OK.', '');
  47.  
  48. if fam <> '' then// пользователь ввел фамилию
  49. begin
  50.  
  51. with form1.Query1 do
  52. begin
  53.  
  54. Close; // закрыть файл-результат выполнения предыдущего запроса
  55. SQL.Clear; // удалить текст предыдущего запроса
  56. // записываем новый запрос в свойство SQL
  57. SQL.Add('SELECT Fam, Name, Class');
  58. SQL.Add('FROM ":Школа:school.db"');
  59. SQL.Add('WHERE');
  60. SQL.Add('(Fam = "'+ fam + '")');
  61. SQL.Add('ORDER BY Name, Fam');
  62. Open; // активизируем выполнение запроса
  63.  
  64. end;
  65.  
  66. if Query1.RecordCount <> 0 then
  67. DataSource1.DataSet:=Query1 // отобразить рез-т выполнения запроса
  68. else
  69. begin
  70.  
  71. ShowMessage('В БД нет записей, удовлетворяющих критерию запроса.');
  72. DataSource1.DataSet:=Table1;
  73.  
  74. end;
  75. end;
  76. end;
  77.  
  78. // щелчок на кнопке Все записи
  79.  
  80. procedure TForm1.Button2Click(Sender: TObject);
  81. begin
  82.  
  83. DataSource1.DataSet:=Table1; // источник данных - таблица
  84.  
  85. end;
  86.  
  87. // активизация формы
  88.  
  89. procedure TForm1.FormActivate(Sender: TObject);
  90. begin
  91.  
  92. with Session do
  93. begin
  94.  
  95. ConfigMode := cmSession;
  96. try
  97. { Если файл данных находиться в том же каталоге,
  98. что и выполняемый файл программы, то в программе
  99. путь к файлу данных может быть получен из командной
  100. строки при помощи функции ExtractFilePath(ParamStr(0)).
  101. В приведенном примере файл данных находиться в подкаталоге
  102. DATA каталога программы. }
  103.  
  104. // создадим временный псевдоним для базы данны
  105.  
  106. AddStandardAlias( 'Школа',ExtractFilePath(ParamStr(0))+'DATA\','PARADOX');
  107. Table1.Active:=True; // откроем базу данных
  108. finally
  109. ConfigMode := cmAll;
  110.  
  111. end;
  112. end;
  113. end;
  114.  
  115. end.

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



Delphi Для профессионалов &1   |    Delphi Для профессионалов &2   |    Delphi Для профессионалов &3   |    Иллюстрированный самоучитель &1   |    Иллюстрированный самоучитель &2