Permissions Access 2003(!)中的链接SQL表不可更新

Permissions Access 2003(!)中的链接SQL表不可更新,permissions,sql-server-2008-r2,ms-access-2003,database-permissions,Permissions,Sql Server 2008 R2,Ms Access 2003,Database Permissions,目前我正在使用一个遗留应用程序,升级Access 2003以链接到SQL Server表(2008 R2或更高版本)。对于通过代码链接的表,我可以插入,但不能更新或删除。我在网上什么都试过了,没有骰子。详情如下 简明扼要,而不是tl;博士 首先使用升迁向导创建的表。在使用中,应用程序必须连接到同一模式中的不同应用程序,所以不能只是设置和忘记。无法进行本地DSN的安装,尽管可以安装DSN文件。但也有问题,DSN没有找到。详情待会 在休息之前:很快我将进一步更新此应用程序,以访问2016年左右。如果

目前我正在使用一个遗留应用程序,升级Access 2003以链接到SQL Server表(2008 R2或更高版本)。对于通过代码链接的表,我可以插入,但不能更新或删除。我在网上什么都试过了,没有骰子。详情如下

简明扼要,而不是tl;博士

首先使用升迁向导创建的表。在使用中,应用程序必须连接到同一模式中的不同应用程序,所以不能只是设置和忘记。无法进行本地DSN的安装,尽管可以安装DSN文件。但也有问题,DSN没有找到。详情待会

在休息之前:很快我将进一步更新此应用程序,以访问2016年左右。如果这在那里足够不同/容易,我会等几天。也许有人可以推荐最好的参考网站

*问题详情如下*

使用DSN和UI链接一个表,我得到一个可编辑的表。万岁

但是,当我使用下面的代码(在每个参考网站上都可以找到)时,只会创建链接,但只会选择和插入工作。无论发生什么,其他一切都失败了

Public Function LinkToSqlTable(sqlInstance As String, sqlDb As String, 
    sqlTableName As String, localTableName As String)  

Dim linked As New TableDef

' ***factored-out functionality, known to work: reader can ignore*** '
DeleteTable localTableName

' connection-string steps, placeholders replaced by args '
Dim sCnx As String
sCnx = "ODBC;Driver=SQL Server;Server=_instance_;" & _
    "Database=_db_;Integrated Security=SSPI"
sCnx = Replace(sCnx, "_instance_", sqlInstance)
sCnx = Replace(sCnx, "_db_", sqlDb)


' linked-table steps '
Set linked = CurrentDb.CreateTableDef(localTableName)
linked.Connect = sCnx
linked.SourceTableName = sqlTableName
CurrentDb.TableDefs.Append linked


' ui '
RefreshDatabaseWindow

End Function
*ID列或权限*

我原以为问题是缺少身份栏,我加了一个,但没有改变。至少现在我应该有一个PK字段了。;-)

当我手动链接表时,UI要求知道ID列。那还会是它吗?很好,但是我如何在代码中设置它?搜索结果一无所获

我假设这是网站等的权限。我还采取了我能想到的所有措施来解决这个问题。没有骰子

*我尝试过的事情*

除了我之前说过的ID列内容外,以下内容(不符合顺序):

  • 由于DSN保存为文件,因此尝试使用cnx字符串作为示例。失败
  • 使用的DSN内容,仔细筛选和翻译,cnx字符串。失败
  • 使用了我用DSN手动连接的表中的连接字符串。失败
  • 更改了cnx字符串中所有主要选项的驱动程序,甚至忽略了它。失败
  • 将cnx中的安全性更改为Integrated security=SSPI和其他选项,并完全省略。失败
  • 我添加了我的实际本地用户作为示例,有密码和没有密码。失败
(以前的几个选项在以前的选项中尝试过,但覆盖率不是100%。)

  • 在SQL Server中,我使用SSMS尝试了安全功能:
    • 将SQS身份验证登录添加到实例
    • 将用户与此处显示的默认数据库进行匹配
    • 授予登录用户在db中的读写权限(有时还有其他权限)
    • 将匹配的id&pw添加到cnx字符串中。失败
  • 我试着在SQS中设置这个db,让每个人都暂时“安全”地完成所有事情。失败

  • 这个,那个,还有别的。一切都失败了

那么权限问题呢?到底有什么方法可以使用DSN文件?我的cnx字符串中的权限设置不匹配?愚蠢的疏忽?我还错过了什么?我对SQL Server和Access都很在行,但只有在基本的安全级别上,连接字符串才是关键

*检索到的表属性*

为了以防万一,我检索了这些(在对象添加到TableDefs集合之后)

**这是在UI中使用DSN完成的,这是ID字段,用于编辑:**

Name = dbo_tblSendTo
Updatable = False
DateCreated = 4/19/2016 11:11:40 AM
LastUpdated = 4/19/2016 11:11:42 AM
Connect = ODBC;Description=SQL Server tables for TeleSales 5;DRIVER=SQL Server Native Client 10.0;SERVER=(local)\sqlexpress;Trusted_Connection=Yes;APP=Microsoft Office 2003;WSID=CMSERVER;DATABASE=TS5_General;
Attributes = 536870912
SourceTableName = dbo.tblSendTo
RecordCount = -1
ValidationRule = 
ValidationText = 
ConflictTable = 
ReplicaFilter = 
**而这张通过代码链接的表格没有:**

Name = tblSendTo
Updatable = False
DateCreated = 4/19/2016 11:17:51 AM
LastUpdated = 4/19/2016 11:17:51 AM
Connect = ODBC;Description=SQL Server tables for TeleSales 5;DRIVER=SQL Server Native Client
    > 10.0;SERVER=(local)\sqlexpress;Trusted_Connection=Yes;APP=Microsoft Office 2003;WSID=CMSERVER;DATABASE=TS5_General;
Attributes = 536870912
SourceTableName = dbo.tblSendTo
RecordCount = -1
ValidationRule = 
ValidationText = 
ConflictTable = 
ReplicaFilter =
*我的请求*

所以。。。。。请有人帮帮我。我不喜欢这样觉得自己很愚蠢,很遗憾,我需要这样做,而不是用.NET代码或类似的代码来代替它

谢谢,任何能。。。
Ed.

唉,我能回答我自己的问题。

自第一次发布回复HansUp评论以来,编辑了一点

我在表中添加了一个无法编辑的标识列。但是,我没有将它设置为主键。事实证明,使用
identity
并不会自动将某个内容设置为主键

但后者是至关重要的,它使用两种可能的DDL语法中的任何一种使其成为主键。因为我认为我已经处理了并没有唯一关键问题的编辑,所以我把重点放在了权限上

那么,这里的所有内容都只是一个旁白

这样做的结果是确保添加一个标识列,并将其作为主键,如果出于某种原因,原始表架构没有该列


如果我有时间的话,我会调整问题以反映我的发现。

所以,更新,我让它工作了,但它并没有真正解决。。。不是真的意味着它有效,但我不知道为什么。正如这个词用来警告我们的那样,“自行消失的东西可以自行恢复。”。我推测可能我需要将我制作的DSN文件放在默认位置。好吧,我设置了它,然后我得到了手动链接表的表属性。我应用了它们。这一次成功了!!!所以我不知道这是怎么回事。这里是不同的和工作的连接字符串,但我仍然很想知道,当另一个不工作时,到底是什么使这一个工作。我很确定其中有些是蓬松的,比如“description=”。请问有什么专家意见吗?“ODBC;Description=SQL Server tables for TeleSales 5;DRIVER=SQL Server本机客户端10.0;Server=(本地)\sqlexpress;Trusted_Connection=Yes;APP=Microsoft Office 2003;WSID=CMSERVER;DATABASE=TS5_General;”Ha,Yes。我第一次假设添加指定了
identity
的字段也会使其成为DDL中的PK字段。所以,生活和学习。我现在使用
主键
标识
之后内联和通常的
非空
添加它,尽管我知道对于更复杂的用途,我应该使用
添加约束<