Странное поведение с INSERT INTO ... SELECT с Excel 2007 SQL - PullRequest
1 голос
/ 22 августа 2011

Теперь тогда.У меня есть этот сценарий VBScript

Const inputfile = "New Microsoft Office Excel Worksheet (2).xlsx"

dim ado: set ado = CreateObject("ADODB.Connection")
ado.connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=""" _
                        & inputfile & """;Extended Properties=""Excel 12.0 Xml;HDR=YES"";"

ado.CursorLocation = 3
ado.open

ado.Execute "INSERT INTO [recalculated] ([TIME PERIOD]) " & _
            "SELECT Format(CDate(Mid([TIME PERIOD], 8, 13)), 'mm/dd/yyyy') " & _
            "AS [TIME PERIOD] FROM [input]"
ado.close

Таблицы в рабочей книге именуются диапазонами в своих собственных рабочих листах

input:

input table

recalculated (т. Е. Пустая таблица с тем же именем столбца):

recalculated table

Сценарий выполняется без сообщения об ошибке, однако вместо этого данные вставляются в таблицу inputиз recalculated:

resulting input table

(отмечу, что на самом деле это поведение отличается от того, что я видел ранее - я добавил TOP 3 в запрос SQL для этого вопроса, потому чтоизначально таблица была перезаписана и не добавлена)

Но если я изменю выражение на что-то другое, например

ado.Execute "INSERT INTO [recalculated] ([TIME PERIOD]) " & _
            " SELECT TOP 3 'cheese' AS [TIME PERIOD] FROM [input]"

, оно отлично работает, recalculated заполняется, а input -оставил как есть.

Кто-нибудь знает, что происходит и как я могу это исправить?По крайней мере, может ли кто-то воспроизвести это, просто чтобы доказать, что я не сумасшедший?


Я только что обнаружил, что это работает, как и ожидалось, если рабочая книга уже открыта в Excel, когда сценарийвыполняется

1 Ответ

0 голосов
/ 23 августа 2011

Когда я запускаю код, он работает так, как я и ожидал, т.е. вставки идут в таблицу recalculated.

Вот аналогичный скрипт, который воссоздает ваш сценарий, но использует новую книгу, созданную с нуля:

' Const inputfile = "New Microsoft Office Excel Worksheet (2).xlsx"
Const inputfile_with_path = "C:\New Microsoft Office Excel Worksheet (2).xlsx"

Dim ado: Set ado = CreateObject("ADODB.Connection")
ado.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=""" _
                        & inputfile_with_path & """;Extended Properties=""Excel 12.0 Xml;HDR=YES"";"

ado.CursorLocation = 3
ado.Open

ado.Execute "CREATE TABLE [input] ([TIME PERIOD] VARCHAR(255));"
ado.Execute "INSERT INTO [input] VALUES ('WEEK OF JUN 21, 2010 (B)');"
ado.Execute "INSERT INTO [input] VALUES ('WEEK OF JUN 07, 2010 (B)');"
ado.Execute "INSERT INTO [input] VALUES ('WEEK OF JUN 21, 2010 (B)');"
ado.Execute "INSERT INTO [input] VALUES ('WEEK OF JAN 04, 2010 (B)');"
ado.Execute "INSERT INTO [input] VALUES ('WEEK OF JAN 04, 2010 (B)');"

ado.Execute "CREATE TABLE [recalculated] ([TIME PERIOD] VARCHAR(255));"

ado.Execute "INSERT INTO [recalculated] ([TIME PERIOD]) " & _
            "SELECT Format(CDate(Mid([TIME PERIOD], 8, 13)), 'mm/dd/yyyy') " & _
            "AS [TIME PERIOD] FROM [input]"

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