一尘不染

使用VBA创建表时如何指定主键

sql

我已经使用下面给出的建议更新了代码,该建议已经过测试并且效果很好,可以为将来的用户提供快速参考。


我使用下面的代码来创建链接表,而不必为每个用户设置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 VIEW创建索引,则将仅获得READ
ONLY(只读)视图,并且可能会遇到返回错误数据的信息,请参见以下示例注释。


阅读 463

收藏
2021-03-08

共1个答案

一尘不染

将表与您问题中的代码链接之后,您需要执行以下操作:

CurrentDb.Execute "CREATE UNIQUE INDEX SomeIndex ON SomeTable (PrimaryKeyColumn) WITH PRIMARY"

请注意,你 不会 ,如果你链接需要这样做 - Access将自动检测主键(如Remou在他的评论中明确下文)。

但是,当您在Access中链接SQL Server 视图时 ,为Access中的 视图 指定正确的主键 非常重要
如果您指定了错误的键(=您选择了不标识唯一记录的列)或根本没有键,Access会将视图链接为只读表(如您所注意到的)。

2021-03-08