简体   繁体   English

VBA + SQL Server-获取插入的最后一个ID

[英]VBA + SQL Server - Get Last ID Inserted

Hope you can help - I'm having issues getting the last ID after INSERT. 希望您能提供帮助-INSERT后获取最后一个ID时遇到问题。

So the environment - Access 2016, SQL Server and VBA 因此环境-Access 2016,SQL Server和VBA

Dim db As DAO.Database
Dim RS As New ADODB.Recordset
Dim sql As String

I have theses declared and then private sub. 我先宣读论文,然后再发表私人潜艇。

Private Sub CreateOrderHeader()
Dim CustomerID As Integer
Dim OrderDate As String
Dim OrderStatus As String
Dim OrderValue As Double
Dim OrderNotes As String
Dim OrderPostageID As String
Dim OrderAddressID As String
Dim OrderBatchID As Integer
Dim OrderPayment As String
Dim OrderCourierID As String
Dim OrderAgentID As Integer
Dim OrderOutstanding As Double

CustomerID = tbxCusID
OrderDate = Format(Now)
OrderStatus = "InProcess"
OrderValue = txtTotal.value
OrderNotes = tbxNotes.value
OrderPostageID = txtPostage.Column(0)

If tbxCustomerAddress = tbxDeliveryAddress Then
    OrderAddressID = 3 'default customers address
Else
    'NEED TO GET CUSTOMER ADDRESS TO DO
End If
OrderBatchID = cmbBatch.Column(0)
OrderPayment = sPayMethod
OrderCourierID = cbxShipping.Column(0)
OrderAgentID = 0
OrderOutstanding = txtTotal.value

 Dim testvar As String

sql = "INSERT INTO dbo_OrderHeader " _
      & "(OrdCusID, OrdDate, OrdStatus, OrdValue, OrdNotes, OrdPostageID, OrdDelAddID,OrdBatchID,OrdPaymentMethod, OrdCourierID,ordAgentID, OrdOutstanding,OrdSource) " _
      & " VALUES ('" & CustomerID & "' ,'" & OrderDate & "', '" & OrderStatus & "', '" & OrderValue & "', '" & OrderNotes & "', '" & OrderPostageID & "','" & OrderAddressID & "','" & OrderBatchID & "','" & OrderPayment & "','" & OrderCourierID & "','" & OrderAgentID & "','" & OrderOutstanding & "', 1)"



DoCmd.RunSQL (sql)

sql = "SELECT @@IDENTITY As IDT"
RS.Open sql, CurrentProject.Connection, adOpenStatic, adLockReadOnly
IDT = RS!IDT

MsgBox ("Succes - OrderHeader" & " '" & IDT & "'  ")
End Sub

I was expecting a result from this code: 我期待从此代码的结果:

sql = "SELECT @@IDENTITY As IDT"
RS.Open sql, CurrentProject.Connection, adOpenStatic, adLockReadOnly
IDT = RS!IDT

But that gives me "0" as result. 但是,结果是“ 0”。

Can you help please. 你能帮忙吗?

Thanks 谢谢

You can try this : 您可以尝试以下方法:

Set db = CurrentDB
db.Execute(sql)

IDT = db.OpenRecordset("SELECT @@IDENTITY")(0)
Set db = Nothing

NOTE 注意

Don't execute your insert query like DoCmd.RunSQL (sql) Instead follow the above approach. 不要执行DoCmd.RunSQL (sql)类的插入查询,而应遵循上述方法。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM