2011-07-07 47 views
2

我在ADO中的VBScript和Access中遇到了一些參數和事務。基本上,我正在通過一個大規模的循環並將結果寫入數據庫,所以我需要將它包裝在一個事務中,否則它需要很長時間。在VBScript中使用ADO中的轉換和參數

我已經寫了下面的腳本,它適用於單個參數,(儘管這看起來有點長,所以如果有人知道更短的方式,請大喊)。但是我不能工作了如何將此擴大到兩個參數:

objConn.BeginTrans 

    set oParm = CreateObject("ADODB.Parameter") 
    oParm.Value = "" 
    oParm.Type = 200 
    oParm.Direction = 1 
    oParm.Size = 100 

    Set oCmd = CreateObject("ADODB.Command") 
    oCmd.ActiveConnection = objConn 
    oCmd.commandText = "INSERT INTO table (field) VALUES (?)" 
    oCmd.commandType = 1 
    oCmd.Parameters.Append oParm 


    'Big loop here that goes through lots of lines. 

     oCmd.Execute ,"Field",1 

    'Loop 

objConn.CommitTrans 

例如,如果我想這個擴展爲:

oCmd.commandText = "INSERT INTO table (field1, field2) VALUES (?,?)" 

我想不出我做什麼用我的參數。我敢肯定,我只是在這裏愚蠢,並沒有完全遵循這些工作。

回答

1

我從來沒有嘗試通過Execute方法傳遞參數值,所以我不能說完全是錯的。我會說,documentation指出第二個參數應該是數組的值,所以也許如果你嘗試Array("Field1Val", "Field2Val"),這將工作。

我通常做的是給每個參數一個名字,然後你可以在你的循環中引用它來改變它的值。只要每個參數具有唯一的名稱,就可以使用您喜歡的任何名稱。作爲一個例子:

' Sometime before your loop 
oParm.Name = "foobar" 

' Start loop 
    oCmd.Parameters("foobar").Value = "someValue" 
    oCmd.Execute , , 1 
' End loop 

至於縮短代碼,所述唯一的建議我可以使正在使用CreateParameter方法,以及,創建參數。這將允許您在一行上設置所有相關屬性。

Set oParm = oCmd.CreateParameter("foobar", 200, 1, 100) 
+0

啊,太棒了。這真的讓我朝着正確的方向前進。非常感謝。 – Simon

相關問題