Команда ADODB и сложные команды SQL? - PullRequest
0 голосов
/ 09 января 2012

Контекст: Windows7, VBScript, ADODB и ADOX.

Я написал некоторый код VBScript, который создает базу данных, создает три таблицы, загружает в одну из них данные и затем пытается выполнить набор операторов SQLс этими таблицами.

Все работает отлично, за исключением последнего шага: операторы SQL, когда принимаются в собственный построитель запросов Access, работают нормально.Похоже, они не работают за пределами Access, и нет сообщений об ошибках.Операторы SQL отображаются и, очевидно, выполняются, но содержимое базы данных доступа не изменяется.Я в недоумении, чтобы понять, почему.

Const dbFile = "C:\database.mdb"
strDSN = "Provider=Microsoft.Jet.OLEDB.4.0;Mode=Read|Write;Data Source=" & dbFile
...
Const adVarWChar = 202
Const adLongVarWChar = 203
Const adDouble = 5
Const adInteger = 3

Const adCmdText = 1

Const adLockOptimistic = 3
Const adOpenDynamic = 2
Const adCmdTable = &H0002
Const adUseClient = 3

...

Set objConn = CreateObject("ADODB.Connection")
objConn.CursorLocation = adUseClient
objConn.Open strDSN

Set objCmd  = CreateObject("ADODB.Command")

Set o = createobject("Std.Ini2")
o.Load "C:\Queries.ini"
d = o.GetValue("Setup", "Queries", vbNullString)
a = Split( d, ", ")
For Each s In a
    cmd = o.GetValue(s,"Query",vbNullString)
    WScript.Echo cmd

    With objCmd
        Set .ActiveConnection = objConn
        .CommandText = cmd
        .CommandType = adCmdText
        .CommandTimeout = 60
        .Prepared = True    
        .Execute
    End With
Next

Std.Ini2 - это один из моих собственных инструментов, который обращается к файлу INI.

Ниже приведен пример фрагмента INI:

[Qry-01b-Delete Products from Extg product-import]
Query=DELETE [Product-import].* FROM [Product-import];

[Qry-02-Append Feed To Product-import]
Query=INSERT INTO [Product-import] ( product_sku, product_name, product_price ) SELECT Feed.Col1, Feed.Col2, Feed.Col3 FROM Feed;

[Qry-03a-Delete All Records From Exisiting Category Path Builder]
Query=DELETE [Tbl_Category Path builder].* FROM [Tbl_Category Path builder];

[Qry-03b-Append Products to Category Builder]
Query=INSERT INTO [Tbl_Category Path builder] ( SKU, Product ) SELECT Feed.Col1, Feed.Col2 FROM Feed;

три таблицы, как вы уже, возможно, называли «Feed», «Product-import» и «Tbl_Category Path Builder».

1 Ответ

0 голосов
/ 11 января 2012

Решением (по крайней мере для меня) было прекратить использование ADODB.Command и использовать вместо этого метод Execute ADODB.Connection, а именно

Set objConn = CreateObject("ADODB.Connection")
objConn.CursorLocation = adUseClient
objConn.Open strDSN

Set ERS = CreateObject("ADODB.Recordset")

Set o = createobject("Std.Ini2")
o.Load "C:\Users\BruceAxtens\Desktop\Nextra-feed-db-instructions-queries\Nextra_Queries.ini"
d = o.GetValue("Setup", "Queries", vbNullString)
a = Split( d, ", ")
For Each s In a
    cmd = o.GetValue(s,"Query",vbNullString)
    WScript.Echo cmd
    Set ERS = objConn.Execute( cmd )
Next
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...