Рис. 17.12. Окончательный
вид формы приложения Архитектурные памятники Санкт-Петербурга
В принципе, после добавления
в форму компонента DBNavigator простейшая программа управления базой данных
готова. Эта программа обеспечивает просмотр, редактирование, добавление новых
и удаление ненужных записей.
Теперь рассмотрим,
что надо сделать, чтобы в поле imagei появилось изображение памятника, информация
о котором выведена в форме. Разрабатываемое приложение предполагает, что изображения
(фотографии) архитектурных памятников находятся в файлах в том же каталоге,
что и таблица базы данных. Во время добавления информации в базу данных пользователь
вводит в поле Photo имя файла фотографии, а во время просмотра фотография автоматически
появляется в поле image 1.
В листинге 17.1 приведен
текст модуля программы
Архитектурные памятники Санкт-Петербурга.
Листинг 17.1.
База данных "Архитектурные памятники Санкт-Петербурга"
unit peter_;
interface
uses
Windows, Messages, SysUtils,
Classes, Graphics, Controls,
Forms,
Dialogs, ExtCtrls, StdCtrls,
DBCtrls, Mask, Db, DBTables,
jpeg; // чтобы можно было выводить JPG-иллюстрации;
type
TForml = class(TForm)
Tablel: TTable; . // база
данных — таблица
DataSourcel: TDataSource;
// источник данных для полей
// редактирования-просмотра
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
DBEditl: TDBEdit;
DBEdit2: TDBEdit;
DBMemo1: TDBMemo;
Image1: ТImage;
DBEdit3: TDBEdit;
DBNavigatorl: TDBNavigator;
Label4: TLabel;
procedure TablelAfterScroll(DataSet:
TDataSet);
procedure DBEdit3KeyPress(Sender:
TObject; var Key: Char);
procedure DBNavigatorlClick(Sender:
TObject; Button: TNavigateBtn)
procedure TablelBeforeOpen(DataSet:
TDataSet);
private
{ Private declarations
}
public
{ Public declarations }
end;
var
Forml: TForml;
BmpPath: string; //
Путь к файлам иллюстраций. Иллюстрации
// находятся в подкаталоге
Data каталога программы.
implementation
($R *.DFM}
// выводит фотографию в
поле Imagel
procedure ShowFoto(foto: string);
begin
try
Forml.Imagel.Picture.LoadFromFile(BmpPath+foto);
Forml.Imagel.Visible:=True;
except
on EFOpenError do
begin
MessageDlg('Файл иллюстрации
'+foto+' не найден.',
mtlnformation, [mbOk],
0) ;
end;
end;
end;
// переход к другой записи
(следующей, предыдущей,
// первой или последней)
procedure TForm1.TablelAfterScroll(DataSet:
TDataSet);
begin.
if form1.DBEdit3.Visible
then
begin
form1.DBEditS.Visible :=
False;
form1.Label4.Visible:=False;
end;
if Forml.DBEditS.Text <> "
then ShowFoto(Form1.DBEditS.Text)
else form1.Imagel.Visible:=False;
end;
// нажатие клавиши в поле
Фото
procedure TForml.DBEdit3KeyPress(Sender:
TObject; var Key: Char);
begin
if (key = #13) then
if Forml.DBEdit3.Text
<>''
then ShowFoto(Forml.DBEdit3.Text)
// показать иллюстрацию
else forml,Imagel.Visible:=False;
end;
// щелчок на компоненте
Навигатор
procedure TForml.DBNavigatorlClick(Sender:
TObject; Button:
TNavigateBtn);
begin
case Button of
nblnsert: begin
Imagel.Visible:=False;//
скрыть область вывода иллюстрации
DBEdit3.Visible:=True; // показать поле Фото
Label4.Visible:=True; // показать метку Фото
end;
nbEdit: begin // редактирование записи
DBEdit3.Visible:=True;
// показать поле Фото
Label4.Visible:=True; // показать метку Фото
end;
end;
end;
// перед открытием таблицы
procedure TForml.TablelBeforeOpen(DataSet:
TDataSet);
begin
BmpPath:=ExtractFilePath(ParamStr(0))+'data\';
end;
end.
end.
Вызов процедуры вывода
фотографии (showFoto) во время просмотра базы данных выполняет процедура TForm1.Table1AfterScroll,
которая обеспечивает обработку события AfterScrool для компонента Table1. Событие
AfterScrool происходит всякий раз после перехода к другой (следующей, предыдущей,
первой, последней) записи таблицы как результат щелчка пользователя на соответствующей
кнопке компонента DBNavigator. Процедура TForml.Table1AfterScroll анализирует
содержимое поля (photo) Form1.DBEdit3.Text и, если оно не пустое, что свидетельствует
о наличии ссылки на файл фотографии, выводит иллюстрацию.
При просмотре базы
данных поле имени файла иллюстрации (DBEdits) и его заголовок (Label4) на форме
не отображаются. Если пользователь нажимает одну из кнопок компонента DBNavigator,
то как результат обработки события onclick вызывается процедура TForm1.DBNavigatorlciick,
которая при щелчке кнопки
Добавить или
Редактировать делает доступным
поле DBEdits, тем самым позволяя пользователю ввести или изменить имя файла
иллюстрации.
Процедура TForm1.DBEdit3KeyPress
обрабатывает событие OnKeyPress для компонента
DBEdits. Если пользователь ввел в поле Edits (photo) имя файла иллюстрации и
нажал клавишу <Enter> (ее код равен 13), то процедура TForm1.DBEdit3KeyPress
выводит иллюстрацию путем вызова процедуры ShowFoto.
Режим
таблицы
Программа работы с
базой данных "Архитектурные памятники Санкт-Петербурга" выводит информацию
в режиме формы, в каждый момент времени пользователь может видеть только одну
запись. Такой режим работы с базой данных не всегда удобен. Если необходимо
видеть одновременно несколько записей базы данных, то нужно обеспечить просмотр
данных в режиме таблицы.
Процесс создания приложения,
обеспечивающего просмотр базы данных в режиме таблицы, рассмотрим на примере
программы работы с базой данных "Школа".
Пусть база данных "Школа"
(псевдоним школа), представляет собой таблицу, которая находится в файле School.db.
Записи таблицы school состоят из полей: Name (Имя), Fam (Фамилия), class (Класс),
Adr (Адрес) и N (Личный номер). Поля Name, Fam, class и Adr являются полями
символьного типа (тип А), а поле N — числовое, с автоувеличением.
Примечание
Псевдоним Школа следует создать
при помощи BDE Administrator, а таблицу (файл school.db) — при помощи Database
Desktop.
Сначала в форму разрабатываемого
приложения нужно добавить компоненты Table и DataSource, которые обеспечивают
доступ к файлу данных, и установить значения их свойств (табл. 17.14).
Таблица 17.14.
Значения свойств компонентов Table1
и DataSource1
|
|
|
|
|
|
|
|
|
Tablel . DatabaseName
Tablel . TableName
Tablel. Active DataSourcel
. Dataset
|
Школа school . db
True
Tablel
|
|
|
|
|
|
Для обеспечения просмотра
и редактирования данных в режиме таблицы в форму приложения надо добавить компонент
DBGrid, значок которого находится на вкладке
Data Controls (рис. 17.13).
Вид формы разрабатываемого приложения после добавления компонента DBGrid приведен
на рис. 17.14.
Рис. 17.13. Значек
компонента DBGrid
Рис. 17.14. Форма
приложения после добавления компонента DBGrid
Компонент DBGrid обеспечивает
представление базы данных в виде таблицы. Свойства компонента DBGridl определяют
вид таблицы и действия, которые могут быть выполнены над данными во время работы
программы. В табл. 17.15 перечислены некоторые свойства компонента DBGrid.
Таблица 17.15.
Свойства компонента DBGrid
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Источник отображаемых
в таблице данных
|
|
|
|
Отображаемую в таблице
информацию
|
|
|
|
Разрешает вывод строки
заголовка столбцов
|
|
|
|
Разрешает вывод колонки
индикатора. Во время работы с базой данных текущая запись помечается
в колонке индикатора треугольником, новая запись — звездочкой, редактируемая
— специальным значком
|
|
|
|
Разрешает менять во время
работы программы ширину колонок таблицы
|
|
|
|
Разрешает выводить линии,
разделяющие колонки таблицы
|
|
|
|
Разрешает выводить линии,
разделяющие строки таблицы
|
|
|
|
|
|
Для того чтобы задать,
какая информация будет отображена в таблице во время работы программы, нужно
сначала определить источник данных для таблицы (установить значения свойства
DataSource), затем — установить значения уточняющих параметров свойства Columns.
Значение свойства DataSource задается обычным образом, то есть в окне
Object
Inspector. Чтобы установить значение свойства Columns, надо в окне
Object
Inspector выбрать это свойство и щелкнуть на кнопке с тремя точками. В результате
открывается окно редактора колонок (рис. 17.15).
Рис. 17.15. Редактор
колонок
Для того чтобы в компонент
DBGrid добавить колонку, обеспечивающую просмотр содержимого поля записи файла
данных, необходимо нажать кнопку Add New, находящуюся на панели инструментов
в верхней части окна (это единственная доступная после запуска редактора кнопка),
выделить добавленный элемент и, используя
Object Inspector, установить
значения свойств этой колонки (табл. 17.16). Свойство columns компонента DBGrid
представляет собой массив компонентов типа TCoiumn. Каждой колонке соответствует
элемент массива. Устанавливая значения свойств компонентов column, программист
задает вид колонок компонента DBGrid, тем самым определяет вид всей таблицы.
Таблица 17.16.
Свойства компонента column
|
|
|
|
|
|
|
|
|
|
Поле записи, содержимое
которого выводится в колонке
|
|
|
|
Ширину колонки в пикселах
|
|
|
|
Шрифт, используемый для
вывода текста в ячейках колонки
|
|
|
|
|
|
|
|
Способ выравнивания текста
в ячейках колонки. Текст может быть выровнен по левому краю (taLeftJustify),
по центру (taCenter) или по правому краю (taRight Justify)
|
|
|
|
Заголовок колонки. Значением
по умолчанию является имя поля записи
|
|
|
|
Способ выравнивания заголовка
колонки. Заголовок может быть выровнен по левому краю (taLeftJustify),
по центру (taCenter) или по правому краю (taRight Justify)
|
|
|
|
Цвет фона заголовка колонки
|
|
|
|
|
|
|
|
|
|
В простейшем случае
для каждой колонки достаточно установить значение свойства FieldName, которое
определяет имя поля записи, содержимое которого будет отображаться в колонке,
а также значение свойства Title.Caption, определяющего заголовок колонки. В
табл. 17.17 приведены значения свойств columns компонента DBGridl.
Таблица 17.17.
Значения свойств компонента DBGrid1
|
|
|
|
|
|
|
|
|
|
|
DBGrid1. Columns [0]
DBGrid1. Columns [1]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DBGrid1. Columns [2]
DBGrid1 . Columns [ 3 ]
|
|
|
|
|
|
|
|
|
Последнее, что надо
сделать — добавить к форме компонент DBNavigator, настроив его на работу с таблицей-источником
данных (свойству DataSource Нужно Присвоить значение Table1).
Окончательный вид формы
приложения приведен на рис. 17.16.
Рис. 17.16. Форма
после настройки компонента DBGrid1
После этого программу
можно откомпилировать и запустить. Следует обратить внимание, что для того чтобы
после запуска программы в окне появилась информация или, если база данных пустая,
можно было вводить новую информацию, свойство Active таблицы-источника данных
должно иметь значение True.
Работа с базой данных,
представленной в виде таблицы, во многом похожа на работу с электронной таблицей
Microsoft Excel. Используя клавиши перемещения курсора вверх и вниз, а также
клавиши листания текста страницами (<Page Up> и <Page Down>), можно,
перемещаясь от строки к строке, просматривать записи базы данных. Нажав клавишу
<Ins>, можно добавить запись, а нажав клавишу <Del> — удалить запись.
Для того чтобы внести изменения в поле записи, нужно, используя клавиши перемещения
курсора влево и вправо, выбрать необходимое поле и нажать клавишу <F2>.
Выбор
информации из базы данных
При работе с базой
данных пользователя, как правило, интересует не все ее содержимое, а некоторая
конкретная информация. Найти нужные сведения можно последовательным просмотром
записей. Однако такой способ поиска неудобен и малоэффективен.
Большинство систем
управления базами данных позволяют произвести выборку нужной информации путем
выполнения запросов. Пользователь в соответствии с определенными правилами формулирует
запрос, указывая, каким критериям должна удовлетворять интересующая его информация,
а система выводит записи, удовлетворяющие запросу.
Для выборки из базы
данных записей, удовлетворяющих некоторому критерию, предназначен компонент
Query (рис. 17.17).
Рис. 17.17. Значок
компонента Query
Компонент Query похож
на компонент Table, но, в отличие от последнего, он представляет не всю базу
данных (все записи), а только ее часть — записи, удовлетворяющие критерию запроса.
В табл. 17.18 перечислены
некоторые свойства компонента Query.
Таблица 17.18.
Свойства компонента Query
|
|
|
|
|
|
|
|
|
|
Имя компонента. Используется
компонентом Datasource для связи результата выполнения запроса (набора
записей) с компонентом, обеспечивающим просмотр записей, например
DBGrid
Записанный на языке SQL
запрос к базе данных (к таблице)
При присвоении свойству
значения True активизирует выполнение запроса
|
|
|
|
|
|
Для того чтобы во время
разработки программы задать, какая информация будет выделена из базы данных
в результате выполнения запроса, свойство SQL должно содержать представленный
на языке SQL запрос на выборку данных.
В общем виде запрос
на выборку из таблицы данных выглядит так:
SELECT Список-Полей
FROM Таблица
WHERE (Критерий)
ORDER BY СписокПолей
где:
SELECT — команда выбора записей
из таблицы и вывода содержимого полей, имена которых указаны в списке;
FROM — параметр команды, который
определяет имя таблицы, из которой нужно сделать выборку;
WHERE — параметр, который задает
критерий выбора. В простейшем случае критерий — это инструкция проверки содержимого
поля;
ORDER BY - параметр, который
задает условие, в соответствии с которым будут упорядочены записи, удовлетворяющие
критерию запроса.
Например, запрос
SELECT Fam,
Name
FROM ':Школа:school.db'
WHERE
(Class = '10a')
ORDER BY Name, Fam
обеспечивает выборку
из базы данных "Школа" (из таблицы School.db) записей, у которых в
поле class находится текст 10а, т. е. формирует упорядоченный по алфавиту список
учеников 10-а класса.
Другой пример. Запрос
SELECT
Fam, Name FROM ":Школа:school.db"
WHERE
(Fam
> 'K')
and (Fam < 'Л') ORDER BY Name, Fam
обеспечивает выбор
информации об учениках, фамилии которых начинаются на букву К.
Запрос может быть сформирован
и записан в свойство SQL во время разработки формы или во время работы программы.
Для записи запроса
в свойство SQL во время разработки формы используется редактор списка строк
(рис. 17.18), окно которого открывается в результате щелчка на кнопке с тремя
точками в строке свойства SQL окна
Object Inspector.
Рис. 17.18. Пример
запроса к базе данных "Школа"
Свойство SQL представляет
собой список строк. Поэтому чтобы сформировать запрос во время работы программы,
нужно, используя метод Add, добавить строки (SQL-инструкции) в список SQL.
Ниже приведен фрагмент
кода, который формирует запрос на поиск информации о конкретном человеке (критерий
выбора — содержимое поля Fam должно совпадать со значением переменной fam).
with
forml.Queryl
do
begin
Close;
// закрыть файл — результат выполнения
//
предыдущего запроса
SQL.Clear;
// удалить текст предыдущего запроса
//
записываем новый запрос в свойство SQL
SQL.Add('SELECT
Fam, Name, Class
1);
SQL.Add('FROM
":Школа:school.db"');
SQL.Add('WHERE');
SQL.Add('(Fam
= '" + fam + '")');
SQL.Add('ORDER
BY Name, Fam');
Open;
// активизируем выполнение запроса
end;
Следующая программа,
ее текст приведен в листинге 17.2, а диалоговое окно — на рис. 17.19, демонстрирует
возможность изменения запроса, точнее, критерия запроса, во время работы программы.
Программа обеспечивает вывод как всего списка учеников, так и его части. Например,
посредством выполнения запроса выводится информация только о конкретном ученике.
Для просмотра базы
данных и результата выполнения запроса используется компонент DBGrid1, который
через компонент DataSourcel взаимодействует с компонентом Table1 (при просмотре
всей базы данных) или с компонентом Query (при просмотре результата выполнения
запроса).
Рис. 17.19. Форма
приложения База данных Школа
Листинг 17.2.
База данных "Школа"
unit
school2_;
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;
{ *** другой вариант изменения
критерия запроса
begin
Query1.Close;
Query1.SQL[3]:='(Fam="'+ fam + '")';
Query1.Open;
DataSource1.DataSet:=Query1;
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
DataSource1.DataSet := Table1;
Table1.Active := True;
end;
end.
Процедура TForm1.Button1Click
запускается щелчком кнопки
Запрос. Она принимает от пользователя строку
(фамилии) и записью (добавлением) строк
в свойство SQL формирует текст запроса. Затем эта процедура вызовом метода Open
активизирует выполнение запроса.
Следует обратить внимание
на то, что перед изменением свойства SQL-запрос должен быть закрыт при помощи
метода close (здесь надо вспомнить, что результат выполнения запроса — это файл
данных (таблица), который создается в результате выполнения запроса).
Процедура TForm1.Button2Click,
которая запускается щелчком кнопки
Все записи, устанавливает в качестве
источника данных для компонента DataSourcel компонент Table1, тем самым обеспечивая
переход в режим просмотра всей базы данных.
Если запрос записан
в свойство SQL во время разработки формы приложения, то во время работы программы
критерий запроса можно изменить простой заменой соответствующей строки текста
запроса.
Например, для запроса
SELECT
DISTINCT Fam, Name, Class FROM ":Школа:school.db"
WHERE
(Class=
'10а') ORDER BY Name, Fam
инструкция замены критерия
запроса может быть такой:
forml.Query1.SQL[3]:='(Fam="'
+ fam+ '")'
Следует обратить внимание
на то, что свойство SQL является структурой типа TStrings, в которой строки
нумеруются с нуля.
Динамически
создаваемые псевдонимы
Использование псевдонима
для доступа к базе данных обеспечивает независимость программы от размещения
данных в системе, позволяет размещать программу работы с данными и базу данных
на разных дисках компьютера, в том числе и на сетевом. Вместе с тем, для простых
баз данных типичным решением является размещение базы данных в отдельном подкаталоге
того каталога, в котором находится программа работы с базой данных. Таким образом,
программа работы с базой данных всегда "знает", где находятся данные.
При таком подходе можно отказаться от создания псевдонима при помощи 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 передается полное имя каталога базы данных.
Перенос
программы управления базой данных на другой компьютер
Довольно часто возникает
необходимость переноса созданной программы управления базой данных на другой
компьютер, например, для того чтобы продемонстрировать ее своим друзьям или
знакомым. В отличие от процесса переноса обычной программы, когда, как правило,
достаточно скопировать только выполняемый файл (ЕХЕ-файл), при переносе программы
управления базой данных необходимо выполнить перенос BDE.
Здесь следует вспомнить,
что BDE представляет собой набор программ, библиотек и драйверов, обеспечивающих
работу прикладной программы с базой данных. Выполнить перенос BDE на другой
компьютер вручную практически невозможно.
Поэтому Borland рекомендует
создавать установочную программу, которая выполнит копирование всех необходимых
файлов, в том числе и компонентов BDE. В качестве средства создания установочной
программы Borland настоятельно рекомендует использовать утилиту InstallShield
Express, которая входит в состав всех наборов Delphi. Поставляемая с Delphi
версия этой утилиты специально адаптирована к задаче переноса и настройки BDE.
Можно попытаться установить
BDE вручную. Ниже перечислены файлы (их имена определены опытным путем), необходимые
для работы с базой данных Paradox:
BLW32.DLL
IDAPI32.DLL
IDBAT32.DLL
IDPDX32.DLL
IDR20009.DLL
USA.BLL
CHARSET.BLL
Эти файлы нужно установить
на компьютер пользователя, затем проверить, что в реестре Windows есть перечисленные
ниже разделы и параметры:
Раздел HKEY_LOCAL_MACHINE\Software\Borland\Database
engine — параметр DLLPATH должен содержать путь к DLL-файлам BDE;
Раздел HKEY_LOCAL_MACHINE\Software\Borland\BLW32
— параметр BLAPIPATH должен содержать путь к BLL-файлам BDE.
|