【问题标题】:ConnectionString DataSource='%' property in DelphiDelphi 中的 ConnectionString DataSource='%' 属性
【发布时间】:2017-08-31 12:10:17
【问题描述】:

我正在尝试动态创建我的连接字符串,但我不知道如何继续在 PC 上本地读取 Datasource 属性位置,例如当程序和数据库从一台 PC 移动到另一台时到达数据库更改,所以我希望能够直接从数据库现在所在的 pc 读取。基本上我希望能够从电脑上动态获取粗体部分。我对 delphi 还是比较陌生,因此非常感谢您详细说明正在发生的事情以及我需要做的事情。

连接字符串如下DataSource是我希望能够动态接收的

con.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source= C:\Users\db.mdb; Mode=ReadWrite;Persist Security Info=False;';

【问题讨论】:

  • 这也不例外。请提供实际错误。
  • 有人建议对帖子进行编辑

标签: database delphi datasource connection-string


【解决方案1】:

您的应用程序应该存储对数据库位置的引用(例如在注册表中)并根据需要连接连接字符串,或者将数据库保存在始终可以找到的标准位置(例如 @ 987654321@ 文件夹)并将您的连接字符串指向那里。

在任何情况下,您都应该从不Program Files 中保留可写数据。自 Windows Vista 以来,应用程序一直被强制写入 Program Files 文件夹之外的文件。应用程序文件夹是严格只读的。唯一适合写入 Program Files 的时间是在安装期间。

保存在注册表中...

var
  R: TRegistry;
begin
  R:= TRegistry.Create(KEY_READ);
  try
    R.RootKey:= HKEY_LOCAL_MACHINE;
    if R.OpenKey('Software\MySoftware', False) then begin
      try
        con.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+R.ReadString('MyDatabasePath')+'; Mode=ReadWrite;Persist Security Info=False;';
      finally
        R.CloseKey;
      end;
    end;
  finally
    R.Free;
  end;
end;

保存在 ProgramData...

con.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+TPath.Combine(TPath.GetPublicPath, 'MySoftware\db.mdb')+'; Mode=ReadWrite;Persist Security Info=False;';

PS - 请原谅我的伪代码,它非常粗糙,但只是为了演示。

【讨论】:

  • 对于便携式应用程序,它应该与可执行文件并排
  • @David True,但除非 OP 声称他们的应用程序是可移植的,否则我假设它就像安装到程序文件中的任何其他软件一样。根据现有数据库的位置,我不认为它是可移植的。
  • 没错,我认为保存在 %AppData% 更好
猜你喜欢
  • 1970-01-01
  • 2018-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多