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

Posted

技术标签:

【中文标题】Paradox DB:如何以编程方式更改数据库路径【英文标题】:Paradox DB: how to change database path programmatically 【发布时间】:2014-07-25 08:31:10 【问题描述】:

我想以编程方式更改我的数据库路径。我有一个包含多个表的文件夹,我的用户应该能够从一个数据库更改到另一个数据库。例如: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】:

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

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

TDatabase.DriverName 设置为STANDARD

确保 TDatabase.Connected 设置为 false。

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

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

如果您需要多用户访问,那么您还需要在嵌入式 TDatabase 会话组件上设置一个 netdir。

这就是它在 Delphi 中的样子:

  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 属性中创建一个默认会话组件。

【讨论】:

谢谢,使用 Session 做这个很复杂。我会寻找其他解决方案。 您可以使用 TSession,但这不是必需的。上面的代码具体没有使用TSession。

以上是关于Paradox DB:如何以编程方式更改数据库路径的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式更新/更改 s-s-rS 数据源(未共享)

如何以编程方式更改 Android 中的字符串资源 xml 值?

以编程方式更改 SSIS 上备份数据库任务的备份文件路径

使用 microsoft.jet.oledb.4.0 从 paradox db 过滤日期字段

如何实现Paradox数据库文件(*.db)到sql server数据库的导入----要求用代码,不用向导

是否可以在 .Net 应用程序中读取 Paradox 7.x .db 文件?