Dim rsMedia As New ADODB.Recordset'定义rsMedia 为窗体级无源recordset对象
Private Sub Form_Load()
          DTPicker1.Value = CStr(Date)
          'On Error Resume Next
          rsMedia.Fields.Append "条形码", adVariant, , adFldMayBeNull + adFldIsNullable + adFldUpdatable
          rsMedia.Fields.Append "商品类别", adVariant, , adFldMayBeNull + adFldIsNullable + adFldUpdatable
          rsMedia.Fields.Append "商品名称", adVariant, , adFldMayBeNull + adFldIsNullable + adFldUpdatable
          rsMedia.Fields.Append "销售单价", adVariant, , adFldMayBeNull + adFldIsNullable + adFldUpdatable
          rsMedia.Fields.Append "销售数量", adVariant, , adFldMayBeNull + adFldIsNullable + adFldUpdatable
          rsMedia.Fields.Append "销售金额", adVariant, , adFldMayBeNull + adFldIsNullable + adFldUpdatable
          rsMedia.Fields.Append "销售时间", adVariant, , adFldMayBeNull + adFldIsNullable + adFldUpdatable
          rsMedia.Fields.Append "退货时间", adVariant, , adFldMayBeNull + adFldIsNullable + adFldUpdatable
          rsMedia.Fields.Append "是否归还货架", adVariant, , adFldMayBeNull + adFldIsNullable + adFldUpdatable
         ' rsMedia.CursorLocation = 0
          rsMedia.Open
End Sub'给无源recordset对象追加字段'Command1_Click事件中以text1.text和dtpicker1的值为条件查询数据库,并将查询到的记录addnew到
'rsMedia对象中
Private Sub Command1_Click()
    Dim dateCheck1, dateCheck2 As Date
    dateCheck1 = CDate(DTPicker1.Value & " 00:00:00")
    dateCheck2 = CDate(DTPicker1.Value & " 23:59:59")
    a$ = Trim(Text1)
    If a$ = "" Then
        MsgBox "请输入条形码", 0, "华庭销售"
        Text1.Text = ""
        Text1.SetFocus
        Exit Sub
    End If
    strSQL$ = "select number,class,itemNwme,price ,quantity,singleAmout,dealDate from FinishedDEal where number='" & a$ & "' and dealDate between #" & dateCheck1 & "# and #" & dateCheck2 & "# order by dealDate"
    Dim connQuery As New ADODB.Connection
    connQuery.CursorLocation = adUseClient
    Dim rsQuery As New ADODB.Recordset
    Call PubConnSub(connQuery, rsQuery, strSQL$, 3, 3)
    If rsQuery.EOF Then
          MsgBox DTPicker1.Value & "这天没有出售过[*条形码*]为" & a$ & "的商品", 0, "华庭销售"
          rsQuery.Close
          Set rsQuery = Nothing
          connQuery.Close
          Set connQuery = Nothing
    Else
          rsQuery.MoveFirst
          While Not rsQuery.EOF
              rsMedia.AddNew
              For j = 0 To 6  '这7个字段的从查询中得到的,rsMedida剩下的两个字段由下面语句             '赋值  
                    rsMedia(j) = rsQuery(j)
              Next j
              rsMedia(7) = Now
              If Check1.Value Then
                   rsMedia(8) = True
              Else
                  rsMedia(8) = False
              End If
              'rsMedia.Update
              rsQuery.MoveNext
             ' rsMedia.MoveNext
          Wend
          rsMedia.UpdateBatch
          '+++++++++++++++++++++++++++++++++++++++++++++
                  '这里测试rsMedia中的值  打印测试
          rsMedia.MoveFirst
          While Not rsMedia.EOF
             For i = 0 To rsMedia.Fields.Count - 1
                  Debug.Print CStr(rsMedia(i))
             Next i
             Debug.Print
             Debug.Print
             rsMedia.MoveNext
          Wend
           '测试结果:rsMedia中没有值,也就是说 rsMedia.UpdateBatch没起作用
          '++++++++++++++++++++++++++++++++++++++++++++++
          Set DataGrid1.DataSource = rsMedia
          DataGrid1.Refresh
    End If
End Sub由于相同的帖子已经发了多天还是没有高手愿意指点,所以提分再发,希望可以得到解决,请多多指教!

解决方案 »

  1.   

    注意   尽管对于动态游标和仅向前游标 Supports(adUpdateBatch) 可能是真,但对于批处理更新应使用键集游标或静态游标。请将 LockType 属性设置为 adLockBatchOptimistic,然后将 CursorLocation 属性设置为 adUseClient 以启用批更新需要的 OLE DB 游标服务。
      

  2.   

    调试了N久,终于找到问题所在,不是游标的问题,也不是锁类型的问题,是数据类型的问题
    问题出在这里:
           For j = 0 To 6  '这7个字段的从查询中得到的,rsMedida剩下的两个字段由下面语句             '赋值  
                rsMedia(j) = rsQuery(j)
           Next j上面的赋值语句改一下值类型就好了:For j = 0 To 6  '这7个字段的从查询中得到的,rsMedida剩下的两个字段由下面语句             '赋值  
         rsMedia(j) = CStr(rsQuery(j))   '转换成字符串再赋值
    Next j
      

  3.   


    to 回复人: J_Zanetti(国际米兰的阿飞)  
    这证明你没有看代码
    我只是给了必须要给出的代码,还有其他很多过程的,在这里就没有给出to 回复人: ok999ok(ok999ok) 
    Call PubConnSub(connQuery, rsQuery, strSQL$, 3, 3)
    这里两个3就是你所说的东西了to faysky2() 
    这个贴子我在外国论坛上也贴了,有个外国人也这样说了一下,
    有可能正确 ,但是我还是有不明白的地方:
    rsMedia.Fields.Append "销售数量", adVariant, , adFldMayBeNull + adFldIsNullable + adFldUpdatable
    rsMedia("销售数量")字段的数据类型是什么? 不是adVariant吗?如果是的话就应该可以接收数值型的数据了,请多多指点,因为这个问题都好几天没写这个最后的模块了