2011-07-07 3 views
2

Je suis un peu coincé avec les paramètres et les transactions dans ADO, dans VBScript et Access. Fondamentalement, je travaille à travers une boucle massive et écrit les résultats dans une base de données, donc j'ai besoin d'envelopper dans une transaction sinon cela prend des années.Utilisation des transcations et des paramètres dans ADO dans VBScript

J'ai écrit le script ci-dessous qui fonctionne pour un seul paramètre (bien que cela semble un peu long à faire, donc si quelqu'un connaît un moyen plus court, s'il vous plaît crier). Cependant, je ne peux pas travailler sur la façon d'étendre cela à deux paramètres:

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 

Par exemple, si je voulais développer cela:

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

Je ne peux pas comprendre ce que je fais avec mes paramètres. Je suis sûr que je suis juste stupide ici et ne pas suivre tout à fait comment cela fonctionne.

Répondre

1

Je n'ai jamais essayé de transmettre des valeurs de paramètres via la méthode Execute, donc je ne peux pas vraiment dire ce qui ne va pas. Je vais dire que le documentation indique que le deuxième argument devrait être un tableau de valeurs, donc peut-être si vous avez essayé Array("Field1Val", "Field2Val"), cela fonctionnerait.

Ce que je fais habituellement est de donner un nom à chaque paramètre, alors vous pouvez le référencer dans votre boucle pour changer sa valeur. Vous pouvez utiliser n'importe quel nom que vous aimez, tant que chaque paramètre a un nom unique. A titre d'exemple:

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

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

En ce qui concerne le raccourcissement du code, la seule suggestion que je puisse faire est d'utiliser la méthode CreateParameter, eh bien, créez le paramètre. Cela vous permettra de définir toutes les propriétés pertinentes sur une seule ligne.

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

Ah, fantastique. Cela m'a vraiment orienté dans la bonne direction. Merci beaucoup. – Simon

Questions connexes