Как выполнить запрос вставки в коде VBA - PullRequest
0 голосов
/ 13 ноября 2018

Я пытаюсь выбрать строки из одной таблицы при условии, что она совпадает с именами пользователей из 2-й таблицы.Я получаю сообщение об ошибке, просто запустив этот запрос.Затем мне нужно вставить эти выбранные строки в 3-ю таблицу.

В настоящее время я получаю синтаксическую ошибку для strSQL1.Спасибо!

Public Sub CalculateUA1_Click()

Dim db As Database
Dim rst As Recordset
Dim UsersTname As String
Dim SCCMTname As String
Dim UsersAppList1 As String


Dim strSQL1 As String
Dim strSQL2 As String
Dim strSQLWhere As String


Set db = DBEngine.Workspaces(0).Databases(0)

UsersTname = "UsersList"
SCCMTname = "SCCM1"
UsersAppList1 = "tbl_UsersApplicationList1"

Set rst = db.OpenRecordset(UsersTname)

strSQL1 = "SELECT s.User_Name0, s.[Machine name], s.displayName0, s.Mail0, 
s.AD_Site_Name0, s.[Application Name], s.[Application Version] FROM  '" & 
SCCMTname & "' as S  ; "

strSQLWhere = "user_name0 in  ( SELECT [SOE ID] FROM  '" & UsersTname & "' 
)"

strSQL1 = strSQL1 & " Where " & strSQLWhere

DoCmd.SetWarnings False
DoCmd.RunSQL strSQL1
DoCmd.SetWarnings True

strSQL2 = "INSERT INTO '" & UsersAppList1 & "'  VALUES ('" & strSQL1 & "' 
);"

DoCmd.SetWarnings False
DoCmd.RunSQL strSQL2
DoCmd.SetWarnings True

1 Ответ

0 голосов
/ 13 ноября 2018

Примерно так:

Dim db As Database
Dim UsersTname As String
Dim SCCMTname As String
Dim UsersAppList1 As String


Dim strSQL1 As String
Dim strSQL2 As String
Dim strSQLWhere As String


Set db = DBEngine.Workspaces(0).Databases(0)

UsersTname = "UsersList"
SCCMTname = "SCCM1"
UsersAppList1 = "tbl_UsersApplicationList1"

strSQL1 = "SELECT s.User_Name0, s.[Machine name], s.displayName0, s.Mail0, " & _
    "s.AD_Site_Name0, s.[Application Name], s.[Application Version] FROM  [" & SCCMTname & "]  as S; "

strSQLWhere = "user_name0 in  (SELECT [SOE ID] FROM  [" & UsersTname & "])"

strSQL1 = strSQL1 & " Where " & strSQLWhere

'variant 1: append to existing table, it should have columns with the same names as in SQL1
strSQL2 = "INSERT INTO [" & UsersAppList1 & "]  " & strSQL1

'variant 2: create new table. Existing table with the same name will be deleted
strSQL2 = "SELECT * INTO [" & UsersAppList1 & "]  FROM (" & strSQL1 & ");)"

db.Execute strSQL2, dbFailOnError
...