簡體   English   中英

VBA 存儲過程 SQL 服務器

[英]VBA stored procedure SQL Server

我正在嘗試將數據從 excel 電子表格發送到 sql 服務器。 代碼運行正常,但狀態更改未完成。 在這些步驟之前,我已經在另一個進程中添加了帶有請求編號(或 ID)的數據,所以我想更改來自 excel 的請求編號與 sql 服務器中的請求編號相同的信息。 有人看到我可能錯過的東西嗎? 非常感謝提前

VBA代碼:

    Dim mobjConn As ADODB.Connection
    Dim strConn As String
    Dim mobjCmd As ADODB.Command
    Dim stat As String

    Set mobjConn = New ADODB.Connection
        strConn = "mystrConn"
        mobjConn.Open strConn
    Set mobjCmd = New ADODB.Command
    
    stat = "DONE"
    
    'INSERT
    With mobjCmd
        .ActiveConnection = mobjConn
        .CommandText = "MySQL_Command"
        .CommandType = adCmdStoredProc
        .CommandTimeout = 0
    End With
    
    With mobjCmd
'
        .Parameters.Item("@Param1") = Date
        .Parameters.Item("@Maturity") = CStr(StartRange.Offset(nRow, 6).Value)
        .Parameters.Item("@Param3") = StartRange.Offset(nRow, 13).Value
        .Parameters.Item("@Status_Request") = stat
        .Parameters.Item("@RequestNumber") = StartRange.Offset(nRow, 16).Value
lineExecute:
        .Execute
            
    End With

SQL 存儲過程獲取參數並嘗試用相同的編號請求更新其他參數:

ALTER PROCEDURE [dbo].[MySQL_Command]

    @Param1 AS date = '',
    @Maturity AS nvarchar(50) = '',
    @Param3 AS nvarchar(50) = '',
    @Status_Request AS nvarchar(10) = '',
    @RequestNumber AS int = ''
    
AS
BEGIN

    SELECT CONVERT(nvarchar(50),@Maturity)

    IF NOT EXISTS (SELECT * FROM myTable  WHERE RequestNumber = @RequestNumber)
        BEGIN
            INSERT INTO DCI_Requests_Table (Param1,
                                            Maturity,
                                            Param3,
                                            Status_Request,
                                            RequestNumber)

                    VALUES      (@Param1,
                                 @Maturity,
                                 @Param3,
                                 @Status_Request,
                                 @RequestNumber)
        
     END
    ELSE
        BEGIN
            UPDATE DCI_Requests_Table
                SET
                    Param1= ISNULL(@Param1,Param1),
                    Maturity= ISNULL(@Maturity,Maturity),
                    Param3= ISNULL(@Param3,Param3),
                    Status_Request= ISNULL(@Status_Request,Status_Request),
                    RequestNumber= ISNULL(@RequestNumber,RequestNumber)

                 WHERE RequestNumber = @RequestNumber
        END
END
GO

這就是我做這種事情的方式。

Sub RunSProc()

Dim cn As ADODB.Connection
Dim cmd As ADODB.Command
Dim rs As ADODB.Recordset
Dim strConn As String

Set cn = New ADODB.Connection

strConn = "Provider=SQLOLEDB;"
strConn = strConn & "Data Source=your_server_name;"
strConn = strConn & "Initial Catalog=Northwnd;"
strConn = strConn & "Integrated Security=SSPI;"

cn.Open strConn

Set cmd = New ADODB.Command
cmd.ActiveConnection = cn
cmd.CommandText = "MyOrders"
cmd.CommandType = adCmdStoredProc
cmd.Parameters.Refresh
cmd.Parameters(1).Value = ActiveSheet.Range("E1").Text
cmd.Parameters(2).Value = ActiveSheet.Range("E2").Text
Set rs = cmd.Execute()

If Not rs.EOF Then
    Worksheets("sheet2").Range("A5:D500").CopyFromRecordset rs
    rs.Close
End If

End Sub

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM