EaBIM一直以来积极响应国家“十二五”推进建筑业信息化的号召,对建筑领域的信息技术开展深入技术交流和探讨!致力于打造“BIM-建筑师-生态技术”三位一体综合资源交流共享平台,希望为BIM与可持续设计理念及技术的普及做出微小的贡献!!!

EaBIM

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
查看: 1252|回复: 8
打印 上一主题 下一主题

如何在64位操作系统里让Revit的命令连接Access数据库?

[复制链接]

1514

主题

7465

帖子

1万

积分

admin

Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10Rank: 10

积分
12396

社区QQ达人

跳转到指定楼层
楼主
发表于 2014-1-15 14:13:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在Revit的外部命令里打开一个数据库连接,使用了下面的代码。

public class RevitCommand : IExternalCommand
{
    public Result Execute(ExternalCommandData commandData, ref string messages, ElementSet elements)
    {

      UIApplication app = commandData.Application;
      Document doc = app.ActiveUIDocument.Document;

      try
      {
        DataRow dr;
        //连接字符串   
        string strConn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\test\test.mdb;";
        OleDbConnection odcConnection = new OleDbConnection(strConn);

        //打开连接对象   
        // 此处无法正常打开
        odcConnection.Open();

        odcConnection.Close();
      }
      catch(Exception ex)
      {
        //提示The 'Microsoft.Jet.OLEDB.4.0' provider is not registered on the local machine.
        TaskDialog.Show("error", ex.Message);
      }   
      return Result.Succeeded ;
    }
}


在64位操作系统里却提示:The 'Microsoft.Jet.OLEDB.4.0' provider is not registered on the local machine. 或者与此同意思的中文。

使用与上面相同的数据库访问代码,可以在64位操作系统的.NET 的exe中打开数据库连接。下面代码是一个按钮的处理函数。

    private void button1_Click(object sender, EventArgs e)
    {

      try
      {
        //连接字符串   
        string strConn = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\test\test.mdb;";
        OleDbConnection odcConnection = new OleDbConnection(strConn);

        //打开连接对象   
        odcConnection.Open();

        odcConnection.Close();
      }
      catch (Exception ex)
      {
          MessageBox.Show(ex.Message,"error" );
      }  
    }
  }



如何解决Revit下64位操作系统的数据库连接问题?



早期Microsoft没有提供64位数据库引擎,后来才提供了为Office服务的数据库引擎。默认情况下没有安装到64位的操作系统中。在Revit的命令中,访问数据库,需要有与操作系统相配的office数据库引擎类型。你可以在这个页面下载64位的数据库访问引擎

http://www.microsoft.com/downloa ... ang=en&id=13255

在上面的页面中提到,我们需要使用odbc数据库访问方式来访问数据库。

下面是Revit代码

[csharp] view plaincopy
  [TransactionAttribute(Autodesk.Revit.Attributes.TransactionMode.Manual)]  
public class RevitCommand : IExternalCommand  
{  
    public Result Execute(ExternalCommandData commandData, ref string messages, ElementSet elements)  
    {  

      UIApplication app = commandData.Application;  
      Document doc = app.ActiveUIDocument.Document;  

      try  
      {  
        //连接字符串      
        string Driver = @"Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=c:\test\test.mdb;";  //  

        OdbcConnection odbcConnection = new OdbcConnection();  
        odbcConnection.ConnectionString = Driver;  

        //打开连接对象      
        odbcConnection.Open();  

        odbcConnection.Close();  
      }  
      catch(Exception ex)  
      {  
                TaskDialog.Show("error", ex.Message);  
      }      
      return Result.Succeeded ;  
    }  
}  





那为什么在.NET的exe程序却能打开数据库连接呢? 到默认情况下,.NET程序的目标平台是x86, 也就是32位的。32位oledb数据库引擎已经安装到系统中。所以exe中可以顺利打开数据库连接。





叶雄进  

Autodesk ADN

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 转播转播 分享分享 分享淘帖 支持支持 反对反对

相关帖子

工作时间:工作日的9:00-12:00/13:30-18:00,节假日不在线,请勿留言

13

主题

730

帖子

1691

积分

BIM经理

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

积分
1691
4F
发表于 2014-2-15 14:30:44 | 只看该作者
(*^__^*) 嘻嘻……

5

主题

884

帖子

1541

积分

BIM经理

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

积分
1541
5F
发表于 2014-2-15 14:36:27 | 只看该作者
(*^__^*) 嘻嘻……

6

主题

713

帖子

1201

积分

BIM经理

Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6Rank: 6

积分
1201
9F
发表于 2014-2-20 14:05:09 | 只看该作者
路过!!! 不发表意见……
*滑块验证:
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|EaBIM网 ( 苏ICP备2020058923号-1  苏公网安备32011502011255号

GMT+8, 2024-9-29 10:18

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表