Access SQL中的复杂联接很难转换为JET OLEDB

问题描述 投票:0回答:1

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

我有一个成功的Access查询,该查询返回了所需的结果-太好了!但是,我正在尝试使用OLEDB连接将相同的内容返回到ASP脚本中的数据库。这些都是旧的东西,但是我们允许通过Web访问该旧信息。

MS Access(2016)显示查询为...(有效)

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中完美运行,只是不在使用OLEDB的Access之外。这就是我正在使用的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;

存在的问题**,请参阅下面的答案

sql ms-access oledb oledbcommand
1个回答
1
投票

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

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

更改为

[EventName], [RoundCaption] AS RoundTitle

并且它有效,但是给了我两个单独的字段,而不是一个称为“ RoundTitle”的串联字段。因此,我将在显示输出而不是查询阶段将两个结果字段合并在一起。

哇!这么多天想通。多亏了这些评论,这些评论引导我朝声明的AS部分的方向发展。

© www.soinside.com 2019 - 2024. All rights reserved.