使用ODBC从位于Program Files文件夹中的数据库中读取

时间:2010-04-25 08:55:05

标签: vb6 crystal-reports odbc virtualstore

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

但我们现在希望使用Crystal Reports XI来表示数据库中的数据。我们的想法是不将这些数据从我们的程序传递给CR,而是让CR使用系统DSN通过ODBC从数据库中检索它。通过这种方式,我们希望为用户提供更灵活的设计自己的报告。我们确实希望确保在用户安装程序或程序调用Crystal Report时正确配置这些系统DSN。

有没有一种聪明的方法可以使用系统变量来执行此操作,而不必编写检查操作系统版本的例程,是否在操作系统上启用了UAC,是否已取消对Program Files文件夹的写入限制等然后调整他的系统DSN指向C:\ Program Files \ OurApp \ Data文件夹,或C:\ Users \ User \ AppData \ VirtualStore \ Program Files \ OurApp \ Data文件夹?

建议采用完全不同的方法!

4 个答案:

答案 0 :(得分:3)

新应用程序应该有一个指定requestedExecutionLevel的应用程序清单。这声明您的程序“Vista aware”并绕过了虚拟化的尝试。

在安装过程中,您应该创建一个像[CommonAppData] \ Company \ App \ Full这样的文件夹,并在此文件夹上设置安全性,以允许Everyone(或用户)进行完全访问。将您的数据库放入此文件夹。

对于MDB,您可以在此处删除数据库。对于客户端/服务器数据库,在此处放置UDL file。另请参阅Use Universal Data Link (.udl) Files

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

使用建议的方法几乎可以用于除最旧的Win95计算机以外的任何其他方法。

答案 1 :(得分:1)

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

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

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

您是否可以在运行时(在VB6中为App.Path)简单地读取安装路径,然后向Crystal Reports发送不同的连接字符串?

答案 2 :(得分:1)

虚拟存储似乎可以处理所有事情,因此即使数据库已重新定位到虚拟存储,您也可以将DSN公然指向C:\ Program Files \ MyApp \ Data \ mydb.mdb。

答案 3 :(得分:0)

当前版本


您可能想要检测系统正在运行的当前版本的Windows

这将帮助您确定正确的路径

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

  

阅读注册表项 -

     

HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows NT \ CurrentVersion \ CurrentBuildNumber
   HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows NT \ CurrentVersion \ CurrentVersion
   HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows NT \ CurrentVersion \ EditionID
   HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows NT \ CurrentVersion \ ProductId    HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows NT \ CurrentVersion \ BuildLabEx

CurrentBuildNumber是您的Windows内部版本号。那么CurrentVersion值就是你的windows版本,即你的windows 7,windows vista,windows xp等版本的版本ID和ProductId,以了解windows-edition和product-id。

  

密钥BuildLabEx包含内部版本号和修订号。

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

  

您可能也对此感兴趣:
  How to detect true Windows version?

古德纳克!!