mysql - Excel VBA & MYSQL 的 Select LAST_INSERT_ID();

标签 mysql excel vba

我有代码可以从我的工作簿中提取数据并将其加载到 SQL 数据库中。它工作得很好,但我刚刚意识到,一旦我插入了一些东西并且为该行生成了一个主键,我想将它添加回我的 excel 工作簿中,以便我可以对它们运行更新语句。

在 SQL 中,我知道我可以运行

Insert into reports (blah, blah, blah, etc...)
Values (1,2,3, etc....)
Select LAST_INSERT_ID();

并获取我刚刚插入的新行的主键,但我不知道如何获取该 Select LAST_INSERT_ID(); 的输出;回到 Excel ....

我的代码是这样的:

SQLINSERT = "Insert into `dwInvoice`.`report` (`TrackNumber`, `RegNSB`, `TrackCount`, `TrackNSB`, `TotalBacklog`, `AverageBacklogTrackMargin`, `RegRGP`, `RGPPercent`, `PriceCode`, `PMName`, `PMComments`, `PMMRecommendations`, `Outcome`, `NewGPPercent`, `AdditionalGP`, `HomeBranch`, `HomeBranchCode`, `BranchCode`, `PMM`, `FSRName`, `SMRName`, `DateReport`, `NEDA`, `NEDAName`, `HomeNEDA`, `HomeNEDAName`, `InvCustEB`, `InvCustNum`, `InvCustName`, `InvCustDWIndicator`, `RegNum`, `AppDate`, `InvoiceDate`, `InvoiceNumber`, `PartNumber`, `DWCustEB`, `DWCustNumb`, `DWCustName`, `DWIndicator`, `DRAWstatus`, `MarginType`, `UnitResale`, `UnitCost`, `PriceCost`, `UnitsShipped`, `TeamNum`, `TeamName`, `IndirectCustNum`, `IndirectCustDWCode`, `IndirectCustEB`, `IndirectCustName`) VALUES("
SQLOUTPUT = "Select LAST_INSERT_ID()"

For Each c In Range("A2:A" & lastRow)
SQLBODY = "'" & c.Value & "','" & c.Offset(0, 1).Value & "','" & c.Offset(0, 2).Value & "','" & c.Offset(0, 3).Value & "','" & c.Offset(0, 4).Value & "','" & c.Offset(0, 5).Value & "','" & c.Offset(0, 6).Value & "','" & c.Offset(0, 7).Value & "','" & c.Offset(0, 8).Value & "','" & c.Offset(0, 9).Value & "','" & c.Offset(0, 10).Value & "','" & c.Offset(0, 11).Value & "','" & c.Offset(0, 12).Value & "','" & c.Offset(0, 13).Value & "','" & c.Offset(0, 14).Value & "','" & c.Offset(0, 15).Value & "','" & c.Offset(0, 16).Value & "','" & c.Offset(0, 17).Value & "','" & c.Offset(0, 18).Value & "','" & c.Offset(0, 19).Value & "','" & c.Offset(0, 20).Value & "','" & c.Offset(0, 21).Value & "','" & c.Offset(0, 22).Value & "','" & c.Offset(0, 23).Value & "','" & c.Offset(0, 24).Value & "','" & c.Offset(0, 25).Value & "','" & c.Offset(0, 26).Value & "','" _
        & c.Offset(0, 27).Value & "','" & c.Offset(0, 28).Value & "','" & c.Offset(0, 29).Value & "','" & c.Offset(0, 30).Value & "','" & c.Offset(0, 31).Value & "','" & c.Offset(0, 32).Value & "','" & c.Offset(0, 33).Value & "','" & c.Offset(0, 34).Value & "','" & c.Offset(0, 35).Value & "','" & c.Offset(0, 36).Value & "','" & c.Offset(0, 37).Value & "','" & c.Offset(0, 38).Value & "','" & c.Offset(0, 39).Value & "','" & c.Offset(0, 40).Value & "','" & c.Offset(0, 41).Value & "','" & c.Offset(0, 42).Value & "','" & c.Offset(0, 43).Value & "','" & c.Offset(0, 44).Value & "','" & c.Offset(0, 45).Value & "','" & c.Offset(0, 46).Value & "','" & c.Offset(0, 47).Value & "','" & c.Offset(0, 48).Value & "','" & c.Offset(0, 49).Value & "','" & c.Offset(0, 50).Value & "')"
SQLEND = ";"

SQL_GET = "" & SQLIF & SQLINSERT & SQLBODY & SQLEND
cmd.CommandText = SQL_GET
Set rs = cmd.Execute
next c

我知道这很长......但它有效。

我可以修改将 SQL_GET 更改为的语句:

    SQL_GET = "" & SQLIF & SQLINSERT & SQLBODY & SQLEND & SQLOUTPUT & SQLEND

Select LAST_INSERT_ID() ; 添加到 SQL 语句的末尾,但我仍然不知道如何实际获取输出回 Excel 的值。关于如何实现这一目标的任何想法?

最佳答案

Set rs = cmd.Execute 之后放置以下内容:

rs.open SQLOUTPUT

'to dump the recordset into a worksheet range:
Sheet1.Range("A1").CopyFromRecordSet rs

`to dump the result into a variable:
Dim lastInsertID as string
lastInsertID = rs.Fields(1).value

关于mysql - Excel VBA & MYSQL 的 Select LAST_INSERT_ID();,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26127453/

相关文章:

mysql - 如何更改列名并以特殊字符显示?

mysql - 创建主键和外键关系

Excel VBA 将范围传递给函数会产生 424 : Object Required

java - 如何在java(Excel)中写入特定列并读取特定列?

excel - 将偏移行添加到给定范围。 Excel VBA

mysql - 在 MySQL 中插入/更新随机日期

php - 通过php生成报告

excel - 为什么我的 Worksheet_Activate 不会触发?

mysql - INSERT INTO SELECT 不能正常工作

java - 以编程方式导出 VBA 模块