2012-01-09 8 views
0

コンテキスト:Windows7、VBScript、ADODBおよびADOX。ADODBコマンドと複雑なSQLコマンド?

データベースを作成し、3つのテーブルを作成し、そのうちの1つにデータを読み込み、これらのテーブルに対して一連のSQL文を発行しようとするVBScriptコードを記述しました。

最後のステップを除いてすべて正常に動作します: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は、独自のツールの1つで、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; 

3つのテーブルを、あなたが働いている可能性として、「製品のインポート」、「フィード」と呼ばれ、「Tbl_Categoryパスビルダー」。

+0

VIZあなたは、例えば健全性チェックを行っていますそのテーブルの 'Feed'には、エラー処理がオンである(On Error Resume Next'を使用しないなど)、' RecordsAffected'プロパティなどを使用してトランザクションをコミットすることを省略していないというデータが実際に含まれています。 – onedaywhen

+0

... there残念ながら、あなたのシナリオを再現し、エンドツーエンドでテストするのに十分な詳細はここにありません。より完全で単純化されたバージョンを投稿する可能性はありますか? – onedaywhen

答えて

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