簡體   English   中英

Mysql 存儲過程返回 LAST_INSERT_ID 為零

[英]Mysql stored procedure returns LAST_INSERT_ID as zero

我在將 output 參數從 mysql 存儲過程返回到 VBA 宏時遇到問題。 我寫了這個 mysql 存儲過程 InsertProduct 將新產品插入數據庫:


DELIMITER $$
CREATE PROCEDURE `InsertProduct`(IN `p_modelno` VARCHAR(40), IN `p_name` VARCHAR(120), OUT `p_last_id` BIGINT)
BEGIN
    INSERT INTO product (product_id, name, model_no) VALUES (null, p_name, p_modelno);
    SET p_last_id =  LAST_INSERT_ID(); 
END$$
DELIMITER ;

當我在 phpmyadmin 中測試此程序時,它正確返回 Last_Insert_ID(例如 - 新記錄的 ID 為 4454,它顯示 p_last_id=4454),請參見此圖像: phpmyadmin 測試程序返回正確的 ID

然后我在 excel 中有一個用戶表單,其中兩個文本框(txtModelNo,txtName)作為前端將新產品保存到數據庫中。 我已經編寫了 VBA 宏來將產品保存到數據庫中,然后我想使用最后一個插入記錄 ID 來顯示 msgbox。 這是問題所在,宏中的 p_last_id 總是返回 0 ...

VBA 中的代碼用於運行此存儲過程並使用此 output 參數:



Sub InsertProduct()

  
    Dim cnSqlConn As New ADODB.Connection
    cnSqlConn.Connectionstring = "DSN=XXX"
    cnSqlConn.Open
    
    Dim cmd As New ADODB.Command
    
    With cmd
        .ActiveConnection = cnSqlConn
        .CommandType = adCmdStoredProc
        .CommandText = "InsertProduct"
        .CommandTimeout = 15
    End With
    

    cmd.Parameters.Append cmd.CreateParameter("p_modelno", adVarChar, adParamInput, 40, Me.txtModelNo) 
    cmd.Parameters.Append cmd.CreateParameter("p_name", adVarChar, adParamInput, 120, Me.txtName)
    cmd.Parameters.Append cmd.CreateParameter("p_last_id", adInteger, adParamOutput, 11)
    cmd.Execute lngResult

     Msgbox cmd.Parameters("p_last_id") /****** HERE COMES THE PROBLEM - IT ALWAYS RETURNS 0 !! *******/

    Set cmd = Nothing
    cnSqlConn.Close
    Set cnSqlConn = Nothing

End Sub()

我已經閱讀了很多關於這個主題的文章,但沒有任何幫助。 提前感謝您的任何建議。

好的,我重寫了沒有output參數的程序:


DELIMITER $$
CREATE PROCEDURE `InsertProduct`(IN `p_modelno` VARCHAR(40), IN `p_name` VARCHAR(120))
BEGIN
    INSERT INTO product (product_id, name, model_no) VALUES (null, p_name, p_modelno);
    SELECT LAST_INSERT_ID() as last_id FROM product; 
END$$
DELIMITER ;

VBA程序代碼:


Sub InsertProduct()

  
    Dim cnSqlConn As New ADODB.Connection
    cnSqlConn.Connectionstring = "DSN=XXX"
    cnSqlConn.Open
    
    Dim cmd As New ADODB.Command
    
    With cmd
        .ActiveConnection = cnSqlConn
        .CommandType = adCmdStoredProc
        .CommandText = "InsertProduct"
        .CommandTimeout = 15
    End With
    

    cmd.Parameters.Append cmd.CreateParameter("p_modelno", adVarChar, adParamInput, 40, 
    Me.txtModelNo) 
    cmd.Parameters.Append cmd.CreateParameter("p_name", adVarChar, adParamInput, 120, 
    Me.txtName)
    
     dim rstProduct as new ADODB.Recordset set rstProduct = cmd.Execute Msgbox rstProduct.Fields("last_id").Value /* displays the correct value */ 
    rstProduct.Close
    set rstProduct = nothing
    Set cmd = Nothing
    cnSqlConn.Close
    Set cnSqlConn = Nothing

End Sub()

暫無
暫無

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

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