Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.16.66.206] |
|
Сообщ.
#1
,
|
|
|
Изменение пути к БД через TSession.
Маленькое отступление - TSession это оболочка для работы с BDE API Как поменять путь к базе данных если Alias создан ? Настройки Alias’а (псевдоним ‘MyDB’) в BDEAdmin.exe такие Path='с:\dbf\' ENABLE BCD = FALSE DEFAULT DRIVER = DBASE Например : Есть два каталога с:\dbf\, с:\dbf1\ где расположены файлы dbf c одинаковой структурой но разным содержанием записей. В обоих каталогах есть файлы – d1.dbf, d2.dbf …. dn.dbf Можно использовать явное указание к БД. Код на Delphi: Table1.DatabaseName='MyDB'; Table1.TableName:= 'с:\dbf1\d1.dbf'; Table1.TableType := ttDBase; …… Table1.TableName:= 'с:\dbf1\dn.dbf' Table1.TableType := ttDBase; Код на 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) . Код на 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 он ничем не будет отличаться от первоначального. Код на 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 выполним следующий код Код на 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 аминистраторе у Вас остался первоначальный путь. |