2012-01-02 34 views
1

我在哪里可以获得有关ODBC的高质量信息&访问数据库?哪里可以获得有关ODBC和Access数据库的高质量信息?

多年来,我一直在使用ODBC从MFC/C++/Java的各种项目。

目前,我有一个C++/MFC项目,它使用定制的MFC层动态连接到连接到Access 2000 dbm文件的ODBC DSN。

这通常起作用。

不过,我通常得到警告,如:

DBMS:ACCESS版本:04.00.0000 ODBC驱动程序管理器版本: 03.80.0000可选功能没有实现国家:S1C00,本机:106,产地: [Microsoft] [ODBC Microsoft Access 驱动程序]

警告:驱动程序不支持请求的并发。可选 功能没有实现 状态:S1C00,本机:106,产地:[微软] [ODBC Microsoft Access中 驱动程序]

现在,我得到以下时,我们的软件试图创建一个视图:

一般警告无法打开注册表项'Temporary(volatile)Jet DSN for pr ocess 0x18fc Thread 0xc0 DBC 0x8c4cfc Jet'。 状态:01000,本机:1,产地:[微软] [ODBC Microsoft Access驱动程序]

DBMS:ACCESS版本:04.00.0000 ODBC驱动程序管理器版本: 03.80.0000执行SQL:创建视图SPEC作为选择CALNAME如TEST,CARDNUMBER,CARTONSTYLE如纸板箱,CCAL为FLUTE,CORRDIR, CUSTOMERID,说明作为DESCRIPTIO,设计师,DESIGNNUM,JOINTSIZE, JOINTTYPE,PANEL_D作为深度,PANEL_L长度,PANEL_W如WIDTH, RULRULX如DSIZEX,RULRULY如DSIZEY,SHEETUX as SIZEX,SHEETUX as SIZEY,SHEETX as GROSSX,SHEETY as GROSSY from“外观设计”,其中 DESIGNNUM不为空
警告:ODBC成功与信息,驱动程序的 SQLSetConnectAttr失败状态:IM006,本机:0,产地:[微软] [ODBC 驱动程序管理器]

一般警告不能打开注册表关键字“Temporary(挥发性)喷气 DSN公关ocess 0x18fc线程将0xC0 DBC 0x8c4cfc喷气机”。 状态:01000,本机:1,产地:[微软] [ODBC Microsoft Access驱动程序]

在第一部分,关于关于可选功能没有实现警告和并发性状态没有实现(也许是相同的基本问题),我不知道我的软件甚至要求什么并发功能?什么并发状态是合适的?人们如何要求“正确”的?是否有Windows版本的表与适当的并发状态请求?

对于第二部分,关于由于未能打开注册表项而导致创建视图的具体失败:呵呵?!谁未能打开什么注册表项?

我发现了一些需要在“Windows NT临时文件夹”上给予IUSR完全权限的信息。这听起来像是桌面应用程序需要关注的一个可怕问题。在操作用户可读写路径中存在的数据库文件时,使用ODBC DSN的桌面应用程序如何关心用户权限?需要更多权限才能允许用户执行此SQL?由于用户已经可以添加和删除数据库中现有表中的列和行,还需要做些什么?

此代码用于在XP下工作。所以我必须假设Vista和/或Win 7增加了一些安全性,现在阻止了这个功能。

我感兴趣的是:从微软

  1. 标准基准材料,实际上记录了他们不同的ODBC访问接口,期权,版本主机的问题,等等。
  2. 关于关于并发警告的具体信息。
  3. 有关尝试在access 2000 dbm中创建视图时显式权限失败的特定信息。
  4. 对上述进行现代化改造的建议,无需彻底检修或技术更换。即我将愉快地将Access文件更新到2003或2007或其他任何版本,或者将后端切换到SQL Server Lite,但我无法证明从ODBC更改为某些替换中间件(这只是不值得的风险)。

感谢您的任何想法或帮助您可能必须提供。

+0

我没有一个原始问题的答案,但至于点#4。我已经做了几次从Access到SQL Server的转换。由于整体数据库模式的转移只会进行很小的修改,因此转换非常轻松。大部分应用程序SQL也很容易迁移到存储过程。 – 2012-01-02 17:51:34

+0

谢谢。我相信这应该是相当直接的。最大的问题是将SQL Server Lite与我们的安装程序集成,仔细检查任何法律问题,并在我们的应用程序生成的SQL中实施任何需要的语法更改。这不是微不足道的,如果我毫无疑问地知道上述所有问题都可以通过这样的改变来解决,那将更容易证明自己的合理性。最后,需要使用当前正在使用的Access数据库的现有客户的迁移机制,这显然使事情变得复杂。叹。 :P – Mordachai 2012-01-02 18:38:59

回答

1

是的,远程客户端的迁移可能是一个痛苦。部分原因是我绝对尽力避免访问不惜一切代价。我已经完成了这两种方式之一。 1)使用WebEx(或其他一些在线会议程序)抓取远程机器的控制权,以确保根据需要进行迁移。 2)在新代码中构建一个检查数据库是否已迁移的检查。如果新的数据库(SQL Server)显示为未找到,那么该应用程序会关闭迁移工具。但是,这意味着构建和完善迁移实用程序和脚本以使迁移自动化,因为许多事情可能会出错。

我刚开始做的一件事就是在应用程序兼容表中创建一个应用程序兼容性表。这样代码可以检查以确保数据库模式版本匹配。我还将包含所有必需SQL的另一个表(加密)升级(迁移)到新版本。这样,应用程序可以确定数据库需要迁移,并可以通过脚本运行来完成。

我真的希望这有助于。

+0

我很欣赏这些反馈和想法。我仍然在围墙上。我没有实时分配此迁移周期的预算。这可能必须是一个付费选项... – Mordachai 2012-01-03 14:20:24

1

我们有一个动态使用ODBC访问数据库的应用程序。

  1. 微软有关ODBC好的文档 http://msdn.microsoft.com/en-us/library/s9ds2ktb(v=vs.80).aspx
    你也应该看看的CRecordset和的CDatabase文档 http://msdn.microsoft.com/en-us/library/1hkkwdf0(v=vs.80).aspx
    http://msdn.microsoft.com/en-us/library/2dhc1abk(v=VS.80).aspx

  2. 对于并发性问题,当你打开它常发生带有错误选项的CRecordset。我在哪里工作,我们平时打开记录与以下选项

-

RecordsetToUse.Open(CRecordset::dynaset, "SQL Statement or NULL to use the DefaultSQL", CRecordset::skipDeletedRecords); 

如果使用快速只读访问记录,你也可以使用

RecordsetToUse.Open(CRecordset::forwardOnly, "SQL Statement or NULL to use the DefaultSQL", CRecordset::readOnly); 

3。对于Create View问题,似乎ODBC不支持创建视图......另一方面,我认为可以使用ADODB(http://www.codeproject.com/KB/database/adoclasses .aspx)要做到这一点

+0

是的,我认为这个问题与ODBC/Jet无关,尽管我以前的担忧,我现在认为这是一个MFC问题(可能直接关系到我们的选择,重新使用打开数据库/记录集)。感谢上述内容,我会通过比较来看看我们正在做什么。我们的代码很旧,可能有一些来自VC++ 6.0的旧的MFC垃圾! – Mordachai 2012-01-03 22:19:51

+0

我们的软件使用动态集,这是唯一一个看起来正常工作的动态集。在进行read-onoly查找时,可能会明确使用forwardOnly,但不值得为我们的目的付出努力。所有其他模式彻底失败或以只读记录集结束。警告显示为MFC的迭代方法的一部分,以确定它应该与当前驱动程序一起使用的并发性。它会尝试一个,警告它失败了,并尝试另一个,直到它成功或耗尽可能性。这就是并发警告的来源。 – Mordachai 2012-01-04 16:02:54

+0

关于注册表失败的Jet投诉来自何处......也许是驱动程序本身,我完全不清楚。似乎可能。但它似乎并没有干涉......只是让它看起来像是有一个问题,当真的没有。 这整件事花了很多小时来确定它运行良好,并且所有消息看起来都很平常。呸。 :( – Mordachai 2012-01-04 16:04:32

相关问题