我最初发布此内容时没有所有ODBC信息。经过进一步调查,该问题似乎与ODBC有关。有了更改,我想报告一下,看看ODBC专家是否正在“侦听”。
我在Access中有以下查询...
查询#1
SELECT aa.DocNum, b.QualityClass
FROM dbo_TransferHistory AS aa LEFT JOIN PCQualityClass AS bb ON aa.DocNum = bb.DocumentNum
WHERE (((aa.DocNum)=[Enter Doc Num]));
我想扩展到... 查询#2
SELECT aa.DocNum, bb.QualityClass, cc.BldgCond
FROM (dbo_TransferHistory AS aa LEFT JOIN PCQualityClass AS bb ON aa.DocNum = bb.DocumentNum)
LEFT JOIN PCBldgCond AS cc ON aa.DocNum = cc.DocumentNum
WHERE (((aa.DocNum)=[Enter Doc Num]));
dbo_TransferHistory是我通过ODBC连接器访问的表。 PCQualityClass和PCBldgCond是基于另一个ODBC表的两个查询。这些查询的SQL是...
查询PCQualityClass
SELECT aa.DocumentNum, aa.Value AS QualityClass, aa.ResourceID, aa.BldgSeqNum
FROM dbo_PCBldgDetail AS aa
WHERE (((aa.DocumentNum)=[Enter Doc Num]) AND ((aa.ResourceID)="QualityClass") AND ((aa.BldgSeqNum)=[Enter Bldg Num]));
查询PCBldgCond
SELECT aa.DocumentNum, aa.Value AS BldgCond, aa.BldgSeqNum, aa.ResourceID
FROM dbo_PCBldgDetail
WHERE (((aa.DocumentNum)=[Enter Doc Num]) AND ((aa.BldgSeqNum)=[Enter BldgNum]) AND ((aa.ResourceID)="Condition"));
DocNum和DocumentNum是相同的类型(“短文本”,长度为12),尽管我想使名称相同,但不能。 运行查询时,将弹出一个输入框,并将[输入文档编号]替换为我想要数据的文档编号。
查询是在Access中使用“创建查询”工具创建的。 Access愿意创建查询,并且SQL看起来不错。
问题在于,尽管查询#1可以运行,但查询#2导致错误“无效操作”。请注意,如果我从查询2中删除第一个联接,然后将其余联接作为单个联接运行,则该查询有效。
更改为内部联接将允许查询#2起作用,但会导致问题,因为有时两个子查询中的一个或两个都没有数据,但是我仍然需要主表中的数据。
从ODBC表更改为本地表可以解决此问题,但不是可行的解决方案,因为ODBC表不能位于本地。
有人对Access和ODBC的相互作用有任何见解吗?我很难相信我是第一个尝试构建具有多个连接的Access / Odbc查询的人。但是我还没有找到Google解决此问题的方法。