设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 2888|回复: 12
打印 上一主题 下一主题

[ADO/DAO] 為什麼不能rs.update

[复制链接]
跳转到指定楼层
1#
发表于 2007-9-27 11:13:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用的是ado,原來在access本身數據庫中可以update,後來把數據庫導入sqlserver2000後就不能保存了,why?百思不得其解。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2007-9-27 11:15:34 | 只看该作者
设主键
(回贴还得凑够十个字)
3#
 楼主| 发表于 2007-9-27 11:19:19 | 只看该作者
已設主鍵。代碼如下

On Error GoTo err_exit
If Me.AllowEdits = False Then
    MsgBox "無需再次保存"
    Exit Sub
End If
   
  
    Me.AllowAdditions = False
    Me.AllowEdits = False
    If IsNull(Me.txtFid) Then
        date2 = "SQ" & Format(Date, "yyyymm")
        id = DMax("[f_id]", "[tblmain]", "[f_id] like '" & date2 & "*'")
        If IsNull(id) Then
            rs!f_id = date2 & "00001"
        Else
            rs("f_id") = date2 & Format(CStr(CInt(Right(id, 3)) + 1), "00000")
        End If
      End If
      
      rs!place = Me.txtPlace
      rs!Description = Me.txtDes
      rs!app_date = Date
      rs!check_id = "0000"
      rs!emp_id = DLookup("id", "tbluser", "pcname='" & getPcname & "'")
      
     

        If Me.msDlg.fileName = "" Then
            PCSIZE = 0
        Else
             PicSize = FileLen(Me.msDlg.fileName)
        End If
      
        If PicSize > 0 Then
            ReDim picData(PicSize)
            FileNo = FreeFile
            Open Me.msDlg.fileName For Binary As #FileNo
            Get #FileNo, , picData()
            Close #FileNo
            rs!photo.Value = picData
            rs!ext = Right(Me.msDlg.fileName, Len(Me.msDlg.fileName) - InStr(1, Me.msDlg.fileName, ".") + 1)
        End If
        rs.Update
        Erase picData
        FillDataFields
        
        
      
        
        Exit Sub
err_exit:
    MsgBox "系統出錯,請檢查記錄或尋求設計人員幫助!"
    Exit Sub
4#
发表于 2007-9-27 11:57:31 | 只看该作者
从代码看,你没有建立记录集(可能代码中省略了),对记录集没有进行定位,即:你没有新增记录,也没有移动到需要修改诉记录上.这时的记录可能是指向EOF或BOF,故不能rs.Update.

没有做过,只从代码判断,见笑见笑!
5#
发表于 2007-9-27 12:22:03 | 只看该作者
没看到打开记录集的语句rs.open ........................
6#
 楼主| 发表于 2007-9-27 13:08:11 | 只看该作者
rs已在form_load時打開,rs.addnew加上也不行。
7#
发表于 2007-9-27 13:27:25 | 只看该作者
原帖由 leoyan76 于 2007-9-27 13:08 发表
rs已在form_load時打開,rs.addnew加上也不行。


把完整语句贴出来,或上传例子

[ 本帖最后由 andymark 于 2007-9-27 13:28 编辑 ]
8#
 楼主| 发表于 2007-9-27 14:08:19 | 只看该作者
Option Compare Database
Dim rs As New ADODB.Recordset
Dim PicName As String, FileNo As Long, picData() As Byte
Dim PicSize As Long

Private Sub cmdAdd_Click()
On Error Resume Next
    If Me.AllowAdditions = True Then
        MsgBox "系統正在新增作業中,請保存後再新增記錄"
        Exit Sub
    End If
   
    Me.AllowAdditions = True
    Me.AllowEdits = True
        

    rs.AddNew
    Me.txtFid = ""
    Me.txtPlace = ""
    Me.txtDes = ""
    FillDataFields
End Sub

Private Sub cmdEdit_Click()
    Me.AllowEdits = True
End Sub
Private Sub cmdFirst_Click()
    If Not rs.BOF Then
        rs.MoveFirst
    End If
    If Not rs.EOF Then
        FillDataFields
    End If
End Sub
Private Sub cmdLast_Click()
   
    If Not rs.EOF Then
        rs.MoveLast
    End If
    If Not rs.EOF Then
        FillDataFields
    End If

   
End Sub
Private Sub cmdLoadpic_Click()
    Me.msDlg.Filter = "picture(*.jpg;*.bmp;*.gif;*.jpeg)|*.jpg;*.bmp;*.gif;*.jpeg|all files(*.*)|*.*"
    Me.msDlg.DialogTitle = "請指定欲插入的圖片檔案"
    Me.msDlg.Action = 1
    If Me.msDlg.fileName = "" Then Exit Sub
    imgPic.Picture = Me.msDlg.fileName
End Sub


Private Sub cmdNext_Click()
    If Not rs.EOF Then
        rs.MoveNext
    End If
    If Not rs.EOF Then
        FillDataFields
    Else
        rs.MoveLast
    End If
End Sub
Private Sub cmdPrevious_Click()
If Not rs.BOF Then
        rs.MovePrevious
    End If
    If Not rs.BOF Then
        FillDataFields
    Else
        rs.MoveFirst
    End If
End Sub
Private Sub cmdSave_Click()
On Error GoTo err_exit
If Me.AllowEdits = False Then
    MsgBox "無需再次保存"
    Exit Sub
End If
   
  
    Me.AllowAdditions = False
    Me.AllowEdits = False
    rs.AddNew
   
    If IsNull(Me.txtFid) Then
        date2 = "SQ" & Format(Date, "yyyymm")
        id = DMax("[f_id]", "[tblmain]", "[f_id] like '" & date2 & "*'")
        If IsNull(id) Then
            rs!f_id = date2 & "00001"
        Else
            rs("f_id") = date2 & Format(CStr(CInt(Right(id, 3)) + 1), "00000")
        End If
      End If
      
      rs!place = Me.txtPlace
      rs!Description = Me.txtDes
      rs!app_date = Date
      rs!check_id = "0000"
      rs!emp_id = DLookup("id", "tbluser", "pcname='" & getPcname & "'")
      
     
        If Me.msDlg.fileName = "" Then
            PCSIZE = 0
        Else
             PicSize = FileLen(Me.msDlg.fileName)
        End If
      
        If PicSize > 0 Then
            ReDim picData(PicSize)
            FileNo = FreeFile
            Open Me.msDlg.fileName For Binary As #FileNo
            Get #FileNo, , picData()
            Close #FileNo
            rs!photo.Value = picData
            rs!ext = Right(Me.msDlg.fileName, Len(Me.msDlg.fileName) - InStr(1, Me.msDlg.fileName, ".") + 1)
        End If
        rs.Update
        Erase picData
        FillDataFields
        
        
      
        
        Exit Sub
err_exit:
    MsgBox "系統出錯,請檢查記錄或尋求設計人員幫助!"
    Exit Sub
   

  
End Sub


Private Sub cmdSend_Click()
Dim rss As New ADODB.Recordset
Dim idstr As String
Dim fidstr As String
    If Me.AllowAdditions = True Or Me.AllowDeletions = True Or Me.AllowEdits = True Then
        MsgBox "您先保存記錄後才能發出郵件"
        Exit Sub
    End If
    idstr = DLookup("[id]", "tbluser", "pcname like '" & getPcname() & "'")
     rss.Open "select * from tblmain where emp_id like '" & idstr & "' and send = 0", CurrentProject.Connection, adOpenKeyset, adLockPessimistic
     If rss.EOF Then
        MsgBox "無新郵件可需發送"
        
    Else
        fidstr = DLookup("[emp_name]", "tbluser", "pcname like '" & getPcname() & "'") & " 發送的巡檢單" & ",請簽核"
        Call SendMailToFin("brian/deuchem", fidstr)
        MsgBox "巡檢作業單已提出!"
        
        DoCmd.RunSQL "update tblmain set send=1 where emp_id like '" & idstr & "' and send = 0"
        
    End If
   
End Sub
Private Sub cmdUndo_Click()
On Error Resume Next
    Me.AllowAdditions = False
    Me.AllowEdits = False
    rs.CancelUpdate
    FillDataFields
End Sub
Private Sub Form_Load()
    rs.Open "select * from tblmain", CurrentProject.Connection, adOpenKeyset, adLockPessimistic
   
    FillDataFields
End Sub
Private Sub Form_Unload(Cancel As Integer)
    Dim rss As New ADODB.Recordset
    Dim idstr As String
    Dim fidstr As String
    idstr = DLookup("[id]", "tbluser", "pcname like '" & getPcname() & "'")
     rss.Open "select * from tblmain where emp_id like '" & idstr & "' and send = 0", CurrentProject.Connection, adOpenKeyset, adLockPessimistic
     If Not rss.EOF Then
        If MsgBox("您還有信末發出,是否退出?", vbYesNo) = vbNo Then
            Cancel = True
            Exit Sub
        End If
    End If
    rss.Close
    Set rss = Nothing
    rs.Close
    Set rs = Nothing
End Sub
Private Function FillDataFields()
    On Error Resume Next
   
        PicName = "c:\" & rs("f_id") & rs("ext")
        If IsNull(rs("photo")) Then PicName = ""
   
        FileNo = FreeFile
        ReDim FileData(LenB(rs("photo")))
        picData() = rs("photo")
        Open PicName For Binary As #FileNo
        Put #FileNo, , picData()
        Close #FileNo
        Erase FileData


    Me.imgPic.Picture = PicName
   
   
    Kill PicName
   
   
    txtFid = rs("f_id")
    txtPlace = rs("place")
    txtDes = rs("description")
    txtNum = rs("photo").ActualSize
    txtReccnt = rs.RecordCount & " 之 " & rs.AbsolutePosition
   
      

End Function
9#
发表于 2007-9-27 14:42:28 | 只看该作者
在你的cmdAdd按钮的单击事件中的rs.AddNew是不需要的,只在保存(cmdSave)时加这一句,因为在你保存前可能还要移动记录,如cmdEdit,cmdNext的单击事件就发生了记录位置的移动.

另外能否将错误的提示贴出来?
10#
 楼主| 发表于 2007-9-27 15:11:13 | 只看该作者
錯誤提示是  ODBC失敗。
多謝各位!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-2 08:05 , Processed in 0.097295 second(s), 33 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表