2015-02-28 2 views
0

У меня проблемы с VBA SQL JOIN. Я продолжаю получать сообщение об ошибке «Присоединить выражение не поддерживается». Следующий код работает в представлении дизайна запроса, но, похоже, вызывает ошибку в vba.VBA SQL Join Query

Dim Rs As DAO.RecordSet 

Set Rs = CurrentDb.OpenRecordset(_ 
     "SELECT Schools.ID, Schools.[School Name],Schools.Address, Schools.Postcode, Schools.[Principal name], " & _ 
     "Schools.[E-Mail], Schools.Phone, Schools.Region, Schools.JTHE, Schools.[Social Status], Events.Program " & _ 
     "FROM Schools INNER JOIN Events ON Schools.ID = Events.School WHERE ((Schools.Region = '" & RegionOne & _ 
     "' Or Schools.Region = '" & RegionTwo "' Or Schools.Region = '" & RegionThree "' Or Schools.Region = '" & _ 
     RegionFour "') AND (Schools.JTHE = " & JTHE1 & " Or Schools.JTHE = " & JTHE2 ") AND (Schools.[Social Status] = '" & _ 
     StatusBox.Value "') AND (Events.Program = '" & ProgramBox.Value & "'));") 

Это Подобный запрос работает

Set Rs = CurrentDb.OpenRecordset("SELECT * FROM Schools WHERE " & _ 
     "(((Schools.Region)='" & RegionOne & _ 
     "' Or (Schools.Region)='" & RegionTwo & _ 
     "' Or (Schools.Region)='" & RegionThree & _ 
     "' Or (Schools.Region)='" & RegionFour & _ 
     "') AND ((Schools.[Social Status])='" & StatusBox.Value & _ 
     "') AND ((Schools.JTHE)=" & JTHE1 & " Or (Schools.JTHE)=" & JTHE2 & "));") 

Любая помощь будет принята с благодарностью.

+0

Где ваше объявление для 'RegionOne',' RegionTwo', 'RegionThree',' RegionFour', 'JTHE1',' JTHE2'? – PaulFrancis

+0

В верхней части модуля. В инициализируются Струны Dim RegionOne As String Dim RegionTwo As String Dim RegionThree As String Dim RegionFour As String Dim JTHE1 As Boolean Dim JTHE2 As Boolean – Mike

+1

Попробуйте ** Debug.Print **, посмотрим, что вы получаете int он сгенерировал SQL в непосредственном окне. Затем скопируйте сгенерированный SQL в окно Query, вы можете точно зафиксировать ошибку. Если нет, попробуйте выполнить одно условие за раз. Сначала попробуйте использовать только регион, затем JTHE, затем Program. – PaulFrancis

ответ

0

Я не совсем уверен, почему это так. Трудно заметить ошибку, когда вы делаете это на VBA, в отличие от того, если вы находитесь в реальной студии управления SQL, где вы можете обнаружить строки, которые выходят из строя. Тем не менее, вы можете попробовать это:

Set Rs = CurrentDb.OpenRecordset(_ 
    "SELECT Schools.ID, Schools.[School Name], Schools.Address, " & _ 
     "Schools.Postcode, Schools.[Principal name], Schools.[E-Mail], " & _ 
     "Schools.Phone, Schools.Region, Schools.JTHE, Schools.[Social Status], " & _ 
     "Events.Program " & _ 
    "FROM Schools " & _ 
    "INNER JOIN Events " & _ 
     "ON Schools.ID = Events.School " & _ 
    "WHERE Schools.Region IN (" & _ 
     "'" & RegionOne & "'," & _ 
     "'" & RegionTwo & "'," & _ 
     "'" & RegionThree & "'," & _ 
     "'" & RegionFour & "') " & _ 
    "AND Schools.JTHE IN (" & JTHE1 & ", " & JTHE2 & ") " & _ 
    "AND Schools.[Social Status]='" & StatusBox.Value & "' " & _ 
    "AND Events.Program='" & ProgramBox.Value & "';") 

я форматировал его как таковой, чтобы дать вам историю запроса (и то, как я буду писать в SQL).
Не совсем прямой ответ на ваш вопрос, но я просто упростил ваши заявления OR и вместо этого использовал IN.
Вы можете получить:

Слишком много ошибок непрерывной линии

Так настроить конкатенацию строк. Конечно, я не тестировал это (хотя он компилируется), но моя цель - дать вам представление о возможном способе сделать это. НТН.