我已經使用下面給出的建議更新了代碼,我已經測試過並且效果很好,可供未來用戶快速參考。如何使用vba創建表格時指定主鍵
我使用下面的代碼,而不必設置每個用戶的DSN創建鏈接表,我怎麼可以指定一個主鍵,你會問,如果手動連接:
Dim sConnect As String
Dim db As DAO.Database
Dim tdf As DAO.TableDef
Set db = CurrentDb
Set tdf = db.CreateTableDef
tdf.Name = "dbo_vwFeedback" ' - -- --- This is the Label that you see in Access...
tdf.Connect = "ODBC;DRIVER=SQL Server;SERVER=server01\serverinstance;DATABASE=db_name;Trusted_Connection=Yes"
tdf.SourceTableName = "vwFeedback" ' - -- --- This is the actual name in SQL Server, minus the owner.
db.TableDefs.Append tdf
CurrentDb.Execute "CREATE UNIQUE INDEX PK_dbo_vwFeedback_PrimaryKey ON dbo_vwFeedback (DataSetID, FeedbackRef) WITH PRIMARY"
注意:以上是針對SQL Server VIEW的,對於SQL Server TABLE是相同的,但您不需要CurrentDB.Execute
行(如果您的主鍵在服務器上正確設置)。
該代碼用於手動鏈接表和指定主鍵。
如果您沒有指定手動或使用上述方法爲SQL Server VIEWs創建索引,則只會看到READ ONLY視圖,並且可能會遇到返回的錯誤數據,請參閱下面的示例註釋。
這可能是一個想法,檢查索引尚未分配('tdf.Indexes.Count'),以及是否它是主要的('tdf.Indexes(0).Primary')。如果您將表格與適當的索引鏈接起來,它將被使用。 – Fionnuala 2012-07-17 23:16:26
這取決於。我正在使用包含服務器表/視圖鏈接列表的本地表,並且我有一個循環遍歷該列表的函數,並刪除並重新鏈接每個表。所以我知道*表格在那個時刻還沒有索引。 – 2012-07-18 05:09:42
我試圖做的一點是,SQL服務器表具有在SQL服務器上設置的主鍵並通過TableDef鏈接,就像在OP中一樣,將自動設置主鍵,而不需要任何進一步干預,名稱將會與SQL Server名稱相同。 – Fionnuala 2012-07-18 08:54:46