Задание псевдонима программным путем

Эта информация поможет разобраться в вопросе создания и использования псевдонимов баз данных в приложениях.

Вне Delphi создание и конфигурирование псевдонимов осуществляется утилитой BDECFG.EXE. Тем не менее, применяя компонент TDataBase, в приложении можно создать и использовать псевдоним, не определенный в IDAPI.CFG.

Важно понять, что, создав псевдоним, использовать его можно только в текущем сеансе приложения. Псевдонимы определяют расположение таблиц базы данных и параметры связи с сервером баз данных. В конце концов, можно воспользоваться преимуществами псевдонимов в пределах приложения без необходимости беспокоиться об их наличии в конфигурационном файле IDAPI.CFG в момент инициализации приложения. Приведем некоторые варианты решения задачи:

Решение 1:
Используем базу данных .DB или .DBF (STANDARD)
  1. Создаем новый проект.
  2. Располагаем на форме следующие компоненты: TDataBase, TTable, TDataSource, TDBGrid и TButton.
  3. Дважды щелкаем по компоненту TDataBase или через контекстное меню (правая кнопка мыши) вызываем редактор базы данных.
  4. Присваиваем базе данных имя «MyNewAlias». Это имя будет выполнять роль псевдонима в свойстве DatabaseName для компонентов типа TTable, TQuery, TStoredProc.
  5. Выбираем в поле Driver Name (Имя драйвера) пункт STANDARD.
  6. Нажимаем кнопку Defaults. Это автоматически добавляет путь (PATH=) в секцию перекрытых параметров (окно Parameter Overrides).
  7. Устанавливаем переменную PATH (PATH=С:\Program Files\Common Files\Borland Shared\Data).
  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=С:\Program Files\Common Files\Borland Shared\Data');
      Table1.DatabaseName := 'MyNewAlias';
      Table1.TableName := 'CUSTOMER';
      Table1.Active := True;
      DataSource1.DataSet := Table1;
      DBGrid1.DataSource := DataSource1;
    end;
    
Решение 2
Используем базу данных INTERBASE
  1. Создаем новый проект.
  2. Располагаем на форме следующие компоненты: - TDataBase, TQuery, TDataSource, TDBGrid и TButton.
  3. Посредством двойного щелчка по компоненту TDataBase или через контекстное меню (правая кнопка мыши) вызываем редактор базы данных.
  4. Присваиваем базе данных имя «MyNewAlias». Оно будет выполнять роль псевдонима в свойстве DatabaseName для компонентов типа TTable, TQuery, TStoredProc.
  5. Выбираем в поле Driver Name (имя драйвера) пункт INTRBASE.
  6. Нажимаем кнопку Defaults. Это автоматически добавляет путь (PATH=) в секцию перекрытых параметров (окно Parameter Overrides).
    SERVER NAME=IB_SERVER:/PATH/DATABASE.GDB
    USER NAME=MYNAME
    OPEN MODE=READ/WRITE
    SCHEMA CACHE SIZE=8
    LANGDRIVER=
    SQLQRYMODE=
    SQLPASSTHRU MODE=SHARED AUTOCOMMIT
    SCHEMA CACHE TIME=-1
    MAX ROWS=-1
    BATCH COUNT=200
    ENABLE SCHEMA CACHE=FALSE
    SCHEMA CACHE DIR=
    ENABLE BCD=FALSE
    BLOBS TO CACHE=64
    BLOB SIZE=32
    PASSWORD=
    
    Устанавливаем следующие параметры:

    SERVER NAME=C:\Program Files\Common Files\Borland Shared\Data\EMPLOYEE.GDB
    USER NAME=SYSDBA
    OPEN MODE=READ/WRITE
    SCHEMA CACHE SIZE=8
    LANGDRIVER=
    SQLQRYMODE=
    SQLPASSTHRU MODE=NOT SHARED
    SCHEMA CACHE TIME=-1
    PASSWORD=masterkey
    
  1. В компоненте TDataBase свойство LoginPrompt устанавливаем в False. Если в секции перекрытых параметров (окно Parameter Overrides) задан пароль (ключ PASSWORD) и свойство LoginPrompt установлено в False, при соединении с базой данный пароль запрашиваться не будет. Предупреждение: при неправильно указанном пароле в секции перекрытых параметров и неактивном свойстве LoginPrompt вы не сможете получить доступ к базе данных, поскольку нет возможности ввести правильный пароль – диалоговое окно Ввод пароля отключено свойством LoginPrompt.
  2. Нажимаем кнопку OK и закрываем окно редактора.
  3. В компоненте TQuery свойству DatabaseName присваиваем значение «MyNewAlias».
  4. В компоненте TDataSource свойству DataSet присваиваем значение «Query1».
  5. В компоненте DBGrid свойству DataSource присваиваем значение «DataSource1».
  6. Создаем в компоненте 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;
    
  7. Запускаем приложение.
Решение 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:', 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. Запускаем приложение.