【发布时间】:2017-10-26 06:08:54
【问题描述】:
我有一个查询,它连接到多台远程机器以将数据合并到一个表中。当所有机器都连接时它工作正常但偶尔任何给定的机器可能会关闭(这会导致错误),我希望我的查询忽略任何不可用的连接并继续查询的其余部分。有没有办法做到这一点?
我正在使用带有 OBDC 连接的链接表(驱动程序:MySql ODBC 5.3 Ansi 驱动程序)
这是我的查询:
SELECT "HX32" AS workcenter, "HX32." & [HX32].[dataid] AS tbldataid, HX32.dataid AS dataid, HX32.TS, DMin("[TS]","[HX32]","[TS] > #" & [TS] & "#") AS EndTS, DateDiff("s",[TS],EndTS) AS durationsec, Format(Int([durationsec]/86400)) & " " & Format([durationsec]/86400,"hh:nn:ss") AS duration, Format(TS,"mm/dd/yyyy") AS [Day], Switch(incycle=0,'Down',incycle=1,'Running') AS Status
FROM HX32
WHERE (((HX32.TS)>Date()-3) AND ((HX32.incycle)=0))
UNION ALL
SELECT "VL65A" AS workcenter, "VL65A." & [VL65A].[dataid] AS tbldataid, VL65A.dataid AS dataid, VL65A.TS, DMin("[TS]","[VL65A]","[TS] > #" & [TS] & "#") AS EndTS, DateDiff("s",[TS],EndTS) AS durationsec, Format(Int([durationsec]/86400)) & " " & Format([durationsec]/86400,"hh:nn:ss") AS duration, Format(TS,"mm/dd/yyyy") AS [Day], Switch(incycle=0,'Down',incycle=1,'Running') AS Status
FROM VL65A
WHERE (((VL65A.TS)>Date()-3) AND ((VL65A.incycle)=0))
UNION ALL
SELECT "VL68B" AS workcenter, "VL68B." & [VL68B].[dataid] AS tbldataid, VL68B.dataid AS dataid, VL68B.TS, DMin("[TS]","[VL68B]","[TS] > #" & [TS] & "#") AS EndTS, DateDiff("s",[TS],EndTS) AS durationsec, Format(Int([durationsec]/86400)) & " " & Format([durationsec]/86400,"hh:nn:ss") AS duration, Format(TS,"mm/dd/yyyy") AS [Day], Switch(incycle=0,'Down',incycle=1,'Running') AS Status
FROM VL68B
WHERE (((VL68B.TS)>Date()-3) AND ((VL68B.incycle)=0))
;
【问题讨论】:
-
这不能仅使用查询来完成。您将不得不使用一些 VBA 来测试所有机器是否都打开,然后动态生成查询 SQL。
-
@Erik,我希望我可以在没有 VBA 的情况下做到这一点,但如果这是唯一的选择,我认为我可以提出解决方案
-
好吧,查询只是 SQL,除了 Access 中的行或错误检测之外,它们没有任何逻辑。这里没有存储过程之类的东西,所以任何更复杂的事情都会失败(你可以做
CREATE PROCEDURE,但这只会创建一个查询)
标签: ms-access