Dim rds As Recordset
Dim qdf As QueryDef
Set rds = db.OpenRecordset("表1")If db.QueryDefs.Count = 0 Then
Set qdf = db.CreateQueryDef("QueryTable1")
Else
Set qdf = db.QueryDefs(0)
End Ifqdf.SQL = "UPDATE * SET 次数 =10 WHERE 次数 >15"这是执行SQL的那部分。
同样这个地方,我执行SELECT时可以用Access看到正确的结果,但是如果用下面这个循环看结果,却只有第一个结果被打出来。如果我在SELECT语句最后加上ORDER BY叫他排序,就没事,不加就有问题。Set querds = db.OpenRecordset("QueryTable1")
For i = 0 To querds.RecordCount - 1
Me.Print querds.Fields("班名").Value, querds.Fields("班主任").Value
querds.MoveNext
Next i
Dim qdf As QueryDef
Set rds = db.OpenRecordset("表1")If db.QueryDefs.Count = 0 Then
Set qdf = db.CreateQueryDef("QueryTable1")
Else
Set qdf = db.QueryDefs(0)
End Ifqdf.SQL = "UPDATE * SET 次数 =10 WHERE 次数 >15"这是执行SQL的那部分。
同样这个地方,我执行SELECT时可以用Access看到正确的结果,但是如果用下面这个循环看结果,却只有第一个结果被打出来。如果我在SELECT语句最后加上ORDER BY叫他排序,就没事,不加就有问题。Set querds = db.OpenRecordset("QueryTable1")
For i = 0 To querds.RecordCount - 1
Me.Print querds.Fields("班名").Value, querds.Fields("班主任").Value
querds.MoveNext
Next i
语法UPDATE table
SET newvalue
WHERE criteria;UPDATE 语句可分为以下几个部分:部分 描述
table 表的名称,其中包含要更改的数据。
newvalue 表达式,用来计算要插入更新记录中特定字段的值。
criteria 表达式,用来计算被更新的记录。只有符合表达式的记录才会被更新。
说明当需要更改多个记录,或要更改的记录在多重表中时,UPDATE 特别有用。
可以同时更改多个字段。下列示例为对联合王国的一家公司增加 10% 的 Order Amount (订货量)和 3% 的 Freight (货运):UPDATE Orders
SET OrderAmount = OrderAmount * 1.1,
Freight = Freight * 1.03
WHERE ShipCountry = 'UK';重点?UPDATE 不生成结果集。而且当使用更新查询更新记录之后,不能取消这次操作。如果想知道哪些记录被更新,先看一下使用相同的条件的选定查询的结果,然后运行更新查询。
?随时注意维护数据的复制备份。如果更新了错误记录,可从备份副本中恢复这些数据。
> 你的UPDATE语法有错误吧。我看不出那里写错了呀?指点指点吧?
qdf.SQL = "UPDATE 表1 SET 次数 =10 WHERE 次数 >15"
你的意思是不是一般这样写是没问题的呢?赋值后就可以马上看到效果的?
那么是不是在前面打开数据库时有没有什么需要特别注意的地方影响了这里?
您需要执行Requery一下
Dim rds As Recordset
Dim i As Long, querds As Recordset
Dim qdf As QueryDef
Set rds = db.OpenRecordset("表1")'打印所有内容For i = 0 To rds.RecordCount - 1
Me.Print rds("班名").Value, rds("班主任").Value, rds("出勤率").Value
rds.MoveNext
Next i'查询If db.QueryDefs.Count = 0 Then
Set qdf = db.CreateQueryDef("QueryTable1")
Else
Set qdf = db.QueryDefs("QueryTable1")
End IfMe.Printqdf.SQL = "SELECT * FROM 表1 where 次数>15"Set querds = qdf.OpenRecordset'为何这里不MoveLast再MoveFirst,就无法得到正确的结果呢?有除了这样,有其他解决方法吗?
querds.MoveLast
querds.MoveFirst
For i = 0 To querds.RecordCount - 1
Me.Print querds.Fields("班名").Value, querds.Fields("次数").Value
querds.MoveNext
Next iMe.Print'上面就可以,但是如果要用SQL执行UPDATE,应该怎么办?qdf.SQL = "UPDATE 表1 SET 次数=100 WHERE 次数 >15"querds.MoveLast
querds.MoveFirstFor i = 0 To querds.RecordCount - 1
Me.Print querds.Fields("班名").Value, querds2.Fields("次数").Value
querds.MoveNext
Next i
End SubPrivate Sub Form_Load()
Set db = DBEngine.OpenDatabase(App.Path & "\testdb\db3.mdb")
End SubPrivate Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
db.Close
Set db = Nothing
End Sub
querds.MoveLast
querds.MoveFirst这就是最好的方法,因为这是ACCESSD的BUG了
当我把
qdf.SQL = "UPDATE 表1 SET 次数=100 WHERE 次数 >15"
改为
db.Execute "UPDATE 表1 SET 次数=3 WHERE 次数 >15"
后,问题就解决了。