查询检索记录计数确认的单个记录,但表中的每一行都会更新
我正在使用vb6和ms ado 2.8
Firebird版本为2.5.4.26856(x64)。
Firebird ODBC驱动程序2.0.3.154
计算机是Windows 7家庭版64位
Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim cs As String
Dim dbPath As String
dbPath = "c:\Parkes\Parkes.fdb"
cs = "DRIVER={Firebird/Interbase(r) Driver}; DBNAME=localhost:" & dbPath & "; UID=SYSDBA; PWD=masterkey;"
cn.ConnectionString = cs
cn.Open
Dim sQuery As String
sQuery = "select memo from clients where clientID = 10021 "
rs.Open sQuery, cn, adOpenStatic, adLockOptimistic
If rs.BOF <> True Or rs.EOF <> True Then
'putting msgbox rs.recordcount here confirms only 1 record in recordset
rs.Movefirst
rs.Fields("memo") = "blah"
rs.Update
End If
Set rs = Nothing
Set cn = Nothing
如果我通过选择第二列稍微改变查询,那么客户端姓氏只会在姓氏列中具有与clientid为10021的行的行相同的行进行编辑。
sQuery = "select memo, surname from clients where clientID = 10021 "
当记录集只包含一行
时,我无法理解应该如何编辑多行编辑:在网上阅读了一下这是我对正在发生的事情的理解。 似乎更新方法根据记录集中的选定列标识要更新的记录。 因此,如果选择字段a,b,c,d并且正在更新字段a,则它将仅更新数据库中的记录,其中a,b,c,d的值与记录集中的值匹配。 确保仅更新单个记录的最佳方法是在所选字段中包含主键。 因此,如果我在下面的行中编写了我的查询,则只会更新一条记录,因为clientID列包含唯一值。
sQuery = "select memo, clientID from clients where clientID = 10021 "
考虑到这一点是有道理的,但是根据我的经验,我编写查询的方式最初似乎工作得很好,或者我错了吗?
答案 0 :(得分:1)
我测试了你的代码一切都很好,只更新了一行。我只想建议你一个简单的方法来检查记录是否存在。可能是这样的:
if rs.rows.count > 0 then
' no need to move recordset to first by default its on the first row
end if