我们有一个将其数据库文件存储在程序文件目录的子文件夹中的应用程序。这些文件被重定向到Vista和Windows 7中的VirtualStore。我们使用Microsoft DataReports(VB6)代表数据库中的数据。到现在为止还挺好。

但是我们现在想使用Crystal Reports XI来表示数据库中的数据。我们的想法是不要将这些数据传递给我们的程序中的CR,而是要使用AA系统DSN通过ODBC将其从数据库中进行RETRERE。通过这种方式,我们希望向用户展示设计自己的报告时的灵活性。我们确实要确保的是,当用户安装程序或程序调用Crystal Report时,将正确配置这些系统DSN。

是否有一种明智的方法可以使用系统变量进行此操作,而不必编写检查OS-Version的例程,是否在OS上启用了UAC,是否已升级程序文件文件夹上的写入限制,等等然后调整系统DSN指向C: Program Files ourapp Data文件夹或C: Users user appData virtualstore virtualstore program Files ourapp urepp data文件夹?

也欢迎对完全不同的方法提出建议!

有帮助吗?

解决方案 3

似乎虚拟商店照顾一切,因此您可以公然将DSN指向C: Program Files MyApp data mydb.mdb,即使数据库已将数据库移至虚拟存储。

其他提示

新应用程序应具有指定请求executionlevel的应用清单。这会声明您的程序“ Vista Aware”,并绕过虚拟化的尝试。

在安装过程中,您应该创建一个文件夹,例如[CommonAppData] Company app full,并在此文件夹上设置安全性,以允许每个人(或用户)的完整访问权限。将您的数据库放入此文件夹中。

对于MDB,您可以在此处删除数据库。对于客户端/服务器数据库 UDL文件 这里。也看 使用通用数据链接(.UDL)文件.

ODBC和DSN是非常过时的技术。

使用建议的方法,除了最古老的Win95计算机以外,几乎应该适用。

这是访问数据库吗?您尚未指定。

对于访问数据库,安装时无需将DSN指向特定数据库。您可以在运行时修改连接字符串以指向不同的数据库(细节)。例如

Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\mydatabase.mdb;Uid=Admin;Pwd=;

您可以在运行时阅读安装路径吗? App.Path)然后将另一个连接字符串发送给Crystal Reports?

当前版本


您可能想检测到 Windows的电流转换 系统正在运行。

反过来,这将帮助您确定 正确的路径.

如何找到Windows版本,构建和修订号?

阅读注册表键 -

hkey_local_machine Software Microsoft Windows NT CurrentVersion CurrentBuildNumber
hkey_local_machine software Microsoft Windows NT Currentversion Currentversion
HKEY_LOCAL_MACHINE SOFTWORD MICROSOFT WINDOWS NT CurrentVersion EditionID
HKEY_LOCAL_MACHINE SOFTWORD MICROSOFT WINDOWS NT CurrentVersion Productid hkey_local_machine software Microsoft Windows NT CurrentVersion buildlabex

CurrentBuildNumber是您的Windows构建编号。然后,CurrentVerion值是您的Windows版本,即Windows 7,Windows Vista,Windows XP等版本。

密钥buildLabex包含构建编号和修订号。

例如,在值6001.17387.x86fre.vistasp1_gdr.070927-1921中,
前四位数字代表构建编号,即6001和
接下来的五位数字代表Windows修订号,即17387。
X86告诉您您正在运行32位操作系统。

您可能对此感兴趣:
如何检测真正的Windows版本?

祝你好运!!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top