Paradox DB:如何以编程方式更改数据库路径

时间:2014-07-25 08:31:10

标签: c++builder paradox

我想以编程方式更改数据库路径。我有一个包含多个表的文件夹,我的用户应该能够从一个数据库更改为另一个数据库。例如:active db:D:\ app_db \ db1可能会更改为D:\ app_db \ db2

 void change_db(std::string dir)
 { 
  char c[MAX_PATH]={0};  
  TStringList *list= new TStringList();
  list->Clear();
  sprintf(c,"PATH=%s",dir.c_str());
  list->Add(c);
  Session->ModifyAlias(dbalias,list);
  delete list;
  Table1->DatabaseName = dbalias;
}      

当我运行上面的例程时,表格仍然包含旧路径!

Table1->Database->Directory = c;

我将目录设置为新目录,但我的应用程序仍使用旧表。

这里有什么问题?

由于

1 个答案:

答案 0 :(得分:0)

对于简单的Paradox访问,我建议您将TDatabase组件与TTableTQuery一起使用。不要使用别名。

TDatabase.DatabaseName设置为您想要的任何内容。您可以使用此名称将TTableTQuery组件链接到TDatabase组件。其相应的DatabaseName属性应设置为与TDatabase组件相同的名称。

TDatabase.DriverName设为STANDARD

确保TDatabase.Connected设置为false。

要设置数据库的路径,请使用TDatabase.Params字符串列表。

首先通过调用Params上的Clear方法清除列表,然后通过调用Add方法设置路径。

如果您需要多用户访问权限,则还需要在嵌入式TDatabase会话组件上设置netdir。

这就是德尔福的样子:

  MyDatabase.Close;
  MyDatabase.Params.Clear;
  MyDatabase.Params.Add('PATH=' + PathToYourDatabase);
  // NetFileDir can be the same as the database, but I recommend a different folder.
  // Only needed for multiuser access. All users must use the same folder.
  MyDatabase.Session.NetFileDir := PathToYourNetFileDir;
  MyDatabase.Open;

如果您只需要一个与数据库的连接并且只从主UI线程访问数据库,则无需添加TSession组件。 TDatabase会自动在Session属性中创建默认会话组件。