2010-11-24 46 views
0

Je dois appeler une procédure stockée créée dans Access 2007 à partir du programme dans VB 6.0.Appel d'une procédure stockée dans Access 2007 à partir de VB 6.0

C'est le travail procédure stockée sur le db d'accès lorsque vous cliquez droit -> Voir Design:

PARAMETERS prodCode Text (255), orderNum Text (255); 
SELECT Sum(FullPrice) AS Expr1 
FROM Transacs 
WHERE (((Transacs.prodcode)=[prodCode]) AND ((Transacs.ordernum)=[orderNum]) AND ((Transacs.Type)='R')); 

Ceci est le code qui doit être réparé en VB 6.0:

Set TransRs = New ADODB.Recordset 
Dim transcommQuery As String 
transcommQuery = "execute SP_SumOfTransComm " & prodcode & " " & orderNum 

TransRs.Open transcommQuery, db, adOpenDynamic, adLockBatchOptimistic 

Ligne 3 : transcommQuery = "exécuter SP_SumOfTransComm" & selProdcode & "" & selPolNo est celui dont j'ai besoin. Comment appeler correctement la procédure stockée à partir de là?

Répondre

2

Vous pouvez utiliser des objets Command pour appeler des procédures stockées. Pour des informations détaillées, vous pouvez jeter un oeil here.

Votre code ressemblerait à quelque chose comme:

Dim Cmd1 As ADODB.Command 
Set Cmd1 = New ADODB.Command 
Cmd1.ActiveConnection = db 
Cmd1.CommandText = "SP_SumOfTransComm" 
Cmd1.CommandType = adCmdStoredProc 
Cmd1.Parameters.Append Cmd1.CreateParameter(, adVarWChar, , 255, prodcode) 
Cmd1.Parameters.Append Cmd1.CreateParameter(, adVarWChar, , 255, orderNum) 
Dim TransRs As ADODB.Recordset 
Set TransRs = Cmd1.Execute() 
+0

Cela semble * presque * droite, mais l'appel à execute sur un objet de commande retourne toujours une lecture seule, le curseur avant uniquement. Je crois que vous devez créer un nouvel objet Recordset et appelez Open sur le passage de l'objet Command en tant que paramètre Source (sans paramètre de connexion puisque vous avez déjà défini ActiveConnection). Cela vous permet de demander des types de verrouillage et de curseur spécifiques. – Bob77

+0

Thx. Je vais essayer, car utiliser Execute ne fonctionnait pas. Je devine que ce serait 'TransRS.Open Cmd1, db' – elcool

+0

Pour une raison quelconque, en faisant Append, il ajoute plus {?} À la procédure stockée, et au lieu de 2 paramètres, il en a 4 maintenant. Donc, je le résous avec une commande de texte directe comme on le voit sur ma réponse. – elcool

0

Vos paramètres doivent être entre guillemets et séparés par des virgules par exemple

transcommQuery = "EXECUTE SP_SumOfTransComm '@prodcode', '@orderNum';" 
transcommQuery = Replace$(transcommQuery, "@prodcode", prodcode) 
transcommQuery = Replace$(transcommQuery, "@orderNum", orderNum) 

... mais alors vous devez vous soucier d'échapper des citations et d'autres mauvaises surprises.

Mieux vaut utiliser un objet Command avec des objets fortement typés Parameter et laisser le fournisseur OLE DB gérer les valeurs de désinfection. Voir la réponse de @ MicSim pour un exemple de code.

0

Il travaille pour moi maintenant, procédez comme suit:

Set TransRs = New ADODB.Recordset 
Dim transcommQuery As String 

transcommQuery = "{ call SP_SumOfTransComm('" & prodcode & "','" & orderNum & "') }" 

TransRs.Open transcommQuery, db, adOpenDynamic, adLockBatchOptimistic