【发布时间】:2017-05-22 23:57:37
【问题描述】:
我的 previous question 令人困惑且表述不当,这里是“真正的”问题。
我想知道如何使用 Firedac 在运行时设置到位于我的应用程序文件夹子文件夹中的 sqlite 数据库的相对路径。
正如Jerry Dodge 所说:
任何应用程序都不应依赖同一目录中的可写数据。此外,即使您这样做了,您也应该确保所有路径至少都与应用程序相关。
目前,我想到的应用程序是可移植的,我希望将数据库文件存储在主 exe 文件夹的子文件夹中。
在我的主窗体的 Form.Create 事件上,首先使用
path := ExtractFilePath(Application.ExeName);
然后是 FDConnection :
with FDConnection1 do begin
Close;
with Params do begin
Clear;
Add('DriverID=SQLite');
Add('Database='+path+'Data\sqlite.db');
end;
Open;
end;
我不断收到“无法打开数据库文件”的错误消息。
我不想在 FiredDac 连接编辑器中设置数据库文件的路径,因为那样它将是绝对的并绑定到我的机器,对吧?
我如何设置这个数据库文件的路径,以便它可以在任何配置中工作,无论用户将应用程序文件夹放在哪里?
提前谢谢大家
数学
【问题讨论】:
-
确保你设置了`FDConnection1.DriverName:='SQLite'`。即使您的数据库文件不在 Win32\debug\Data 文件夹中,它也应该在您调用
FDConnection1.Open时创建,所以您会遇到另一个问题 - 如果您的用户删除您的 db 文件并打开一个新的空白文件怎么办? -
感谢迈克尔花时间回答。是的,驱动程序已设置,数据库文件在指定文件夹中。在这个问题上摸不着头脑。
-
如果重命名文件会发生什么?是否创建了一个新的?如果是这样,您尝试打开的那个可能已损坏,或者由于某种原因 FireDAC 无法读取。如果没有,应用程序写入该路径可能会有一些麻烦(该子文件夹必须存在,它没有被创建)。
-
@MichaelGendelev 和 Victoria 你说的都是对的,虽然没有找到数据库,但创建了一个新的空数据库,这让我意识到问题出在我指定的路径上。我发布了我的解决方案,作为未来可能遇到相同问题的用户的答案。感谢您的提示
标签: sqlite delphi relative-path firedac