У меня есть PowerQuery, подключенный к источнику данных DB2, но из-за некоторой балансировки нагрузки сервер БД периодически меняется (IP также изменяется), у меня нет возможности заранее узнать, какой источник данных (IP) я должен использовать, пока я не попробуйте и убедитесь, что он выдает ошибки, затем я должен использовать другой, я искал в Google для обработки ошибок в 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, [Query=dbQuery]),
//Failed Attempt to handle the error:
TestForError= try Source,
Output = if TestForError[HasError] then OleDb.DataSource(AltdbSource, [Query=dbQuery]) else OleDb.DataSource(dbSource, [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: «РОЗЕТКИ». Местоположение, в котором была обнаружена ошибка: «172.16.0.1». Функция связи, обнаруживающая ошибку: «подключиться». Код (ы) ошибок протокола: «10061», «», «». SQLSTATE = 08001 Подробности: DataSourceKind = OleDb DataSourcePath = data source = CP3; location = pn8us7ldbcp3.us.mycompany.com: 5912; provider = IBMDADB2.IBMDBCL1 Сообщение = SQL30081N Обнаружена ошибка связи. Используемый протокол связи: «TCP / IP». Используемый коммуникационный API: «РОЗЕТКИ». Местоположение, в котором была обнаружена ошибка: «172.16.0.1». Функция связи, обнаруживающая ошибку: «подключиться». Код (ы) ошибок протокола: «10061», «», «». SQLSTATE = 08001 Код ошибки = -2147467259
Я хочу подключиться к dbSource (172.16.0.1), и если это невозможно, подключитесь к AltdbSource (172.16.0.2)
В настоящее время у меня есть 2 идентичных листа Excel, и пользователю нужно открыть один или другой, если он получит ошибку подключения, я хочу, чтобы это изменилось автоматически.