代码之家  ›  专栏  ›  技术社区  ›  elcool codeVerine

从vb6.0调用access2007中的存储过程

  •  0
  • elcool codeVerine  · 技术社区  · 15 年前

    我需要从VB6.0中的程序调用Access 2007中创建的存储过程。

    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'));
    

    这是VB 6.0中需要修复的代码:

    Set TransRs = New ADODB.Recordset
    Dim transcommQuery As String
    transcommQuery = "execute SP_SumOfTransComm " & prodcode & " " & orderNum
    
    TransRs.Open transcommQuery, db, adOpenDynamic, adLockBatchOptimistic
    

    第3行: 是我需要修理的那个。如何从那里正确调用存储过程?

    3 回复  |  直到 15 年前
        1
  •  2
  •   onedaywhen    15 年前

    可以使用命令对象调用存储过程。有关详细信息,您可以查看 here .

    您的代码看起来像:

    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()
    
        2
  •  0
  •   onedaywhen    15 年前

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

    ……但你必须担心逃避引用和其他类似的恶行。

    最好使用 Command Parameter

        3
  •  0
  •   elcool codeVerine    15 年前

    Set TransRs = New ADODB.Recordset
    Dim transcommQuery As String
    
    transcommQuery = "{ call SP_SumOfTransComm('" & prodcode & "','" & orderNum & "') }"
    
    TransRs.Open transcommQuery, db, adOpenDynamic, adLockBatchOptimistic