Неправильный синтаксис рядом с ">>". Excel VBA читает файл .SQL со смешными начальными символами (т.е. ï »¿выбрать 100 лучших * из теста). Проблема с кодировкой

У меня возникли проблемы с этим сценарием 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 лучших * из теста»).

Если вы [Отлаживаете] ошибку, выделенный оператор rs.Open сообщает вам, что ошибка произошла при выполнении strSQL, и поэтому «Неправильный синтаксис рядом с '>>'» может означать только то, что strSQL недопустимое содержимое SQL ;-) Я бы выстрелил вверх непосредственная панель (Ctrl + G) и выполните ?strSQL, чтобы получить его буквальное значение, где я буду искать оскорбительные токены '>>'. Работает ли файл .sql как есть в SQL Server Management Studio?

Mathieu Guindon 02.05.2018 04:08

Я действительно думал, что это было изначально, но затем я заменил strSQL простым оператором select = "Select * from someTable" и продолжаю видеть то же сообщение об ошибке.

ArsedianIvan 02.05.2018 05:15

Вы не открываете RecorSet, вы уже открыли соединение. rs = connSQL.Execute (strSQL) Edit: однако вы закрываете rs.Close, когда закончите.

Ricardo A 02.05.2018 05:29

@RicardoA, это правильно, но не имеет значения; rs.Open совершенно законен ... слишком много способов сделать то же самое с ADODB: я бы сказал, что вы не выполняете соединение, вы выполняете параметризованную команду ;-)

Mathieu Guindon 02.05.2018 06:06

Должен быть >>где-то ... попробуйте for i = 1 to connSQL.Errors.Count - 1 : ?connSQL.Errors(i).Description : next в непосредственной панели в режиме перерыва после получения этой ошибки. Может там больше информации.

Mathieu Guindon 02.05.2018 06:13

Да, вы правы, по каким-то странным причинам, когда файл SQL читается в excel, он добавляет следующие ведущие символы, которых даже нет в файле сценария SQL «ï» ¿»

ArsedianIvan 02.05.2018 06:47

Mathiue и @Ricardo A, я редактировал этот вопрос, основная причина, похоже, заключается в том, как Excel VBA читает инструкцию SQL с этими забавными ведущими символами (т.е. ï »¿) из файла .SQL

ArsedianIvan 02.05.2018 07:12

Скорее всего, это спецификация UTF-8, т.е. у вас проблемы с кодировкой. Откройте файл .sql в Notepad ++ и измените кодировку на ANSI.

Mathieu Guindon 02.05.2018 07:22

Возможно, открытие файла в простом старом Блокноте, удаление нежелательной почты и последующее сохранение могут просто исправить это.

Mathieu Guindon 02.05.2018 07:29

Некоторый контекст: stackoverflow.com/questions/31435662/…

Andre 02.05.2018 09:10
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
0
10
340
0

Другие вопросы по теме