我正在尝试使用Spotfire中的IronPython在MS Access中运行脚本 . 到目前为止,我甚至无法连接到MS Access .
这是我的连接代码:
import clr
import System
clr.AddReference("System.Data")
from System.Data import DataSet
from System.Data.Odbc import OdbcConnection, OdbcDataAdapter
connectString = (
"Driver={Microsoft Access Driver (*.mdb, *.accdb)};"
"Dbq=\\\olgwfap1\Data\Development Division\Res Surv Eng\Personal Folders\Pruet\Data Team\SPOTFIRE\TIDELANDS\Tidelands_Spotifre.accdb;"
"Uid=Admin;PWd=;"
)
query = "Select * From FOP_Calc"
connection = OdbcConnection(connectString)
adaptor = OdbcDataAdapter(query, connection)
dataSet = DataSet()
connection.Open()
adaptor.Fill(dataSet)
connection.Close()
执行此操作,我收到以下错误:
System.Data.Odbc.OdbcException(0x80131937):ERROR [IM002] [Microsoft] [ODBC驱动程序管理器]未找到数据源名称,并且未在System.Data.Odbc.OdbcConnection.HandleError指定默认驱动程序(OdbcHandle hrHandle,RetCode retcode )在System.Data.Odbc.OdbcConnectionHandle..ctor(OdbcConnection连接,OdbcConnectionString constr,OdbcEnvironmentHandle environmentHandle)的System.Data.Odbc.OdbcConnectionFactory.CreateConnection(DbConnectionOptions选项,DbConnectionPoolKey poolKey,Object poolGroupProviderInfo,DbConnectionPool池,DbConnection owningObject)处于System System.Data.ProviderBase.DbConnectionClosed处的System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection,TaskCompletionSource1 retry,DbConnectionOptions userOptions,DbConnectionInternal&connection)处的.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection,DbConnectionPoolGroup poolGroup,DbConnectionOptions userOptions) . TryOpenConn位于System.Data.Odbc.OdbcConnection.Open()的System.Data.ProviderBase.DbConnectionInternal.OpenConnection(DbConnection outerConnection,DbConnectionFactory connectionFactory)处的(DbConnection outerConnection,DbConnectionFactory connectionFactory,TaskCompletionSource1 retry,DbConnectionOptions userOptions)$ 296 ## 296(在Microsoft.Scripting.Actions.CallSite1.UpdateAndExecute(Object [对象],Microsoft.Scripting.Actions.MatchCaller.Call2 [T0,T1,TRet](Func4目标,CallSite站点,对象[] args)上的Closure,CallSite,CodeContext,Object) ]在Spot.S.Dxp.Application的Microsoft.Scripting.Actions.UpdateDelegates.Update2 [T,T0,T1,TRet](CallSite站点,T0 arg0,T1 arg1),$ 287 ## 287(Closure,Scope,LanguageContext) Spotfire.Dxp.Applic上的Spotfire.Dxp.Application.Scripting.ScriptService.ExecuteForDebugging(String scriptCode,Dictionary2 scope,Stream outputStream)中的.ScriptSupport.IronPythonScriptEngine.ExecuteForDebugging(String scriptCode,Dictionary2 scope,Stream outputStream)在Spotfire.Dxp.Framework.Command.CommandHistory.Transaction的Spotfire.Dxp.Framework.Commands.CommandHistory.Transaction(Executor executor,Boolean visible,Boolean sticky,Guid stickyGuid)中的ation.Scripting.ScriptManager . <> c__DisplayClass14.b__f() (字符串displayName,Executor执行程序)位于Spotfire.Dxp.Framework.DocumentModel.DocumentNode.Transaction(String displayName,Executor executor)的Spotfire.Dxp.Application.Scripting.ScriptManager.ExecuteScriptForDebugging(String scriptCode,Dictionary`2 scriptArguments,String&output) at Spotfire.Dxp.Forms.Framework.Scripting.ScriptEditDialog.RunButton_Click(Object sender,EventArgs e)
文件名肯定是正确的,所以我假设它是默认驱动程序给它带来麻烦 .
如果它有所不同,我的SpotFire(托管IronPython)是64位安装,我使用MSOffice 32位(虽然安装了64位和32位MS Access ODBC驱动程序) .
任何帮助表示赞赏,谢谢 .
1 回答
如果您的IronPython脚本在64位环境中运行,那么您需要安装64位版本的Access数据库引擎 . 或者相反,如果您安装了32位版本的Access数据库引擎(因为您有32位Office),那么您的IronPython脚本需要在32位环境中运行 .
可以强制将32位和64位版本的Access数据库引擎驻留在同一台计算机上,但不建议这样做 . 它可能会导致Office出现问题,并且不是受支持的配置 .