На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Rouse_, jack128, Krid
  
    > TSession или работа с Alias , И путь к БД
      Изменение пути к БД через TSession.
      Маленькое отступление - TSession это оболочка для работы с BDE API

      Как поменять путь к базе данных если Alias создан ?
      Настройки Alias’а (псевдоним ‘MyDB’) в BDEAdmin.exe такие
      ExpandedWrap disabled
        Path='с:\dbf\'
        ENABLE BCD = FALSE
        DEFAULT DRIVER = DBASE


      Например :
      Есть два каталога с:\dbf\, с:\dbf1\ где расположены файлы dbf c
      одинаковой структурой но разным содержанием записей.
      В обоих каталогах есть файлы – d1.dbf, d2.dbf …. dn.dbf
      Можно использовать явное указание к БД.
      ExpandedWrap disabled
        Код на Delphi:
        Table1.DatabaseName='MyDB';
        Table1.TableName:= 'с:\dbf1\d1.dbf';
        Table1.TableType := ttDBase;
        ……
        Table1.TableName:= 'с:\dbf1\dn.dbf'
        Table1.TableType := ttDBase;

      ExpandedWrap disabled
        Код на  BCB:
        Table1->DatabaseName="MyDB";
        Table1->TableName= "с:\dbf1\d1.dbf";
        Table1->TableType = ttDBase;
        …..
        Table1->TableName= "с:\dbf1\dn.dbf";
        Table1->TableType = ttDBase;


      Но если у Вас количество баз много менять полный путь - занятие долгое и
      нудное , и возможность ошибки велика.
      Поэтому предлагается иной способ решения этой проблемы – через компонент
      TSession.
      TSession- создается всегда , даже если вы не поставили компонент на форму
      или на TDataModule.

      Cоздадим новый проект с одной формой на которую разместим
      TDBGrid (DBGrid1), TDataSource (DataSource1), TTable (Table1),
      TListBox (ListBox1), TEdit (Edit1) ,
      и две кнопки TButton (Button1, Button2) .
      ExpandedWrap disabled
        Код на Delphi:
        DataSource1.DataSet:= Table1;
        Table1.DatabaseName='MyDB';
        Table1.TableName:= d1;
        Table1.TableType := ttDBase;
         
        DBGrid1. DataSource:= DataSource1;
        //-------------------------------------------------------------------------
        Код на  BCB:
        DataSource1->DataSet= Table1;
        Table1->DatabaseName="MyDB";
        Table1->TableName= d1;
        Table1->TableType = ttDBase;
        DBGrid1->DataSource= DataSource1;

      В Table1 через Fields Editor добавим все поля
      (можно и через AddFieldDef но это есть во многих FAQ поэтому не
      будем поднимать эту тему
      ),
      тоже сделаем и в DBGrid1.

      На событие OnClick Button1 – в ListBox1 загрузим текущее состояние нашего
      aliasa он ничем не будет отличаться от первоначального.
      ExpandedWrap disabled
        Код на Delphi:
        procedure TForm1.Button1Click(Sender: TObject)
        begin
        Session.GetAliasParams("MyDB ",ListBox1.Items);
        Edit1.Text:=ListBox1.Items.Strings[0];
        end;
        //-------------------------------------------------------------------------
        Код на  BCB:
        void __fastcall TForm1::Button1Click(TObject *Sender)
        {
        Session->GetAliasParams("MyDB",ListBox1->Items);
        Edit1->Text=ListBox1->Items->Strings[0];
        }


      При этом в поле Edit1 мы имеем значение Path=с:\dbf\ ,
      изменим это значение на Path=с:\dbf1\

      На событие OnClick Button2 выполним следующий код
      ExpandedWrap disabled
        Код на Delphi:
        procedure TForm1.Button2Click(Sender: TObject)
        begin
        ListBox1.Items.Strings[0]:=Edit1.Text;
        /* Table1.Close();*/
        Session.Close();
        Session.ModifyAlias("MyDB",ListBox1.Items);
        Session.Open();
        Table1.Open();
        end;
        //-------------------------------------------------------------------------
        Код на  BCB:
        void __fastcall TForm1::Button2Click(TObject *Sender)
        {
        ListBox1->Items->Strings[0]=Edit1->Text;
        /*Table1->Close();*/
        Session->Close();
        Session->ModifyAlias("MyDB",ListBox1->Items);
        Session->Open();
        Table1->Open();
        }

      Этот код делает следующее:
      1.Загружает строку с параметром path в ListBox1
      2.Закрывает Session и загружает новые параметры (При закрытии сессии все
      открытые таблицы будут закрыты.)
      3.Отрывает Session с новыми параметрами
      4.Отрываем таблицу . (Если таблиц много то можно пройтись в цикле если это
      необходимо и открыть их.)
      Ну вот и все - Все ваши таблицы загружены из другого каталога.
      При этом в BDE аминистраторе у Вас остался первоначальный путь.
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0193 ]   [ 16 queries used ]   [ Generated: 19.03.24, 07:54 GMT ]