我有一个Microsoft Access ADP类型的数据库,链接到最近从Office XP(2002)升级到Office 2010的SQL Server 2012数据库。升级大部分都是成功的,除了组合框上的问题具有可更新数据源的表单 - 在Access XP / 2002中,用户可以从下拉列表中选择值,并且值将在表中更新。但是,当用户尝试使用Access 2010中的“tblL.LMID”组合框修改记录时,屏幕底部的状态栏中会短暂闪烁(并且记录未更新):
“无法编辑控件;它已绑定到自动编号字段'LMID'”
我理解这是正常的功能,如果有问题的字段是SQL Server中的Identity列,但这不是这里的情况。但是,'tblL.LMID'字段确实在幕后的SQL查询中用作连接。
表单上的数据源如下:
SELECT dbo.tblLM.OpID, dbo.tblL.*, dbo.tblLM.DR
FROM dbo.tblL INNER JOIN dbo.tblLM ON dbo.tblL.LMID = dbo.tblLM.LMID
WHERE (dbo.tblLM.DR = 1)
ORDER BY dbo.tblL.DS
查询中涉及的表如下:
CREATE TABLE [dbo].[tblL](
[LID] [int] IDENTITY(1,1) NOT NULL,
[LMID] [int] NOT NULL,
[DS] [nvarchar](10) NOT NULL)
CREATE TABLE [dbo].[tblLM](
[LMID] [int] IDENTITY(1,1) NOT NULL,
[OpID] [int] NULL,
[DR] [bit] NULL DEFAULT ((1)))
根据表结构,tblL.LMID是一个简单的列(不是Autonumber / Identity),我们应该像在应用程序的Access XP / 2002版本中那样修改它。
我很乐意接受有关此问题的任何帮助,非常感谢! :)
答案 0 :(得分:0)
将表单放入设计视图;删除当前的组合框。创建一个新的组合框并按照向导进行操作。
答案 1 :(得分:0)
问题在于查询本身。要解决这个问题,我们必须用特定的列名替换“dbo.tblL。*”select,并为有问题的列添加别名:
SELECT dbo.tblLM.OpID, dbo.tblL.LMID as l_MID, dbo.tblLM.DR
FROM dbo.tblL INNER JOIN dbo.tblLM ON dbo.tblL.LMID = dbo.tblLM.LMID
WHERE (dbo.tblLM.DR = 1)
ORDER BY dbo.tblL.DS
然后我们更新了组合框以使用新别名(“l_MID”),然后它开始正常工作。