Dường như một vấn đề đủ phổ biến này, nhưng hầu hết các giải pháp liên quan đến việc ghép nối nhiều lệnh SQL, một cái gì đó mà tôi tin rằng không thể được thực hiện với ADO/VBA (Tôi sẽ được vui mừng được hiển thị sai trong vấn đề này tuy nhiên).Làm cách nào để lấy id của bản ghi vừa được chèn bằng VBA Excel?
Tôi hiện đang chèn bản ghi mới của mình, sau đó chạy truy vấn chọn sử dụng (Tôi hy vọng) đủ trường để đảm bảo rằng chỉ bản ghi mới được chèn mới có thể được trả lại. Cơ sở dữ liệu của tôi hiếm khi được truy cập bởi nhiều người cùng một lúc (rủi ro không đáng kể của việc chèn khác xảy ra giữa các truy vấn) và do cấu trúc của các bảng, việc xác định bản ghi mới thường khá dễ dàng.
Tôi hiện đang cố cập nhật bảng không có nhiều phạm vi cho tính duy nhất, ngoài khóa chính giả tạo. Điều này có nghĩa là có rủi ro là bản ghi mới có thể không phải là duy nhất và tôi không muốn thêm một trường chỉ để buộc tính duy nhất.
Cách tốt nhất để chèn bản ghi vào bảng Access sau đó truy vấn khóa chính mới từ Excel trong trường hợp này là gì?
Cảm ơn bạn đã trả lời. Tôi đã cố gắng để có được @@IDENTITY
hoạt động, nhưng điều này luôn trả về 0 bằng cách sử dụng mã bên dưới.
Private Sub getIdentityTest()
Dim myRecordset As New ADODB.Recordset
Dim SQL As String, SQL2 As String
SQL = "INSERT INTO tblTasks (discipline,task,owner,unit,minutes) VALUES (""testDisc3-3"",""testTask"",""testOwner"",""testUnit"",1);"
SQL2 = "SELECT @@identity AS NewID FROM tblTasks;"
If databaseConnection Is Nothing Then
createDBConnection
End If
With databaseConnection
.Open dbConnectionString
.Execute (SQL)
.Close
End With
myRecordset.Open SQL2, dbConnectionString, adOpenStatic, adLockReadOnly
Debug.Print myRecordset.Fields("NewID")
myRecordset.Close
Set myRecordset = Nothing
End Sub
Mọi thứ đều chịu trách nhiệm?
Tuy nhiên, do những lời nhắc thận trọng do Renaud cung cấp (bên dưới) có vẻ như có nhiều rủi ro khi sử dụng @@IDENTITY
như với bất kỳ phương pháp nào khác, vì vậy tôi đã sử dụng SELECT MAX
bây giờ. Để tham khảo trong tương lai mặc dù tôi sẽ quan tâm để xem những gì là sai với nỗ lực của tôi ở trên.
Sử dụng 'Max' có thể phức tạp ... nếu ai đó đang chèn hồ sơ, nó có thể cung cấp cho bạn ID của bản ghi khác. Nếu bạn là người duy nhất chèn bản ghi, hãy tiếp tục. –