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

解决方案 »

  1.   

    你的UPDATE语法有错误吧。你参考一下:
    语法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 不生成结果集。而且当使用更新查询更新记录之后,不能取消这次操作。如果想知道哪些记录被更新,先看一下使用相同的条件的选定查询的结果,然后运行更新查询。
    ?随时注意维护数据的复制备份。如果更新了错误记录,可从备份副本中恢复这些数据。
      

  2.   

    > do_better(程序人生)
    > 你的UPDATE语法有错误吧。我看不出那里写错了呀?指点指点吧?
      

  3.   

    qdf.SQL = "UPDATE * SET 次数 =10 WHERE 次数 >15"TABLE是什么?Update Tab1 SET 次数 =10 WHERE 次数 >15"
      

  4.   

    哦,我看看。噢,是上面的贴错了,我的程序里是
    qdf.SQL = "UPDATE 表1 SET 次数 =10 WHERE 次数 >15"
      

  5.   

    gump2000(阿甘):
    你的意思是不是一般这样写是没问题的呢?赋值后就可以马上看到效果的?
    那么是不是在前面打开数据库时有没有什么需要特别注意的地方影响了这里?
      

  6.   

    我以前也遇到过的,SQL语句执行完不能立即获得。
    您需要执行Requery一下
      

  7.   

    Private db As DatabasePrivate Sub cmdCompute_Click()
    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
      

  8.   

    为何这里不MoveLast再MoveFirst,就无法得到正确的结果呢?有除了这样,有其他解决方法吗?
    querds.MoveLast
    querds.MoveFirst这就是最好的方法,因为这是ACCESSD的BUG了
      

  9.   

    根据我的经验我发现对ACCESS数据操作后,ACCESS数据库要隔一段时间再会被刷新,这个间隔时间大约几秒左右,有时长有时短,原因不知道为什么,你也可以专门做一个试验.
      

  10.   

    如果你用的是ADO对象,只要用connection或command对象的Execute 方法执行就可以了。
      

  11.   

    多谢vbFly,他在QQ上已经帮我解决了问题:
    当我把
    qdf.SQL = "UPDATE 表1 SET 次数=100 WHERE 次数 >15"
    改为
    db.Execute "UPDATE 表1 SET 次数=3 WHERE 次数 >15"
    后,问题就解决了。