我已经使用下面给出的建议更新了代码,该建议已经过测试并且效果很好,可以为将来的用户提供快速参考。
我使用下面的代码来创建链接表,而不必为每个用户设置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行(如果在服务器上正确设置了主键)。
CurrentDB.Execute
该代码代替了链接表并手动指定主键的位置。
如果未手动或使用上述方法指定为SQL Server VIEW创建索引,则将仅获得READ ONLY(只读)视图,并且可能会遇到返回错误数据的信息,请参见以下示例注释。
将表与您问题中的代码链接之后,您需要执行以下操作:
CurrentDb.Execute "CREATE UNIQUE INDEX SomeIndex ON SomeTable (PrimaryKeyColumn) WITH PRIMARY"
请注意,你 不会 ,如果你链接需要这样做 表 - Access将自动检测主键(如Remou在他的评论中明确下文)。
但是,当您在Access中链接SQL Server 视图时 ,为Access中的 视图 指定正确的主键 非常重要 。 如果您指定了错误的键(=您选择了不标识唯一记录的列)或根本没有键,Access会将视图链接为只读表(如您所注意到的)。