2017-12-29 107 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 

私が宣言論文、その後プライベートサブを持っています。

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" を与えます。

お手伝いできますか?

おかげ

+0

おそらく、この回答に埋め込まれたAccess固有のリンクも参照してください。https://stackoverflow.com/a/186563/84206 – AaronLS

+0

SQLインジェクションで発生する可能性のある問題を防ぐため、ストアドプロシージャをお勧めします。 procは挿入を行い、IDを与える出力パラメータを持つことができます。 – Ctznkane525

+0

ありがとう、私はチェックする必要があります - 私は店の手順に精通していないよ。 – Azmodan

答えて

2

あなたはこれを試すことができます。

は、代わりに上記のアプローチに従うDoCmd.RunSQL (sql)ようなあなたのINSERTクエリを実行しないでください

Set db = CurrentDB 
db.Execute(sql) 

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

NOTE。

+0

ありがとうございますが、これはまだ0を返します。 – Azmodan

+0

更新された回答を確認してください。 –

+0

優秀 - ありがとうございました! – Azmodan

関連する問題