Обновление таблицы SQL Server данными из таблицы в другой базе данных с использованием Excel VBA - PullRequest
0 голосов
/ 16 апреля 2019

Я пытаюсь создать Excel VBA для обновления таблицы SQL Server.Это позволяет моим пользователям выполнять обновление самостоятельно.(используя VBA в первый раз)

Я получаю ошибку во время выполнения при запуске кода VBA.

Вот мой код:

Sub DataUpdateSQLServer()


Dim cnLogs As New ADODB.Connection
Dim rsHeaders As New ADODB.Recordset
Dim rsData As New ADODB.Recordset
Dim uSQL As String


strConn = "PROVIDER=SQLOLEDB;"
strConn = strConn & "DATA SOURCE=abc-dwh ;INITIAL CATALOG=DWH_DEV;"
strConn = strConn & " INTEGRATED SECURITY=sspi;"
strConn = strConn & "User ID= ARGUSGROUP\user;"
strConn = strConn & "Password = Password;"
strConn = strConn & "Trusted_Connection=No"

cnLogs.Open strConn


uSQL = "INSERT INTO DWH_DEV.DBO.GI_PRODUCTION_REPORT_CATALOG (Name, Path, CreationDate) " _
        & "select C1.Name, C1.Path, C1.CreationDate " _
        & "from ReportServer.dbo.Catalog C1 " _
        & "LEFT JOIN DWH_DEV.DBO.GI_PRODUCTION_REPORT_CATALOG C2 " _
        & "ON C1.PATH = C2.Path COLLATE SQL_Latin1_General_CP1_CI_AS " _
        & "WHERE (C1.Path LIKE '/Reports/Production/Customer Service%' " _
        & "OR C1.Path LIKE '/Reports/Production/Client Solutions%' " _
        & "OR C1.Path LIKE '/Reports/Production/Finance/Group Insurance%' " _
        & "OR C1.Path LIKE '/Reports/Production/Group Insurance%' " _
        & "OR C1.Path LIKE '/Reports/Production/OTH%') AND C2.PATH IS NULL "

cnLogs.Execute uSQL

End Sub

Пожалуйста, помогите мне,ТИА.

1 Ответ

0 голосов
/ 17 апреля 2019

Я смог получить то, что мне нужно, по этой ссылке здесь: http://www.vbforums.com/showthread.php?552665-Database-How-do-I-use-an-ADO-Command-object

Внесенные мной изменения: 1. Добавлены пробелы в конец каждой строки кода SQL.2.Используется объект команды ADO, как описано в ссылке выше.

Вот мой окончательный код:

Sub DatafromSQLServer()

Dim cnLogs As New ADODB.Connection
Dim rsHeaders As New ADODB.Recordset
Dim rsData As New ADODB.Recordset
Dim uSQL As String

Dim l_counter As Long: l_counter = 0
Dim strConn As String


Sheets(1).UsedRange.Clear
strConn = "PROVIDER=SQLOLEDB;"
strConn = strConn & "DATA SOURCE=abc-dwh ;INITIAL CATALOG=DWH_DEV;"
strConn = strConn & " INTEGRATED SECURITY=sspi;"
strConn = strConn & "User ID= ARGUSGROUP\user;"
strConn = strConn & "Password = Password"
strConn = strConn & "Trusted_Connection=No"

cnLogs.Open strConn



CSQL = "INSERT INTO DWH_DEV.DBO.GI_PRODUCTION_REPORT_CATALOG (Name, Path, CreationDate)  " _
        & "select C1.Name, C1.Path, C1.CreationDate  " _
        & "from ReportServer.dbo.Catalog C1  " _
        & "LEFT JOIN DWH_DEV.DBO.GI_PRODUCTION_REPORT_CATALOG C2  " _
        & "ON C1.PATH = C2.Path COLLATE SQL_Latin1_General_CP1_CI_AS " _
        & "WHERE (C1.Path LIKE '/Reports/Production/Customer Service%'  " _
        & "OR C1.Path LIKE '/Reports/Production/Solutions%'  " _
        & "OR C1.Path LIKE '/Reports/Production/Finance/Insurance%'  " _
        & "OR C1.Path LIKE '/Reports/Production/Insurance%'  " _
        & "OR C1.Path LIKE '/Reports/Production/OTH%') AND C2.PATH IS NULL "



Dim objCommand As ADODB.Command
  Set objCommand = New ADODB.Command
  With objCommand
    .ActiveConnection = cnLogs  'replace this with your Connection object
    .CommandType = adCmdText
    .CommandText = CSQL         'replace this with your SQL statement
    .Prepared = True

objCommand.Execute , , adExecuteNoRecords
End With

Set objCommand = Nothing

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...