У меня проблемы с этим VBA-скриптом, и он, кажется, продолжает добавлять забавные символы (т.е. ») при каждом чтении файла .SQL. Я считаю, что это связано с кодировкой.
Option Explicit
Sub SomeExtract()
With Application
.ScreenUpdating = False: .DisplayAlerts = False: .Calculation = xlCalculationManual: .EnableEvents = False
End With
Dim strSQL As String, filePath As String, fileSQL As Integer, row As String
Dim connSQL As ADODB.Connection, serverName As String, databaseName As String, userID As String, userPassword As String, rs As ADODB.Recordset
fileSQL = FreeFile
strSQL = ""
filePath = Application.ThisWorkbook.Path & "\somesql.sql"
Open filePath For Input As fileSQL
Do Until EOF(fileSQL)
Line Input #fileSQL, row
strSQL = strSQL & row & vbNewLine
Loop
Close #fileSQL
serverName = "someserver"
databaseName = "somedb"
Set connSQL = New ADODB.Connection
Set rs = New ADODB.Recordset
connSQL.Open "Provider=SQLOLEDB;Server=" & serverName & ";Database=" & databaseName & _
";Trusted_connection=yes;"
rs.Open strSQL, connSQL, adOpenStatic
With ThisWorkbook.Sheets("test").Range("A1:Z1000000")
.ClearContents
.CopyFromRecordset rs
End With
With Application
.ScreenUpdating = True: .DisplayAlerts = True: .Calculation = xlCalculationAutomatic: .EnableEvents = True
End With
ExitPoint:
With Application
.ScreenUpdating = True: .DisplayAlerts = True: .Calculation =
xlCalculationAutomatic: .EnableEvents = True
End With
Set rs = Nothing
Exit Sub
ErrHandler:
With ThisWorkbook
.Sheets("Control").Range("B1").Value = Err.Description
.Sheets("Control").Range("C1").Value = strSQL
End With
Resume ExitPoint
End Sub
Сообщение об ошибке гласит «Ошибка времени выполнения -2147217900 (80040e14)»: неправильный синтаксис рядом с «>>»; ". Файл SQL не имеет >> или других символов, как показано в сообщении об ошибке. На самом деле я заменил .sql, чтобы он содержал только прямую инструкцию SELECT. Но я все еще вижу смешные символы, добавляемые при чтении в Excel VBA (например, «выберите топ 100 * из теста» вместо «выбрать топ 100 * из теста»).