我想以编程方式更改数据库路径。我有一个包含多个表的文件夹,我的用户应该能够从一个数据库更改为另一个数据库。例如: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;
我将目录设置为新目录,但我的应用程序仍使用旧表。
这里有什么问题?
由于
答案 0 :(得分:0)
对于简单的Paradox访问,我建议您将TDatabase
组件与TTable
或TQuery
一起使用。不要使用别名。
将TDatabase.DatabaseName
设置为您想要的任何内容。您可以使用此名称将TTable
和TQuery
组件链接到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
属性中创建默认会话组件。