Excel功能查询,对后备连接/ OleDb数据源的错误处理

我有一个PowerQuery连接到DB2数据源,但是由于某种负载平衡,DB Server会定期更改(ip也会更改),所以我没有办法事先知道哪个数据源(IP),我应该使用直到我尝试它并看到它出错为止,然后我必须使用另一个,我在PowerQuery中搜索了错误处理,并找到了一些错误处理示例,但是该示例不适用于我的情况,其中大多数处理了错误建立连接或防止未找到缺少的列或文件时出现错误之后,我尝试根据我的情况调整示例,但未能成功。

我想要的只是尝试一个IP,如果失败,则使用另一个。

let

//fParametros("ParamQuery",1) is the "standard" Server/Ip address (provider=IBMDADB2.IBMDBCL1;data source=CP3;location=pn8us7ldbcp3.us.mycompany.com:5912)

dbSource = fParametros("ParamQuery",1),//fParametros("ParamQuery",5) is the "Alternate" Server/Ip address (provider=IBMDADB2.IBMDBCL1;data source=CP3;location=pn8us7ldbcp3h.us.mycompany.com:5912)

AltdbSource = fParametros("ParamQuery",5),pOrden = Text.From(fParametros("ParamQuery",2)),//Create the query
dbQuery = "SELECT SAPCP3.vbak.VBELN SO,SAPCP3.vbap.posnr PoLine,SAPCP3.vbep.ETENR Sch_Line,SAPCP3.vbap.matnr Part_Number,SAPCP3.makt.maktx Description,SAPCP3.vbap.kwmeng Qty,SAPCP3.vbep.BMENG Conf_qty,SAPCP3.vbap.vrkme UOM,SAPCP3.vbap.netpr SalesPrice,SAPCP3.vbap.kpein LotSize FROM SAPCP3.vbak JOIN SAPCP3.vbap ON SAPCP3.VBAp.VBELN = SAPCP3.VBAK.VBELN JOIN SAPCP3.vbep ON SAPCP3.vbep.vbeln = SAPCP3.vbak.vbeln AND SAPCP3.vbap.posnr  = SAPCP3.vbep.posnr JOIN sapcp3.makt ON sapcp3.vbap.matnr=sapcp3.makt.matnr WHERE SAPCP3.VBAK.VKORG = '4000' AND (SAPCP3.vbep.edatu >= '20190701') AND SAPCP3.vbak.VBELN ="& pOrden & " ORDER BY SAPCP3.vbak.VBELN",//Get the data
Source = OleDb.DataSource(dbSource,[Query=dbQuery]),//Failed Attempt to handle the error:    

TestForError= try Source,//next line does not work,I get error saying Source is already defined/declared
Source = if TestForError[HasError] then OleDb.DataSource(AltdbSource,[Query=dbQuery]) else OleDb.DataSource(dbSource,[Query=dbQuery])

in

Source

我还尝试了以下内容:

.
.
.

//Get the data
Source = OleDb.DataSource(dbSource,//Failed Attempt to handle the error:
TestForError= try Source,Output = if TestForError[HasError] then OleDb.DataSource(AltdbSource,[Query=dbQuery])

in

Output


//This last part works if the dbSource is correct,but if it is not it doesnt catch the error and gives me the Connection error shown below:
  

DataSource.Error:OLE DB:SQL30081N已检测到通信错误。使用的通信协议:“ TCP / IP”。使用的通信API:“ SOCKETS”。检测到错误的位置:“ 172.16.0.1”。通讯功能检测到错误:“连接”。协议特定的错误代码:“ 10061”,“ ”,“ ”。 SQLSTATE = 08001   细节:       DataSourceKind = OleDb       DataSourcePath =数据源= CP3;位置= pn8us7ldbcp3.us.mycompany.com:5912;提供者= IBMDADB2.IBMDBCL1       消息= SQL30081N已检测到通信错误。使用的通信协议:“ TCP / IP”。使用的通信API:“ SOCKETS”。检测到错误的位置:“ 172.16.0.1”。通讯功能检测到错误:“连接”。协议特定的错误代码:“ 10061”,“ ”,“ ”。 SQLSTATE = 08001       ErrorCode = -2147467259

我想连接到dbSource(172.16.0.1),如果不可能,则连接到AltdbSource(172.16.0.2)

当前,我有2个相同的excel表格,如果用户遇到连接错误,则需要打开一个或另一个,我希望它自动更改。

jenrychan 回答:Excel功能查询,对后备连接/ OleDb数据源的错误处理

我猜测TestForError = try OleDb.DataSource(BadSource)不起作用,因为OleDb.DataSource(...)返回一个表值,而不是在尝试枚举行时只会产生错误。

如果您将TestForError更改为在第一行中钻取,该怎么办:

TestForError= try Source{0}?,

如果仍然无法解决问题,请尝试在第一行中索引到表格单元格中。

本文链接:https://www.f2er.com/3049730.html

大家都在问