【发布时间】:2017-12-29 16:40:44
【问题描述】:
希望您能提供帮助 - 我在 INSERT 后获取最后一个 ID 时遇到问题。
所以环境——Access 2016、SQL Server 和 VBA
Dim db As DAO.Database
Dim RS As New ADODB.Recordset
Dim sql As String
我已经声明了这些论文,然后是私有子。
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
我期待这段代码的结果:
sql = "SELECT @@IDENTITY As IDT"
RS.Open sql, CurrentProject.Connection, adOpenStatic, adLockReadOnly
IDT = RS!IDT
但这给了我“0”的结果。
你能帮忙吗?
谢谢
【问题讨论】:
-
可能相关,另请参阅此答案中嵌入的访问特定链接:stackoverflow.com/a/186563/84206
-
我推荐一个存储过程,以防止我看到的 SQL 注入可能出现的问题。 proc 可以进行插入并有一个输出参数给你 ID。
-
谢谢,我得检查一下——我不熟悉存储过程。
-
考虑同时使用 parameterization 和 Access'
PARAMETERS子句,因为其中一些表单值看起来对聪明的用户来说是开放式的。
标签: sql sql-server vba ms-access