1
爲了規模化,我創建了一個用於複製我的問題的示例。訪問:將數據插入到具有外鍵關係的兩個表中
比方說,我有3個表:
人
| PID | PName | City |
Autonumber Text Text
購買
|PurchaseNo | PID | Item |
Autonumber Number Text
進口
|Pname| City | Item
Text Text Text
所以基本上人事和採購表有1〜嘛ny關係,每個人可以從1到多次購買。 PID是Purchase表中的PK,同時也是Purchase表的FK。所以,如果我直接進行數據錄入,事情會很好。但數據每天早上都會發布,我必須導入它。它採用格式與我所示的格式相同的導入表格形式。
所以我的問題是如何將導入的數據表分佈到兩個表中,同時保持其1對多關係的完整性。
一種方法我把嘗試使用@@身份,這裏是我在使用VBA代碼:
Option Compare Database
Public Sub IMPORTRE()
On Error GoTo errHandler
Dim wrk As DAO.Workspace
Dim db As DAO.Database
Dim lngInvoiceID As Long
Set wrk = DBEngine.Workspaces(0)
Set db = wrk.OpenDatabase(CurrentDb.Name)
With wrk
.BeginTrans
db.Execute "INSERT INTO Person SELECT PName,City FROM Import", dbFailOnError
lngInvoiceID = db.OpenRecordset("SELECT @@IDENTITY")(0)
db.Execute "INSERT INTO Purchase SELECT " & lngInvoiceID & " As PID, Item FROM Import ", dbFailOnError
.CommitTrans
Debug.Print "Inserted Invoice header and detail for Invoice " & lngInvoiceID
End With
exitRoutine:
If Not (db Is Nothing) Then
db.Close
Set db = Nothing
End If
Set wrk = Nothing
Exit Sub
errHandler:
MsgBox Err.Number & ": " & Err.Description, vbExclamation, "Error in transaction"
wrk.Rollback
Resume exitRoutine
End Sub
工作正常,很正常,除了一兩件事。 PID始終是導入的最後一個值。
所以我的問題是,我該如何去解決這個問題。它是我的代碼嗎?還是我過分複雜化一個簡單的問題?重申,我想要做的是從我的導入表中插入數據到兩個有外鍵關係的表中。
您需要在創建PName之前檢查它是否存在。如果存在,請使用該密鑰。如果沒有,創建它並使用新密鑰。這引出了問題 - pName是否是唯一的?如果是這樣,爲什麼要打擾一個必須擡頭看的數字FK呢?如果沒有,這是不太可行的,因爲你不知道pID。 – Nikki9696