本人写了一个ACCESS数据库VBA模块,使用ADODB.Recordset对象打开查询,并用Update方法更新数据表中的某列数据,做法:(1)在查询结果集中设置更新的值,然后(默认)调用Update()方法;(2)直接使用带参数的Update()方法。做法(1)执行成功,而做法(2)则报运行时错误!附图,请教高手达人指点!本人重在学习。    我思来想去,是不是传参的Update()方法中的数据类型不匹配的原因:数据库表中的数据类型与VBA中的数据类型是不同的,如这里数据库表中的空串是:‘’;而VBA中的空串是:“”,会是这种原因吗???

解决方案 »

  1.   

    UpdateBatch 方法 (ADO)
             将所有挂起的批更新写入磁盘。语法recordset.UpdateBatch AffectRecords参数AffectRecords   可选,AffectEnum 值。决定 UpdateBatch 方法所影响的记录数目,可以为如下常量之一。常量 说明 
    adAffectCurrent 只写入当前记录的挂起更改。 
    adAffectGroup 对满足当前 Filter 属性设置的记录写入其挂起更改。必须将 Filter 属性设置为某个有效的预定义常量以便使用该选项。 
    adAffectAll 默认值。对 Recordset 对象的所有记录写入挂起更改,包括所有由于当前 Filter 属性设置而隐藏的记录。 
    说明在批更新模式中修改 Recordset 对象时,使用 UpdateBatch 方法可将 Recordset 对象中的所有更改传递到现行数据库。如果 Recordset 对象支持批更新,那么在调用 UpdateBatch 方法之前可以将一个或多个记录的多重更改缓存在本地。如果在调用 UpdateBatch 方法时正在编辑当前记录或者添加新的记录,那么在将批更新传送到提供者之前,ADO 将自动调用 Update 方法保存当前记录的所有挂起更改。注意   只能对键集或静态游标使用批更新。如果由于与现行数据冲突而导致传送更改的尝试失败(如其他用户已将记录删除),那么提供者将把警告返回给 Errors 集合但并不终止执行程序。只有在所有请求的记录都出现冲突时才发生运行时错误。使用 Filter 属性 (adFilterAffectedRecords) 和 Status 属性可以找到发生冲突的记录。要取消所有挂起的批更新,请使用 CancelBatch 方法。
      

  2.   

    没见过楼主这么用法的
    建议楼主好好看看http://www.yesky.com/imagesnew/software/ado/index.html
      

  3.   

    http://download.csdn.net/source/1371356
      

  4.   

    Update后面二个参数都要是变体形或变体形数组,前一个字段名称,后个是对应的值....
      

  5.   

    dim fldname,fldvaluefldname=array(fld1,fld2.....)
    fldvalue=array(v1,v2.....)
    rs.update fldname,fldvalue
      

  6.   

    你的 rcs("档次")返回的是"档次"这个字段的值,不是字段名称,所以报这样的错...
      

  7.   

    rs.update  列,值试试这样行不
    rs.Update "档次", ""
      

  8.   


    谢谢vbman2003! 原来是我对概念的理解不到位,把rcs("档次")当成字段名了,按9楼 simon__sun的改法就正确了。