SELECTDISTINCT Fam, Name, Class FROM ":Школа:school.db" WHERE
(Class= '10а') ORDER BY Name, Fam
інструкція заміни критерію запиту може бути такій:
forml.Query1.SQL[3]:='(Fam="' + fam+ '")'
Слід звернути увагу на те, що властивість SQL є структурою типу TStrings, в якого рядка нумеруються з нуля.
Динамічно створювані псевдоніми
Використання псевдоніма для доступу до бази даних забезпечує незалежність програми від розміщення даних в системі, дозволяє розміщувати програму роботи даними і базу даних на різних дисках комп'ютера, у тому числі і на мережевому. Разом з тим, для простих баз даних типовим рішенням є розміщення бази даних в окремому підкаталозі того каталога, в якому знаходиться програма роботи з базою даних. Таким чином, програма роботи з базою даних завжди "знає", де знаходяться дані. При такому підході можна відмовитися від створення псевдоніма за допомогою BDE Administrator і покласти завдання створення псевдоніма на програму роботи з базою даних. Причому, псевдонім створюватиметься автоматично під час запуску програми і знищуватися під час завершення її роботи. Очевидно, що такий підхід полегшує адміністрування бази даних.
Як ілюстрація сказаного в лістингу 3 приведений варіант програми роботи з базою даних "Школа", яка для доступу до бази даних використовує динамічно створюваний псевдонім.
Лістинг 3. База даних "Школа" (псевдонім БД створюється динамічно)
unitschool3_;
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 передається повне ім'я каталога бази даних.