2017-07-27 59 views
0

我從外部.Net應用程序連接到MS Access數據庫。我需要使用SQL來升級數據庫的模式。部分升級需要重命名屬於一對多關係的表。如何使用SQL將關係重命名爲MS Access表?

據我所知,不可能使用SQL在MS Access中實際重命名錶。我的研究使我得到以下解決方案。

SELECT * INTO OldTableName FROM NewTableName 
DROP TABLE OldTableName 

對於不屬於關係部分的表,這似乎可以正常工作。但是,如果表屬於關係,那麼在運行DROP TABLE SQL時會收到以下異常。

Cannot delete this index or table. It is either the current index or is used in a relationship. 

是否有通過SQL的方式,我可以更新MS Access中的關係指向已創建這樣的舊錶可以刪除新表?

+0

你需要刪除表之前,刪除舊的外鍵約束,然後創建新的 –

+0

OK,但你能不能細說了?也許有一些SQL,這是我想弄明白。 – user1227445

回答

1

您可以通過簡單地使用Access DAO重命名錶可能保存自己有些悲傷:

using Microsoft.Office.Interop.Access.Dao; 

namespace AccessDaoConsoleApp 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var dbe = new DBEngine(); 
      Database db = dbe.OpenDatabase(@"C:\Users\Public\Database1.accdb"); 
      TableDef tbd = db.TableDefs["OldTableName"]; 
      tbd.Name = "NewTableName"; 
      db.Close(); 
     } 
    } 
} 

的.NET項目將需要訪問DAO COM引用。我使用的是

的Microsoft Office 14.0 Access數據庫引擎對象庫

+0

這將需要最終用戶的計算機安裝Office,但正確嗎? – user1227445

+0

@ user1227445 - 不,Access DAO是Access數據庫引擎的一部分。如果他們可以執行Access OLEDB/ODBC,那麼他們也可以執行Access DAO。 –

+0

但是從哪裏來?最終用戶必須安裝Access,那麼對不對? – user1227445

0

你應該先刪除外鍵約束。如何使用SQL可以看到例如here。然後創建新的約束:

alter table City 
    add constraint FK_City_REF_States foreign key (ID_State) 
     references States (ID_State); 
+0

我剛剛發現了這個帖子,並嘗試完全按照你所說的去做。問題是,當我試圖刪除約束時,我得到一個錯誤,告訴我我沒有權限從Msysrelationships中讀取,所以基本上殺死了這個想法。不確定爲什麼它被接受爲這個問題的答案,如果你不能真正從該表讀取。 – user1227445

+0

從Access外部讀取此表的方法很少,您可以搜索此內容。但實際上,如果數據庫在您的控制之下並且不會動態更改,您實際上不需要從外部讀取此表。只需打開accdb一個Access,讀取一次約束名稱並在.net代碼中使用它們 –