谢谢大家上次热情的答复,收益匪浅,以后我会常向大家请教,还请多多关照。这次向大家问这样的一个问题,关于我上次的问题,添加部分基本解决,但在执行后,总会出现这样的报错信息“对象关闭时,操作不被允许”,但信息已经加入,这是怎么一回事情呢?希望大家帮我一下,我以前的相关代码段如下:
Dim sql As String
    Dim Sql_str As String
    
    sql = "insert into 出库表 (数量,单价,出库日期,经手人,订购客户,订单编号,产品批次编号,产品名称,货架编号,规格,重量,生产日期,保质期) select'"
    sql = sql & Val(txtExtSellQuantities.Text) & "','"                '出货数量
    sql = sql & Val(txtExtSellPrice.Text) & "','"                     '出货价格
    sql = sql & Trim(txtExtSellDate.Text) & "','"                     '出货日期
    sql = sql & Trim(txtExtSellOperator.Text) & "','"                 '经手人
    sql = sql & Trim(txtExtSellOrderMarks.Text) & "','"               '订购客户
    sql = sql & Trim(txtExtSellCustomers.Text) & "',"                 '订单编号
    sql = sql & "产品批次编号,产品名称,货架编号,产品规格,产品重量,生产日期,保质期 from 库存表 where 产品批次编号 ='" + txtExtSellMarks.Text + "'"
    Adodc4.RecordSource = sql
    Adodc4.Refresh

解决方案 »

  1.   

    ----"对象关闭时,操作不被允许"
    这个问题的因为你的 recordset 已经关闭或 打开了一次尚未关闭就又开了一次
    用 rd is nothing 看看是否存在
      

  2.   

    如:
    1.   报错
    dim rd as New ADODB.Recordset 
    rd.open .....
    rd.close
    msgbox rd.fields(1)2.   报错
    dim rd as New ADODB.Recordset 
    rd.open "table1"
    rd.open "table2"    '此句报错
      

  3.   

    if rs.State=adStateClosed then rs.Open ...如果说对象打开!
    if rs.State=adStateOpen then rs.close
      

  4.   

    这样的话你报错的应该是: Adodc4.RecordSource = sql 
    那肯定是没关,   一定要养成用完即关的习惯!
      

  5.   

    语法错误 Adodc4.RecordSource 是指"设置语或返回一个记录集的查询",只能是"select * from tb where ..."型选择查询sql语句,而不能是其它对数据库操作的sql语句,因此操作不允许.要实现上面的操作最好建一个边接,用这个连接的execute方法执行上面的sql语句!
      

  6.   

    dim rs as New ADODB.Recordset
    rs.CursorLocation=adUseClient'很重要
    rs.open……
      

  7.   

    if rs.State=adStateClosed then
     rs.Open 
    ......'Do Some Thing
    end if
      

  8.   

    在你执行rs.open...前,加上下面语句
    if rs.State=adStateOpen then 
           rs.close
    end if
      

  9.   

    呵呵,还是.net好,DataSet不用打开的