寻求MS Project 2016替代ODBC连接Oracle数据库方案
我来分享几个经过验证的方案,帮你解决MS Project 2016和Oracle之间替代ODBC的交互问题:
1. VBA自动化 + Oracle OLE DB驱动
这是最直接的替代方案,利用Project 2016内置的VBA支持,通过Oracle OLE DB驱动直接与数据库交互。核心思路是将Project文件序列化(比如保存为XML格式)后存入Oracle的CLOB字段,反向读取时再从CLOB中提取XML并加载到Project中。
关键步骤示例:
- 连接Oracle数据库:使用OLE DB连接字符串(需确保已安装Oracle OLE DB驱动)
Dim conn As Object Set conn = CreateObject("ADODB.Connection") conn.Open "Provider=OraOLEDB.Oracle;Data Source=YOUR_ORACLE_DB;User Id=YOUR_USER;Password=YOUR_PWD;" - 保存Project到Oracle:将当前项目保存为XML临时文件,读取文件内容后写入CLOB字段
Dim tempXmlPath As String tempXmlPath = Environ("TEMP") & "\temp_project.xml" ActiveProject.SaveAs tempXmlPath, pjXML ' 读取XML内容 Dim xmlContent As String Open tempXmlPath For Input As #1 xmlContent = Input$(LOF(1), 1) Close #1 ' 插入到Oracle表(假设表名为PROJECTS,字段ID为项目标识,PROJECT_DATA为CLOB类型) Dim cmd As Object Set cmd = CreateObject("ADODB.Command") cmd.ActiveConnection = conn cmd.CommandText = "INSERT INTO PROJECTS (ID, PROJECT_DATA) VALUES (?, ?)" cmd.Parameters.Append cmd.CreateParameter("ID", adVarChar, adParamInput, 50, "PROJ_001") cmd.Parameters.Append cmd.CreateParameter("PROJECT_DATA", adLongVarChar, adParamInput, Len(xmlContent), xmlContent) cmd.Execute - 从Oracle加载Project:从CLOB字段读取XML内容,写入临时文件后打开
Dim rs As Object Set rs = CreateObject("ADODB.Recordset") rs.Open "SELECT PROJECT_DATA FROM PROJECTS WHERE ID = 'PROJ_001'", conn If Not rs.EOF Then xmlContent = rs("PROJECT_DATA").Value Open tempXmlPath For Output As #1 Print #1, xmlContent Close #1 Application.FileOpen tempXmlPath End If rs.Close conn.Close
注意:需在VBA编辑器中引用Microsoft ActiveX Data Objects x.x Library,或使用晚绑定(如示例中的CreateObject)避免版本依赖。
2. 借助Project Server配置Oracle后端(企业级场景)
如果你的团队使用Project Server,可以将其配置为使用Oracle作为内容数据库(尽管微软官方更推荐SQL Server,但部分Project Server版本支持Oracle作为后端)。Project 2016通过与Project Server集成,间接实现项目数据在Oracle中的存储和读取,完全替代原ODBC流程。
核心要点:
- 确认Project Server版本与Oracle版本的兼容性
- 按照Oracle数据库配置指南部署Project Server,配置完成后Project 2016通过“连接到Project Server”功能实现数据交互,无需额外代码开发。
3. 自定义中间层服务(灵活扩展场景)
如果需要更灵活的集成方式,可以开发一个中间层服务(比如用.NET、Java或Python实现),提供REST API或RPC接口,让Project 2016通过VBA调用这些接口,中间层负责与Oracle数据库的交互逻辑。
优势:
- 解耦Project与Oracle的直接依赖,便于后续版本升级和功能扩展
- 可以添加权限控制、数据校验、日志记录等额外功能
- 示例流程:Project 2016通过VBA调用中间层API上传项目XML,中间层将XML存入Oracle;下载时调用API获取XML并加载到Project中。
4. 第三方集成工具/插件
市面上有一些企业级项目管理集成工具,支持直接将MS Project 2016与Oracle数据库进行同步,比如:
- Deltek Cobra:常用于工程类项目管理,支持Project与Oracle的双向数据同步
- Oracle Primavera P6 Integration:如果你的团队使用Primavera P6,可以通过其集成功能实现Project与Oracle的数据交互
这些工具通常提供可视化配置界面,无需编写代码即可完成集成,适合对定制开发需求较低的场景。
内容的提问来源于stack exchange,提问作者Julie

