我已经制作了可以对数据库执行常规操作的GUI(加载现有数据,修改或添加新条目)。使用原始C++
在WinAPI
中创建GUI。
问题出在连接字符串中。它是硬编码的,因此它强制用户将数据库保存在GUI所在的同一文件夹中。以下是C++
中使用ADO
:
static wchar_t *bstrConnect= L"Provider=Microsoft.ACE.OLEDB.12.0;\
Data Source = .\\MyDatabase.accdb";
我希望允许用户在数据库所在的位置有自由选择,但我不知道如何修改应用程序/连接字符串来执行此操作。
我试图在这里搜索示例,并在网上搜索但没有成功。也许我是一名初学者并且自学成才与此有关。
是否有示例/教程/文档能够向我展示处理此类“场景”的正确原则?
答案 0 :(得分:1)
您可能需要将.\\MyDatabase.accdb
部分连接字符串替换为该数据库文件的完整路径。目前它是一条相对路径。
换句话说,您需要使用可用的字符串格式化/连接函数在运行时构建连接字符串。
答案 1 :(得分:1)
我要做的就像 wallyk 之前建议的那样,将其保存到某种配置文件中,然后在需要时读取。
例如,最简单的方法可能是使用包含以下内容的标准.INI文件:
[Database]
File=".\MyDatabase.accdb"
这类文件可以与WinApi函数WritePrivateProfileString和GetPrivateProfileString一起使用。
当然它可以是任何类型的文件,只需要它就像简单或复杂一样。或者你甚至可以在注册表中保存这些数据。另一个问题是在哪里保存它,这可能是另一个完整的讨论(这里已经解决了很多问题)。简而言之,这个想法是将它存储在可以在运行时读取而不是硬编码的地方。
就代码而言,这意味着,在程序需要连接字符串的每个地方,而不是读取硬编码常量,您将调用将返回它的函数。该函数反过来将构建它(封装所有逻辑以从配置文件中获取它),执行以下操作:
答案 2 :(得分:0)
您的应用程序不必使用硬编码。设计配置策略并实施它。
例如,在当前用户的主目录,用户的配置子目录,用户的组配置目录,系统配置目录中查找一个,和/或显示默认配置列表。