Выполнить инструкцию SQL внутри кода VBA - PullRequest
0 голосов
/ 09 мая 2018

Я пытаюсь выполнить запрос SQL внутри кода VBA. Запрос работает в MS Access и просит пользователя ввести значение для Customer_Name и Part_Number

Что я сделал, так это написал VBA Code в outlook, чтобы мы могли запустить макрос для выполнения запроса из Outlook. Код, который у меня есть, работает до самой нижней части раздела DoCmd.RunSQL. Я думаю, что у меня неправильный синтаксис. Мне нужно сказать ему, чтобы запустить строку SQL, перечисленные выше:

Public Sub AppendAllTables()
Part_Number = InputBox("Enter Part Number")
Customer_Name = InputBox("Enter Customer Name")
Dim strsqlQuery As String
Dim Y As String
Y = "YES, Exact Match"
Dim P As String
P = "Possible Match - Base 6"
Dim X As String
X = "*"

    strsqlQuery = "SELECT Append_All_Tables.Customer, 
    Append_All_Tables.CustomerCode, Append_All_Tables.PartNumber, 
    Append_All_Tables.Description, Append_All_Tables.Vehicle, SWITCH" & 
    Customer_Name & " = Append_All_Tables.PartNumber, " & Y & ", LEFT(" & 
    Part_Number & ",12) = LEFT(Append_All_Tables.PartNumber,12)," & Y & ", 
    LEFT(" & Part_Number & ",6) = LEFT(Append_All_Tables.PartNumber,6)," & P 
    & ") AS Interchangeability FROM Append_All_Tables WHERE" & Customer_Name 
    & "Like " & X & Customer_Name & X & "AND 
    LEFT(Append_All_Tables.PartNumber,6) = LEFT(" & Part_Number & ",6);"

Set appAccess = CreateObject("Access.Application")
appAccess.OpenCurrentDatabase "path.accdb"
appAccess.DoCmd.RunSQL "strsqlQuery"

End Sub

Обратите внимание, путь был изменен для конфиденциальности. Код SQL уже работает в Access. Мне нужна только последняя строка для оценки.

Ответы [ 3 ]

0 голосов
/ 09 мая 2018

Если вы хотите, чтобы в форме таблицы данных отображались эти записи, вы можете использовать

DoCmd.OpenForm 

Сначала создайте запрос с данными, которые вы хотите просмотреть, затем свяжите их с вашей формой, используя свойство Record Source, а затем, когда вы вызываете DoCmd.OpenForm, передайте нужный фильтр.

Я не слежу за тем, что вы пытаетесь сделать с SWITCH в вашем запросе (это должна быть функция switch()? У нее нет скобок). Но вам нужно изменить это, чтобы присоединиться, чтобы использовать вместо него оператор Where.

0 голосов
/ 10 мая 2018

Я согласен с парой вышеупомянутых постов.

  1. Вам нужно выполнить Debug.Print переменной strsqlQuery, ПРЕЖДЕ ЧЕМ ВЫ ДЕЛАЕТЕ! Затем оцените это утверждение. Это выглядит правильно? Как говорит Мэтт, не похоже, что у вас есть продолжения строк, которые сделали бы ваш оператор SQL неполным (и, следовательно, компьютер вообще не считает его запросом).

Мое личное предпочтение состоит в том, чтобы определить SQL, как у вас, затем создать фактический запрос, используя этот SQL (создать запрос def), и затем вызвать этот запрос, потому что теперь он будет фактическим объектом в базе данных. QUERY может отображаться в виде таблицы данных без каких-либо требований к форме, но чистый оператор SQL не может.

Michael

0 голосов
/ 09 мая 2018

Удалить цитаты.

appAccess.DoCmd.RunSQL "strsqlQuery" до appAccess.DoCmd.RunSQL strsqlQuery

...