繁体   English   中英

在VB6中更新记录集

[英]Updating recordset in VB6

快速问题,本网站的新手,尤其是编程新手。

我试图从SqlServer中选择数据,然后在它仍然是记录集的情况下对其进行更新。 我不想用数据更新实际表。...因此,如果我有一个名为RS!(“ FirstName”)的字段,并且想向其中添加一个字符串,例如“ MR”

这就是我要做的

str = "Select FirstName from tblClient"
rs.Open SQL, g_cn, adOpenStatic

rs.movefirst
do while not rs.eof 
    rs("FirstName") = "MR" & rs("FirstName") <--- this is what i'm trying to do but it tells me I cannot update it. 
    rs.movenext
loop

如何解决这个问题

真正的答案是创建一个新的断开连接的记录集。 您可以根据需要进行操作,完成后将其设置为空即可。 您可以专门针对要修改的记录集执行此操作,也可以编写更通用的方法来复制源记录集。

这是一个通用示例。 rsOriginal是传入的记录集,以后将在代码中使用。 rsUpdateable是一个本地记录集,它是原始记录集的副本,然后分配给原始记录集变量。 现在它是完全可更新的,并且更改无法保存回源表。

...

'clone a recordset into a new updateable recordset
Dim rsUpdateable As New ADODB.Recordset
Dim fld As ADODB.Field
'errors here are unlikely, but if  happens I don't want to alert the user
On Error Resume Next
'build the table schema
For Each fld In rsOriginal.Fields
    rsUpdateable.Fields.Append fld.Name, fld.Type, fld.DefinedSize
Next fld
rsUpdateable.Open
'populate the new recordset with the original values
rsUpdateable.AddNew
For Each fld In rsOriginal.Fields
    rsUpdateable.Fields(fld.Name).Value = fld.Value
Next fld
Set rs = rsUpdateable   'done
On Error GoTo OriginalErrorHandler    'restore error handler

...

您应该显示所有代码,以更轻松地为您提供帮助。

从您所显示的结果来看,一个明显的解决方法是使用str变量。 如果在模块的顶部添加Option Explicit,它将显示得更快,那么您可以告诉您尚未声明某些var

在任何情况下,如果您使用声明的sql并-更改记录集类型,它都应该起作用

更改:

str = "Select FirstName from tblClient"
rs.Open SQL, g_cn, adOpenStatic

至:

str = "Select FirstName from tblClient"
rs.Open str, g_cn, adOpenDynamic, adLockOptimistic

环:

rs.Edit
rs("FirstName") = "MR" & rs("FirstName") 
rs.Update
rs.movenext

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM