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

Posted

技术标签:

【中文标题】如何使用与 sql server 的 DAO 连接更新 VB6 中的记录集【英文标题】:How to update recordset in VB6 using DAO connections with sql server 【发布时间】:2012-04-29 16:29:52 【问题描述】:

我正在使用 VB6 应用程序。哪个正在使用 MSAccess 数据库。现在我正在更改对 sql server 的数据库访问。从 MSAccess 获取/更新数据,应用程序正在使用 DAO 对象。所以现在我也在尝试用 DAO 方法连接 SQL Server。现在我能够连接数据库并能够获取数据。但是当我尝试编辑记录时,它会给出错误“运行时错误'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’无法更新。数据库或对象是只读的 任何帮助!或建议请回复

提前致谢!

【问题讨论】:

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

最初我认为您用于 SQL 服务器的用户名和密码可能具有只读权限。

如果不是这种情况并且您想坚持使用 DAO,那么我建议使用 Access 的内置 ODBC 链接功能,因为这可以帮助您成功连接到 SQL 服务器。

但是,我的建议是放弃 DAO 并使用 ADO,主要是因为 DAO 将您的数据处理限制在缓慢的客户端,而拥有专用服务器的全部意义在于尽可能多地运行服务器端显着提高性能。

【讨论】:

以上是关于如何使用与 sql server 的 DAO 连接更新 VB6 中的记录集的主要内容,如果未能解决你的问题,请参考以下文章

作为 SQL Server 的前端访问 - ADO 与 DAO?

现有的 DAO 代码是不是适用于 SQL Server?

如何使用xampp将sql server与php连接起来?

如何将 Debezium SQL Server 连接器与 ksqlDB 嵌入式连接一起使用?

如何将Codeigniter与MSSQL(SQL Server)连接?

如何将 codeigniter 与 Sql Server 2012 连接?