[英]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.