Вне Delphi создание и конфигурирование псевдонимов осуществляется утилитой BDECFG.EXE. Тем не менее, применяя компонент TDatabase, вы можете в вашем приложении создать и использовать псевдоним, не определенный в IDAPI.CFG.
Важно понять, что создав псевдоним, использовать его можно только в текущем сеансе вашего приложения. Псевдонимы определяеют расположение таблиц базы данных и параметры связи с сервером баз данных. В конце концов, вы получаете преимущества использования псевдонимов в пределах вашего приложения без необходимости беспокоиться о наличии их в конфигурационном файле IDAPI.CFG в момент инициализации приложения.
Некоторые варианты решения задачи:
Пример #1: Пример #1 создает и конфигурирует псевдоним для базы данных STANDARD (.DB, .DBF). Псевдоним затем используется компонентом TTable.
Пример #2: Пример #2 создает и конфигурирует псевдоним для базы данных INTERBASE (.gdb). Псевдоним затем используется компонентом TQuery для подключения к двум таблицам базы данных.
Пример #3: Пример #3 создает и конфигурирует псевдоним для базы данных STANDARD (.DB, .DBF). Демонстрация ввода псевдонима пользователем и его конфигурация во время выполнения программы.
Пример #1: Используем базу данных .DB или .DBF (STANDARD)
1. Создаем новый проект.
2. Располагаем на форме следующие компоненты: – TDatabase, TTable, TDataSource, TDBGrid, and TButton.
3. Дважды щелкаем на компоненте TDatabase или через контекстное меню (правая кнопка мыши) вызываем редактор базы данных.
4. Присваиваем базе данных имя 'MyNewAlias'. Это имя будет выполнять роль псевдонима в свойстве DatabaseName для компонентов типа TTable, TQuery, TStoredProc.
5. Выбираем в поле Driver Name (имя драйвера) пункт STANDARD.
6. Щелкаем на кнопке Defaults. Это автоматически добавляет путь (PATH=) в секцию перекрытых параметров (окно Parameter Overrides).
7. Устанавливаем PATH= to C:DELPHIDEMOSDATA (PATH=C:DELPHIDEMOSDATA).
8. Нажимаем кнопку OK и закрываем окно редактора.
9. В компоненте TTable свойству DatabaseName присваиваем 'MyNewAlias'.
10. В компоненте TDataSource свойству DataSet присваиваем 'Table1'.
11. В компоненте DBGrid свойству DataSource присваиваем 'DataSource1'.
12. Создаем в компоненте TButton обработчик события OnClick.
procedure TForm1.Button1Click(Sender: TObject);
begin
Table1.Tablename:= 'CUSTOMER';
Table1.Active:= True;
end;
13. Запускаем приложение.
*** В качестве альтернативы шагам 3 – 11, вы можете включить все эти действия в сам обработчик:
procedure TForm1.Button1Click(Sender: TObject);
begin
Database1.DatabaseName:= 'MyNewAlias';
Database1.DriverName:= 'STANDARD';
Database1.Params.Clear;
Database1.Params.Add('PATH=C:DELPHIDEMOSDATA');
Table1.DatabaseName:= 'MyNewAlias';
Table1.TableName:= 'CUSTOMER';
Table1.Active:= True;
DataSource1.DataSet:= Table1;
DBGrid1.DataSource:= DataSource1;
end;
Пример #2: Используем базу данных INTERBASE
1. Создаем новый проект.
2. Располагаем на форме следующие компоненты: – TDatabase, TQuery, TDataSource, TDBGrid, and TButton.
3. Дважды щелкаем на компоненте TDatabase или через контекстное меню (правая кнопка мыши) вызываем редактор базы данных.
4. Присваиваем базе данных имя 'MyNewAlias'. Это имя будет выполнять роль псевдонима в свойстве DatabaseName для компонентов типа TTable, TQuery, TStoredProc.
5. Выбираем в поле Driver Name (имя драйвера) пункт INTRBASE.
6. Щелкаем на кнопке Defaults. Это автоматически добавляет путь (PATH=) в секцию перекрытых параметров (окно Parameter Overrides).
SERVER NAME=IB_SERVEER:/PATH/DATABASE.GDB
USER NAME=MYNAME
OPEN MODE=READ/WRITE
SCHEMA CACHE SIZE=8
LANGDRIVER=
SQLQRYMODE=
SQLPASSTHRU MODE=NOT SHARED
SCHEMA CACHE TIME=-1
PASSWORD=
7. Устанавливаем следующие параметры
SERVER NAME=C:IBLOCALEXAMPLESEMPLOYEE.GDB
USER NAME=SYSDBA
OPEN MODE=READ/WRITE
SCHEMA CACHE SIZE=8
LANGDRIVER=
SQLQRYMODE=
SQLPASSTHRU MODE=NOT SHARED
SCHEMA CACHE TIME=-1
PASSWORD=masterkey
8. В компоненте TDatabase свойство LoginPrompt устанавливаем в 'False'. Если в секции перекрытых параметров (Parameter Overrides) задан пароль (ключ PASSWORD) и свойство LoginPrompt установлено в 'False', при соединении с базой данный пароль запрашиваться не будет. Предупреждение: при неправильно указанном пароле в секции Parameter Overrides и неактивном свойстве LoginPrompt вы не сможете получить доступ к базе данных, поскольку нет возможности ввести правильный пароль – диалоговое окно "Ввод пароля" отключено свойством LoginPrompt.
9. Нажимаем кнопку OK и закрываем окно редактора.
10. В компоненте TQuery свойству DatabaseName присваиваем 'MyNewAlias'.
11. В компоненте TDataSource свойству DataSet присваиваем 'Query1'.
12. В компоненте DBGrid свойству DataSource присваиваем 'DataSource1'.
13. Создаем в компоненте TButton обработчик события OnClick.
procedure TForm1.Button1Click(Sender: TObject);
begin
Query1.SQL.Clear;
Query1.SQL.ADD('SELECT DISTINCT * FROM CUSTOMER C, SALES S WHERE (S.CUST_NO = C.CUST_NO) ORDER BY C.CUST_NO, C.CUSTOMER');
Query1.Active:= True;
end;
14. Запускаем приложение.
Пример #3: Ввод псевдонима пользователем
Этот пример выводит диалоговое окно и создает псевдоним на основе информации, введенной пользователем.
Директория, имя сервера, путь, имя базы данных и другая необходимая информация для получения псевдонима может быть получена приложением из диалогово окна или конфигурационного .INI файла.
1. Выполняем шаги 1-11 из примера #1.
2. Пишем следующий обработчик события OnClick компонента TButton:
procedure TForm1.Button1Click(Sender: TObject);
var
NewString: string;
ClickedOK: Boolean;
begin
NewString:= 'C:';
ClickedOK:= InputQuery('Database Path', 'Path: –> C:DELPHIDEMOSDATA', NewString);
if ClickedOK then begin
Database1.DatabaseName:= 'MyNewAlias';
Database1.DriverName:= 'STANDARD';
Database1.Params.Clear;
Database1.Params.Add('Path=' + NewString);
Table1.DatabaseName:= 'MyNewAlias';
Table1.TableName:= 'CUSTOMER';
Table1.Active:= True;
DataSource1.DataSet:= Table1;
DBGrid1.DataSource:= DataSource1;
end;
end;
3. Запускаем приложение.
Информация о псевдонимах BDE
Как через конфигурацию IDAPI получить физический каталог расположения базы данных, зная ее псевдоним?
Обратите внимание на метод GetAliasParams класса TSession.
Возвращенная строка будет содержать искомый путь.
Я пользуюсь следующей функцией:
uses DbiProcs, DBiTypes;
function GetDataBaseDir(const Alias : string): String;
(* Возвращает каталог расположения базы данных по заданному псевдониму
(без обратного слеша) *)
var
sp: PChar;
Res: pDBDesc;
begin
try
New(Res);
sp:= StrAlloc(length(Alias)+1);
StrPCopy(sp,Alias);
if DbiGetDatabaseDesc(sp,Res) = 0 then Result:= StrPas(Res^.szPhyName)
else Result:= '';
finally
StrDispose(sp);
Dispose(Res);
end;
end;
Получение идентификатора диска
Как получить идентификатор находящегося в CD-ROM'е аудио-компакта?
const
MCI_INFO_PRODUCT = $00000100;
MCI_INFO_FILE = $00000200;
MCI_INFO_MEDIA_UPC = $00000400;
MCI_INFO_MEDIA_IDENTITY = $00000800;
MCI_INFO_NAME = $00001000;
MCI_INFO_COPYRIGHT = $00002000;
{ блок параметров для командного сообщения MCI_INFO }
type
PMCI_Info_ParmsA = ^TMCI_Info_ParmsA;
PMCI_Info_ParmsW = ^TMCI_Info_ParmsW;
PMCI_Info_Parms = PMCI_Info_ParmsA;
TMCI_Info_ParmsA = record
dwCallback: DWORD;
lpstrReturn: PAnsiChar;
dwRetSize: DWORD;
end;
TMCI_Info_ParmsW = record
dwCallback: DWORD;
lpstrReturn: PWideChar;
dwRetSize: DWORD;
end;
TMCI_Info_Parms = TMCI_Info_ParmsA;
Идентификатор возвращается функцией MCI_INFO_MEDIA_IDENTITY в виде строки с десятичным числом. Для получения дополнительной информации обратитесь к электронной справке (Win32 и компонент TMediaPlayer).
Открытие и закрытие привода CD-ROM
Есть ли Win32 API функция, позволяющая не только открыть НО И ЗАКРЫТЬ CD-ROM? Хотелось бы не тянуться ручками к РС, а нажать мышкой на кнопку. Компонентом TMediaPlayer пользоваться не хочу, тем более компакт он может только извлечь…
Для закрытия CD-ROM:
mciSendString('Set cdaudio door open wait', nil, 0, handle);
Для открытия CD-ROM:
mciSendString('Set cdaudio door closed wait', nil, 0, handle);
Не забудьте включить MMSystem в список используемых модулей (uses).