2012-01-09 137 views
0

上下文:Windows7,VBScript,ADODB和ADOX。ADODB命令和複雜的SQL命令?

我寫了一些VBScript代碼,它創建一個數據庫,創建三個表,使用數據加載其中的一個,然後嘗試針對這些表發出一組SQL語句。

一切工作正常,但最後一步:SQL語句,當被採取到自己的查詢生成器,工作正常。他們似乎不在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; 

這三個表,你可能已經制定出來,被稱爲「頻道」,「產品導入」和「Tbl_Category路徑生成器」。

+0

你做完健全檢查如那個表'Feed'實際上包含數據,錯誤處理已經開啓(例如,不使用'On Error Resume Next'),你沒有忽略提交事務,使用'RecordsAffected'屬性等。 – onedaywhen 2012-01-09 08:48:04

+0

...那裏這裏沒有足夠的細節來重新創建您的場景並且不幸地測試端到端。任何發佈更完整但簡化版本的機會? – onedaywhen 2012-01-09 08:49:44

回答

0

解決方案(至少對我來說)是停止使用ADODB.Command和使用ADODB.Connection而不是Execute方法,即

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