Использование транскрипций и параметров в ADO в VBScript - PullRequest
2 голосов
/ 07 июля 2011

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

Я написал приведенный ниже скрипт, который работает для одногопараметр, (хотя это кажется довольно длинным способом, поэтому, если кто-то знает более короткий путь, пожалуйста, кричите).Однако я не могу понять, как расширить это до двух параметров:

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 Ответ

1 голос
/ 10 июля 2011

Я никогда не пробовал передавать значения параметров с помощью метода Execute, поэтому не могу точно сказать, что не так. Я скажу, что документация гласит, что вторым аргументом должен быть массив значений, поэтому, возможно, если вы попытаетесь 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)
...