2017-12-29 55 views
1

희망 사항 - INSERT 후 마지막 ID를 가져 오는 데 문제가 있습니다.VBA + SQL Server - 마지막 ID 삽입 됨

그래서 환경 - 액세스 2016, SQL Server와 나는 논문이 선언 한 VBA

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

하고 개인 서브.

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

을하지만 그 날 "0"결과로 제공합니다

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 

는이 코드에서 결과를 기다리고 있었다.

도움을 주실 수 있습니까?

감사

+0

아마 관련이 답변에 포함 된 액세스 특정 링크를 참조하십시오 : https://stackoverflow.com/a/186563/84206 – AaronLS

+0

나는 SQL 주입과 함께 볼 수있는 가능한 문제를 방지하기 위해 저장 프로 시저를 권장합니다. proc은 삽입 작업을 수행 할 수 있으며 ID를 제공하는 출력 매개 변수를 가질 수 있습니다. – Ctznkane525

+0

감사합니다. 확인해야 할 것입니다. Store Procedures에 익숙하지 않습니다. – Azmodan

답변

2

당신이 시도 할 수 있습니다 :

가 대신 위의 방법에 따라 DoCmd.RunSQL (sql)처럼 삽입 쿼리를 실행하지 마십시오

Set db = CurrentDB 
db.Execute(sql) 

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

참고.

+0

고마워요.하지만 여전히 0을 반환합니다. – Azmodan

+0

업데이트 된 답변을 확인하십시오. –

+0

우수 - 대단히 감사합니다! – Azmodan