我已经用下面给出的建议更新了代码,我已经测试过并且效果很好,供未来用户快速参考。
我使用下面的代码创建链接表,而无需为每个用户设置 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 视图创建索引,您将只能获得只读视图,并且可能会遇到返回错误数据的情况,请参阅下面的注释以获取示例。
将表格与问题中的代码链接后,您需要执行以下操作:
CurrentDb.Execute "CREATE UNIQUE INDEX SomeIndex ON SomeTable (PrimaryKeyColumn) WITH PRIMARY"
See 添加带主键的链接表的 VBA 代码 https://stackoverflow.com/questions/9602687一个完整的例子。
请注意,你这样做not如果您链接一个则需要这样做table- Access 将自动检测主键(正如 Remou 在下面的评论中明确指出的那样)。
但是当你链接 SQL Server 时view在 Access 中,它是很重要为 Access 中的视图指定正确的主键。
如果您指定了错误的键(= 您选择了不标识唯一记录的列)或根本没有键,Access 会将视图链接为只读表(正如您已经注意到的那样)。
另外,它会搞乱显示的行 - 请参阅为什么 MS Access 与 SQL Manager 的链接视图给出不同的结果? https://stackoverflow.com/questions/7350928以获得更多解释。
(阅读我的回答,and我在其他答案下的评论)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)