【发布时间】:2020-06-10 13:26:15
【问题描述】:
我不得不将一个 MS Access 2003/2010 ADP 项目重新开发为 MS Access 2016 ACCDB,该项目使用 SQL Server 视图作为其所有表单的RecordSource。
我尝试使用传递查询来获取数据,这对于只读列来说很好,但是当我想更改其中一个绑定列中的值时,它会说RecordSet is not updateable,这就是你可能的如果使用视图,则期望。
但我现在已经读到,如果您像这样使用 SCHEMABINDING 定义视图:
ALTER VIEW [dbo].[vwQuote_MinibusesDetails]
WITH SCHEMABINDING
AS
SELECT ...
并像这样添加UNIQUE CLUSTERED INDEX:
CREATE UNIQUE CLUSTERED INDEX CIX_vwQuote_MinibusesDetails
ON vwQuote_MinibusesDetails (txtQuoteNo, txtVersion, txtVehicleNo);
然后像这样将视图作为无 DSN TableDef 添加到您的项目中
stConnect = "ODBC;Driver=SQL Server;Server=" & SERVER_NAME & ";Database=" & APP_DATABASE & ";Trusted_Connection=Yes"
Set td = CurrentDb.CreateTableDef(stLocalTableName, dbAttachSavePWD, stRemoteTableName, stConnect)
CurrentDb.TableDefs.Append td
它变得像表格一样可编辑。
但是,当我在 Access 中打开 TableDef 时,它会显示所有行和列,就好像它是可编辑的一样,但是如果我尝试编辑列,它会说有一个 Write Conflict 带有另一个用户的更改,当我 100% 确定没有因为我是唯一使用它的人时。
有什么想法吗? (我目前正在使用 Access 2010)
【问题讨论】:
-
您可能会更幸运地将表(而不是视图)添加为链接表并尝试在 Access 数据库中更新它们。
-
Note:Access 2010 是支持使用 Access 项目 (.adp) 文件的最后一个 Access 版本。此外,它最适用于 SQL Server 2008 或更早版本。而且这个 SQL Server 版本已经过了它的end of life support。考虑重新设计您的产品和工作流程。
标签: sql sql-server ms-access indexing schemabinding