【问题标题】:Complex JOINS in Access SQL difficult to convert to JET OLEDBAccess SQL 中的复杂 JOINS 难以转换为 JET OLEDB
【发布时间】:2023-03-19 11:00:01
【问题描述】:

我是 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;

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

【问题讨论】:

  • 当您引用了看起来像列但未被识别的内容时,通常会发生此错误。
  • 它们都是各个表中的列(字段)。仔细检查并在访问范围内完美运行。我怀疑它是包围,使用 OLEDB 驱动程序通常会略有不同,但我无法解决。

标签: sql ms-access oledb oledbcommand


【解决方案1】:

FOUND PROBLEM ** 这与 SQL 的这一部分有关...

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

改为

[EventName], [RoundCaption] AS RoundTitle

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

哇!想了这么多天。感谢 cmets 将我引向声明中 AS 部分的方向。

【讨论】:

  • 。 .尝试对字符串使用单引号而不是双引号。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-06
  • 1970-01-01
  • 2015-10-18
  • 2014-02-06
  • 1970-01-01
  • 1970-01-01
  • 2018-01-28
相关资源
最近更新 更多