3

我已经使用下面给出的建议更新了代码,我已经对其进行了测试并且效果很好,供未来用户快速参考。


我正在使用以下代码创建链接表,而无需为每个用户设置 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 视图创建索引,您将只能获得只读视图,并且您可能会遇到返回错误数据,请参阅下面的注释以获取示例。

4

1 回答 1

6

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

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

有关完整示例,请参阅添加带有主键的链接表的 VBA 代码。

请注意,如果您链​​接表,则无需执行此操作- Access 将自动检测主键(正如 Remou 在下面的评论中明确指出的那样)。

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

另外,它会搞砸显示的行 - 请参阅为什么链接视图会给出与 MS Access 和 SQL Manager 不同的结果?更多解释。
(阅读我的答案,以及我在另一个答案下的评论)

于 2012-07-17T18:59:04.370 回答