在VB6中更新记录集

时间:2016-07-01 19:24:24

标签: sql sql-server vb6 sql-update recordset

快速提问,这个网站的新手,尤其是编程新手。

我正在尝试从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

如何解决此问题

2 个答案:

答案 0 :(得分:1)

真正的答案是创建一个新的断开连接的记录集。你可以做到你想要的,只要你完成就把它设置为空。您可以专门对要修改的记录集执行此操作,也可以编写复制源记录集的更通用的方法。

这是一个通用的例子。 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

...

答案 1 :(得分:0)

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

从你所展示的内容 - 一个明显的解决方法是使用你的str变量。 如果你在模块的最顶层添加一个Option Explicit,那么它会更快地出现,然后你可以告诉你没有声明你的一些变量

在任何情况下,如果你使用你声明的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