Сложные СОЕДИНЕНИЯ в Access SQL трудно конвертировать в JET OLEDB - PullRequest
0 голосов
/ 23 февраля 2020

Я долгое время следил за переполнением стека, но это мой первый пост. Я надеюсь, что сообщество может помочь.

У меня есть успешный запрос доступа, который возвращает требуемые результаты - Отлично!
ОДНАКО, я пытаюсь вернуть то же самое, используя соединение OLEDB с базой данных в ASP скрипт. Это все устаревшие вещи, однако мы разрешаем веб-доступ к этой устаревшей информации.

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 работать. Я получаю «Нет значения для одного или нескольких обязательных параметров». ПРИМЕЧАНИЕ. Я заменил [EntryID] в 4 местах на допустимое значение, и оно отлично работает в 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;

НАЙДЕННАЯ ПРОБЛЕМА ** См. Ответ ниже

1 Ответ

1 голос
/ 23 февраля 2020

НАЙДЕННАЯ ПРОБЛЕМА ** Это связано с этой частью SQL ...

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

Изменено на

[EventName], [RoundCaption] AS RoundTitle

, и это работает, но дает мне два отдельных поля а не одно объединенное поле с именем "RoundTitle". Поэтому я соединю два поля результатов во время вывода на экран, а не на этапе запроса.

Вот так! Это много дней, чтобы выяснить. Благодаря комментариям, которые направили меня в этом направлении в часть заявления AS.

...