设置表的“连接”属性会丢弃主键。为什么?

时间:2013-05-05 06:56:41

标签: ms-access primary-key connect

我正在研究'accdb'应用程序。我的大多数表都链接到SQL Server 2008.我想给用户一个连接到不同数据库的选项,所以我提供了一个执行以下操作的屏幕:

Private Sub cmdLinkTables_Click()
On Error GoTo cmdLinkTables_Click_Err
    For Each tdf In CurrentDb.TableDefs
        If InStr(1, tdf.name, "MSys") Then GoTo NextIteration 'skip system tables
        If Len(tdf.Connect) <= 0 Then GoTo NextIteration 'skip local tables
        tdf.Connect = Me.txtConnectionString
        tdf.RefreshLink
NextIteration:
    Next tdf
    Exit Sub
cmdLinkTables_Click_Err:
    MsgBox err.Description, vbCritical, GetAppTitle
End Sub

在连接到新数据库之后,一切正常,但是由于某种原因主键被丢弃的一个表,因此它变得不可编辑(这是一个单词?)。这是我使用的新连接字符串:

ODBC;Description=***;DRIVER=SQL Server;SERVER=SERVER2008\MSSQLSERVER2008;UID=***;PWD=***;APP=Microsoft Office 2010;DATABASE=***

我认为有问题的表也是必要的,所以我将提供SQL Server创建的脚本:

CREATE TABLE [dbo].[tblUsersPerm](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [User] [nvarchar](50) NULL,
    [ScreenObjectName] [nvarchar](200) NULL,
    [ReadOnly] [bit] NOT NULL,
    [Allow] [bit] NOT NULL
) ON [PRIMARY]

GO

我认为这是所有必要的信息,希望我是对的。现在,我当然可以手动设置主键并使表格再次可编辑,但用户将无法这样做。

任何人都知道主键有什么问题?

1 个答案:

答案 0 :(得分:1)

  

任何人都知道主键有什么问题?

从您告诉我们的情况来看,主键的问题只是它在SQL Server表中不存在。我运行你的DDL,它在我的SQL Server数据库中生成了一个没有PK的表。我进入表设计器并将[ID]指定为主键,保存了我的更改,然后执行了Script Table as > CREATE ...我得到的是

CREATE TABLE [dbo].[tblUsersPerm](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [User] [nvarchar](50) NULL,
    [ScreenObjectName] [nvarchar](200) NULL,
    [ReadOnly] [bit] NOT NULL,
    [Allow] [bit] NOT NULL,
 CONSTRAINT [PK_tblUsersPerm] PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO