Permissions Access 2003(!)中的链接SQL表不可更新
目前我正在使用一个遗留应用程序,升级Access 2003以链接到SQL Server表(2008 R2或更高版本)。对于通过代码链接的表,我可以插入,但不能更新或删除。我在网上什么都试过了,没有骰子。详情如下 简明扼要,而不是tl;博士 首先使用升迁向导创建的表。在使用中,应用程序必须连接到同一模式中的不同应用程序,所以不能只是设置和忘记。无法进行本地DSN的安装,尽管可以安装DSN文件。但也有问题,DSN没有找到。详情待会 在休息之前:很快我将进一步更新此应用程序,以访问2016年左右。如果这在那里足够不同/容易,我会等几天。也许有人可以推荐最好的参考网站 *问题详情如下* 使用DSN和UI链接一个表,我得到一个可编辑的表。万岁 但是,当我使用下面的代码(在每个参考网站上都可以找到)时,只会创建链接,但只会选择和插入工作。无论发生什么,其他一切都失败了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年左右。如果
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和其他选项,并完全省略。失败
- 我添加了我的实际本地用户作为示例,有密码和没有密码。失败
- 在SQL Server中,我使用SSMS尝试了安全功能:
- 将SQS身份验证登录添加到实例
- 将用户与此处显示的默认数据库进行匹配
- 授予登录用户在db中的读写权限(有时还有其他权限)
- 将匹配的id&pw添加到cnx字符串中。失败
- 我试着在SQS中设置这个db,让每个人都暂时“安全”地完成所有事情。失败
- 这个,那个,还有别的。一切都失败了
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字段。所以,生活和学习。我现在使用主键
在标识
之后内联和通常的非空
添加它,尽管我知道对于更复杂的用途,我应该使用添加约束<