Delphi xe5中dbxdrivers.ini和dbxconnections.ini文件的部署

Delphi xe5中dbxdrivers.ini和dbxconnections.ini文件的部署,delphi,vcl,delphi-xe5,dbexpress,Delphi,Vcl,Delphi Xe5,Dbexpress,我们有一个D7 vcl应用程序,它使用dbexpress连接到oracle(通过用于dbexpress的devart oracle驱动程序)。我们将此应用程序转换为XE5。在D7中,dbxdrivers.ini和dbxconnections.ini文件已部署在与exe相同的目录中,应用程序从该位置读取它们,而无需任何干预(即dbexpress自动找到所有设置) 在XE5中,部署dbxconnections.ini文件与D7中的工作方式不同,换句话说,当两个ini文件部署在与exe相同的文件夹中时

我们有一个D7 vcl应用程序,它使用dbexpress连接到oracle(通过用于dbexpress的devart oracle驱动程序)。我们将此应用程序转换为XE5。在D7中,dbxdrivers.ini和dbxconnections.ini文件已部署在与exe相同的目录中,应用程序从该位置读取它们,而无需任何干预(即dbexpress自动找到所有设置)

在XE5中,部署dbxconnections.ini文件与D7中的工作方式不同,换句话说,当两个ini文件部署在与exe相同的文件夹中时,应用程序似乎无法使用/查找它们

根据我的观察和阅读delphi代码,我需要调用TSQLConnection.LoadParamsFromIni方法并传递dbxconnections.ini文件名,否则TSQLConnection对象最终从注册表读取位置:HKCU\Software\Embarcadero\BDS\12.0\DBExpress\Connection注册表文件。dbexpress将从exe目录(如果存在)读取dbxdrivers.ini

有什么想法吗?你能确认一下这是怎么做的吗

谢谢

更新:经过更多测试后,我看到了以下行为:

  • 如果HKEY_CURRENT_USER\Software\Embarcadero\BDS\12.0\DBExpress密钥根本不存在,并且dbx***.ini文件仅部署在exe文件夹中,XE5应用程序将使用它们,而无需调用LoadParamsFromIni
  • 如果HKEY_CURRENT_USER\Software\Embarcadero\BDS\12.0\DBExpress项存在,且所有设置(连接注册表文件等)都指向公用文件夹中的ini文件,并且dbx***.ini文件仅部署在exe文件夹中,然后应用程序不会从应用程序文件夹读取ini文件,我需要显式调用LoadParamsFromIni

我认为调用LoadParamsFromIni比依赖dbexpress的默认行为更可靠。

我们在DBXDrivers.ini中遇到了类似的问题。我们发现了一篇很好的文章,介绍了如何在没有DBXDrivers.ini()的情况下进行部署。我们对它进行了一些修改,如图所示(从“这是
DBXRegDB
单元”一段开始阅读)。。。你真的需要它吗?是否向用户显示所有已定义的连接,是否在DBXConnections.ini中存储数据库名称、用户名和密码?您似乎可以在运行时设置连接参数,并避免使用DBXConnections.ini。不过,如果你不知道你的应用程序是如何使用它的,那就很难说了。@JamesL。我只存储数据库名称和一些其他特定于驱动程序的参数。当然,我没有存储用户名和密码。最终,我希望能够在不更改应用程序的情况下更改连接。