我MS Access 2007
數據庫使用下面的模式:插入主表的主鍵到子表中多次
主表Object< # Object_PK, ... >
子表Electric_Consumption< $ Object_PK, # Electric_Consumption_PK, ... >
子表Water_Consumption< $ Object_PK, # Water_Consumption_PK, ... >
子表Educational_Object< $ Object_PK, # Educational_Object_PK, ... >
其子表格定義如下:
School< $ Educational_Object_PK, # School_PK, ... >
University< $ Educational_Object_PK, # University_PK, ... >
這裏是畫面,應該讓事情更清晰:
我用ADO
和C++
插入數據。
首先,我需要輸入主表Object
的數據。我可以通過INSERT
查詢成功完成此操作。
我的問題是以下幾點:
上述操作後,我需要插入Object
的主鍵到子表,因爲這是他們的外鍵。
讓我來形容正是我需要的,以便社會可以幫助我:
正如我所說的,我首先將數據插入到主表Object
。
然後我需要將數據和Object
的主鍵插入到子表中。
瀏覽互聯網我發現@@IDENTITY
可能會幫助我,但我不知道它是否適用於我的情況。
爲了使事情變得更難,這將在for loop
辦妥(Object_PK
的價值是每個INSERT
相同,等於值最後插入爲Object
),像這樣:
for (//...)
L"INSERT INTO Electric_Consumption (Object_PK, field1, field2 ...)
values (Object_pk // should I use here @@IDENTITY ?);
然後同樣的事情應該被重複的表Water_Consumption
和Educational_Object
。
完成後,我需要在Educational_Object
的子表中添加數據。
與上面相同,只能代替Object_PK
我需要添加Educational_Object_PK
。
這裏是僞代碼,以澄清事情做得更好:
L"INSERT INTO Object (...) values (...); //this is OK
for (...)
L" INSERT INTO Electric_Consumption (Object_PK, ...)
values (Object_PK, ...)"; // should I use @@IDENTITY here
// to get Object_PK ??
for (...)
L" INSERT INTO Water_Consumption (Object_PK, ...)
values (Object_PK, ...)"; // should I use @@IDENTITY here
// to get Object_PK ??
for (...)
L" INSERT INTO Educational_Object (Object_PK, ...)
values (Object_PK, ...)"; // should I use @@IDENTITY here
// to get Object_PK ??
for (...)
L" INSERT INTO School (Educational_Object_PK, ...)
values (Educational_Object_PK, ...)";// should I use @@IDENTITY here
// to get Educational_Object_PK ??
for (...)
L" INSERT INTO University (Educational_Object_PK, ...)
values (Educational_Object_PK, ...)";// should I use @@IDENTITY here
// to get Educational_Object_PK ??
能否請你告訴我使用這裏面SQL statement
,並演示瞭如何通過提供小僞代碼使用它?
我明白我對問題的描述可能會令人困惑,因此如果您需要進一步澄清請留下評論,我將編輯我的帖子。
謝謝。
此致敬禮。
謝謝你的幫助!只有一個問題:也許更好的選擇是使用'SCOPE_IDENTITY()'或'IDENTITY_CURRENT()'?他們在'MS Access'中可用嗎?最好的祝福。 – AlwaysLearningNewStuff
@AlwaysLearningNewStuff就我所知,SELECT @@ IDENTITY是唯一可用於Access數據庫的選項。你提到的另外兩個是T-SQL(Microsoft SQL Server)。 –
還有一個問題:爲了維護[ACID](http://en.wikipedia.org/wiki/ACID)模型,我應該使用'transactions'嗎?如果是這種情況,你可以用小代碼示例來修改答案,以說明這一點?我已將'ADO'調用放在'try/catch'塊中。我已經提出了你的答案。感謝您的幫助。最好的祝福。 – AlwaysLearningNewStuff