首页 > 解决方案 > Access SQL 中的复杂 JOINS 难以转换为 JET OLEDB

问题描述

我是 Stack Overflow 的长期追随者,但这是我的第一篇文章。我希望社区可以提供帮助。

我有一个成功的访问查询,它返回所需的结果 - 完美!
但是,我试图在 ASP 脚本中使用 OLEDB 连接返回相同的数据库。这都是遗留的东西,但是我们允许网络访问这些遗留信息。

MS Access (2016) 将 Query 显示为...(有效)

SELECT [EventName] & ": " & [RoundCaption] AS RoundTitle, ChunkEntryTable.WinPos
FROM ((EventTable INNER JOIN EventRoundTable ON EventTable.EventId = EventRoundTable.EventId) INNER JOIN ((RoundHeatTable INNER JOIN ChunkTable ON RoundHeatTable.RoundHeatId = ChunkTable.RoundHeatId) INNER JOIN (EventEntryTable INNER JOIN ChunkEntryTable ON EventEntryTable.EventEntryId = ChunkEntryTable.EventEntryId) ON ChunkTable.ChunkId = ChunkEntryTable.ChunkId) ON EventRoundTable.RoundKeyId = RoundHeatTable.RoundKeyId) LEFT JOIN EventEntryMemberTable ON EventEntryTable.EventEntryId = EventEntryMemberTable.EventEntryId
WHERE (((EventEntryTable.Entry1Id)=[EntryId])) OR (((EventEntryTable.Entry2Id)=[EntryId])) OR (((EventEntryTable.Entry3Id)=[EntryId])) OR (((EventEntryMemberTable.MemberId)=[EntryId]))
ORDER BY EventTable.SortIdx, EventRoundTable.RoundId DESC , EventRoundTable.IsRepechage DESC;

在 OLEDB 中执行此操作。连接字符串如下...

<%
' FileName="Connection_ado_conn_string.htm"
' Type="ADO" 
' DesigntimeType="ADO"
' HTTP="true"
' Catalog=""
' Schema=""
Dim MM_csresultdb_STRING
MM_csresultdb_STRING = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=xyz.mde;Jet OLEDB:Database Password=xxxxxxxxx;"
%>

连接工作完美,但我似乎无法让 SQL 命令工作。我得到“没有为一个或多个必需参数提供值”。注意:我已将 4 个位置的 [EntryID] 替换为有效值,它在 Access 中完美运行,而不是在 Access 之外使用 OLEDB。这是我正在使用的 SQL...

SELECT EventTable.EventName & ": " & EventRoundTable.RoundCaption AS RoundTitle, ChunkEntryTable.WinPos FROM 
 ((EventTable INNER JOIN EventRoundTable ON EventTable.EventId = EventRoundTable.EventId) INNER JOIN
((RoundHeatTable INNER JOIN ChunkTable ON RoundHeatTable.RoundHeatId = ChunkTable.RoundHeatId) INNER JOIN
(EventEntryTable INNER JOIN ChunkEntryTable ON EventEntryTable.EventEntryId = ChunkEntryTable.EventEntryId) ON ChunkTable.ChunkId = ChunkEntryTable.ChunkId) ON ChunkTable.ChunkId = ChunkEntryTable.ChunkId)
ON EventRoundTable.RoundKeyId = RoundHeatTable.RoundKeyId) 
WHERE ((EventEntryTable.Entry1Id)=4741) OR ((EventEntryTable.Entry2Id)=4741) OR ((EventEntryTable.Entry3Id)=4741)
ORDER BY EventTable.SortIdx, EventRoundTable.RoundId DESC , EventRoundTable.IsRepechage DESC;

发现问题**见下面的答案

标签: sqlms-accessoledboledbcommand

解决方案


发现问题 ** 这与 SQL 的这一部分有关...

[EventName] & ": " & [RoundCaption] AS RoundTitle

变成

[EventName], [RoundCaption] AS RoundTitle

它有效,但给了我两个单独的字段,而不是一个名为“RoundTitle”的串联字段。所以我将在显示输出期间而不是在查询阶段加入两个结果字段。

哇!想了这么多天。感谢那些让我朝着声明中 AS 部分的方向前进的评论。


推荐阅读