Sql server 如何使用sql server的DAO连接更新VB6中的记录集

Sql server 如何使用sql server的DAO连接更新VB6中的记录集,sql-server,vb6,dao,Sql Server,Vb6,Dao,我使用的是VB6应用程序。它正在使用MSAccess数据库。现在,我将数据库访问权限更改为sql server。要从MSAccess获取/更新数据,应用程序使用的是DAO对象。所以现在我也在尝试用DAO方法连接SQLServer。现在我可以连接数据库,也可以获取数据。但当我试图编辑记录时,它给出了错误运行时错误“3027”无法更新。数据库或对象是只读的。我在这里显示我的代码: Public LSWs As Workspace, LSDb As Database Dim lsConnString

我使用的是VB6应用程序。它正在使用MSAccess数据库。现在,我将数据库访问权限更改为sql server。要从MSAccess获取/更新数据,应用程序使用的是DAO对象。所以现在我也在尝试用DAO方法连接SQLServer。现在我可以连接数据库,也可以获取数据。但当我试图编辑记录时,它给出了错误运行时错误“3027”无法更新。数据库或对象是只读的。我在这里显示我的代码:

Public LSWs As Workspace, LSDb As Database
Dim lsConnString As String
Dim l0 As Recordset, SQL0 As String
Dim lehReturn As Integer, retrycount As Integer

lsConnString = "ODBC;DRIVER=SQL Server;SERVER=SERVERName;DATABASE=" & DBname & ";APP=Visual Basic;UID=UID;PWD=PWD"
Set LSWs = DBEngine.Workspaces(0)
Set LSDb = LSWs.OpenDatabase(DBname, dbDriverNoPrompt, True, lsConnString) 
retrycount = 0
SQL0 = "select * from schedule_hdr where status = '" & Trim(PCName) & "'"
Set l0 = LSDb.OpenRecordset(SQL0, dbOpenDynaset, dbSeeChanges, adLockPessimistic)
Do While Not (l0.EOF)
    LSWs.BeginTrans
    l0.Edit
    l0!status = "R"
    l0.Update
    LSWs.CommitTrans
    l0.MoveNext
Loop
l0.Close
但它在l0处给出了错误。编辑此行代码 给出错误 运行时错误“3027”无法更新。数据库或对象是只读的 任何帮助!或建议,请回复


提前谢谢

起初,我认为您用于SQL server的用户名和密码可能具有只读权限

如果情况并非如此,并且您希望坚持使用DAO,那么我建议使用Access的内置ODBC链接功能,因为这有助于您成功地连接到SQL server

然而,我的建议是放弃DAO而使用ADO,这主要是因为DAO将您的数据处理限制在客户端,这很慢,而拥有专用服务器的全部目的是尽可能多地在服务器端运行,以显著提高性能。

事务LSWs.BeginTrans真的有必要吗?一次只更新一条记录,因此事务在那里不会做任何有用的事情。是否可能您的ODBC连接是只读的?