2011-07-07 4 views
2

ADO、VBScript、およびAccessで、パラメータとトランザクションがちょっと残っています。基本的には、大規模なループを経て結果をデータベースに書き込むので、トランザクションでラップする必要があります。それ以外の場合は、時間がかかります。VBScriptでのADOでの文字列とパラメータの使用

私は以下のスクリプトを書いたことがあります。これは、1つのパラメータに対して機能しますが、これは少し長いようですが、誰かが短い方法を知っていれば、叫ばせてください。私は私が何をすべきかを把握することはできません

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

:私はこれを拡張したい場合、例えば

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 

:しかし、私は2つのパラメータにこれを拡張する方法を考え出すことはできません私のパラメータ。私はちょうどここでばかげていると確信して、かなりこれらの仕事に従っていない。

答えて

1

Executeメソッドでパラメータ値を渡すことは一度もなかったので、間違っているとは言えません。 documentationは、2番目の引数がの配列の値でなければならないと言っていますので、Array("Field1Val", "Field2Val")を試してみるとうまくいくでしょう。

私が通常行うことは、各パラメータに名前を付けることです。次に、ループ内で値を変更するために参照することができます。各パラメータに固有の名前が付いている限り、任意の名前を使用できます。例として:限りコードを短縮するなど

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

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

、私が作ることができる唯一の提案は、よく、パラメータを作成するCreateParameterメソッドを使用しています。これにより、関連するすべてのプロパティを1行に設定できます。

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

ああ、素晴らしい。それは本当に正しい方向に私を指摘しています。本当にありがとう。 – Simon

関連する問題