用access form做前台  oracle 作后台数据库现在维护需要新增加了一张表 通过access 下的vb 更新这张表 报Operation   must   use   an   updateable   query 错误知道的大虾不要吝啬了

解决方案 »

  1.   

    Private Sub SaveMinCap_Click()Dim ptrMinCaptbl As ADODB.Recordset
    Dim szMinCapHold As StringSet ptrMinCaptbl = New ADODB.RecordsetWith ptrMinCaptbl
      .ActiveConnection = CurrentProject.Connection
      .CursorType = adOpenDynamic
      .LockType = adLockReadOnly
    End WithInsertMinCap = "YES"If IsNull(NewMinCapStartDate) Then
       InsertMinCap = "NO"
       MsgBox ("Value Required for MinCap Start Date")
       DoCmd.GoToControl "NewMinCapStartDate"
    ElseIf IsNull(NewMinCap) Then
       InsertMinCap = "No"
       MsgBox ("Value Required for Minimum Capacity")
       DoCmd.GoToControl "NewMinCap"
    ElseIf Not IsNull(NewMinCapEndDate) Then
       If (NewMinCapEndDate <= NewMinCapStartDate) Then
          InsertMinCap = "NO"
          MsgBox ("End Date Must Be Greater Than Start Date")
          DoCmd.GoToControl "NewMinCapEndDate"
       End If
    End If
       
    If (InsertMinCap = "YES") Then
       szMinCapHold = "Update cws_min_cap_history Set min_cap_end_date = '" & NewMinCapStartDate - 1 & "' Where min_cap_acct = " & ACCT_ID & _
                      " And min_cap_end_date is null"
       ptrMinCaptbl.Open (szMinCapHold)
       
       If (IsNull(NewMinCapEndDate)) Then
          szMinCapHold = "Insert Into cws_min_cap_history (min_cap_acct,min_cap_effective_date,min_cap_end_date,min_cap_amount) values (" & _
                         ACCT_ID & ",'" & NewMinCapStartDate & "',NULL," & NewMinCap & ")"
       Else
          szMinCapHold = "Insert Into cws_min_cap_history (min_cap_acct,min_cap_effective_date,min_cap_end_date,min_cap_amount) values (" & _
                         ACCT_ID & ",'" & NewMinCapStartDate & "','" & NewMinCapEndDate & "'," & NewMinCap & ")"
        End If
        
       ptrMinCaptbl.Open (szMinCapHold)
       
       NewMinCapStartDate = Null
       NewMinCapEndDate = Null
       NewMinCap = Null
       DoCmd.Requery
       
    End IfEnd Sub
      

  2.   

    With ptrMinCaptbl
      .ActiveConnection = CurrentProject.Connection
      .CursorType = adOpenDynamic
      .LockType = adLockReadOnly
    End With readonly貌似不能执行DML语句
      

  3.   

    我感觉不是VBA代码的问题我觉得是把ORACLE下的表链接到ACCESS时某个地方出了问题
    我在ORACLE 下 表叫min_history  链接到ACCESS时 设成CWS_min_history CWS是用户名
    在ACCESS下SELECT是可以执行的。 但UPDATE DELETE都不行
    UPDATE报Operation  must  use  an  updateable  query  delete报 无法从指定的数据表中删除。
      

  4.   

    Operation  must  use  an  updateable  query操作必须使用可更改的查询。你那里type已经为readonly了,你修改一下试试看么。不要一开始就一棒子打死。其实我不知道是不是这个原因,只是有针对的出下主意而已,如果试了不行在这里回一下,我也学到了,是不?交流学习是双方的,你要不愿意那就算了。
      

  5.   

    不是这个问题, 我现在把UPDATe 语句放到ACCESS SQL视图里执行 还是报那个错误的
      

  6.   

    结贴了
    是链接ODBC时出了问题