學生資訊管理系統(二)刪除資訊

zeyx發表於2013-08-19

1.先分析下刪除的過程。
    假設現在已經新增了記錄,3個記錄.當前顯示第一個記錄時,刪除.指標向下移動顯示第二個記錄。第二個同理。但當前顯示第三個記錄時,刪除第三個,指標指向EOF,這不是是我們想要的,我們要的是刪除第三個記錄後,顯示第一個記錄。
    圖1解:

程式碼如下:

程式碼(1)

Private Sub deleteCommand_Click()         myBookmark = mrc.Bookmark     '對當前顯示的記錄作為標籤    str2$ = MsgBox("是否刪除當前記錄?", vbOKCancel, "刪除當前記錄")                            '單擊刪除按鈕時彈出對話方塊提示是否刪除當前記錄            If str2$ = vbOK Then            '如果刪除當前記錄            mrc.MoveNext            '記錄指標指向下一個記錄                       If mrc.EOF Then     '如果EOF為真則說明剛開始顯示的記錄是記錄集中最後一個記錄                 mrc.MoveFirst     '記錄指標指向第一個記錄                 myBookmark = mrc.Bookmark '給第一個記錄做個標籤                 mrc.MoveLast      '記錄指標指向最後一個記錄(也是是當前顯示的記錄)                 mrc.Delete        '刪除最後一個記錄                 mrc.Bookmark = myBookmark   '顯示剛才座標籤的記錄(第一條記錄)                 Call viewData     '呼叫函式顯示刪除後的記錄                        Else    '如果剛開始顯示的不是最後一個記錄,                 myBookmark = mrc.Bookmark    '給當前記錄作標籤(即mrc.movenext)                  mrc.MovePrevious             '記錄指標指向上一個記錄(剛開始顯示的記錄)                 mrc.Delete                  '刪除上一個記錄                 mrc.Bookmark = myBookmark   '  顯示剛才做的標籤,顯示記錄                 Call viewData          '呼叫函式顯示刪除後的記錄            End If

       Else   '如果不刪除記錄          mrc.Bookmark = myBookmark   '顯示最開始做的標記記錄          Call viewData   '呼叫函式顯示。     End If End Sub

 2.刪除記錄時出現的錯誤。
2.1單擊修改班級資訊時,因為資料庫中沒有記錄而出現的錯誤
  圖2:

  

解決辦法:
  在修改班級資訊窗體的載入過程中新增如下語句:

程式碼(2)
txtSQL = "select * from class_Info "
Set mrc = ExecuteSQL(txtSQL, MsgText)
    
If mrc.EOF = False Then
    mrc.MoveFirst
    Call viewData
    myBookmark = mrc.Bookmark
Else
    MsgBox "沒有紀錄!", vbOKOnly + vbExclamation, "警告"
    Exit Sub
End If

當資料庫中沒有記錄時,會彈出提示框顯示“沒有記錄”

      但修改班級資訊的窗體還是會載入,已經顯示沒有記錄了載入了窗體也沒有用,我想單擊提示框中的“確定”按鈕後直接退出該窗體所以在
 MsgBox "沒有紀錄!", vbOKOnly + vbExclamation, "警告"下新增了
 Unload Me    但是有出現了新的錯誤
  圖3:

       因為在主選單中單擊修改班級資訊按鈕時載入窗體,必須的先載入完之後在進行對窗體的操作,後來想在主窗體中進行設定使查詢到資料庫中沒有記錄後不載入窗體,但沒有成功,待解決。

 2.2當開啟窗體進行刪除操作時,當刪除最後一個記錄時也會出現圖1顯示的錯誤。

對原有的程式碼進行了修改 對已經註釋的程式碼不在重複註釋,

程式碼如下:

程式碼(3):
Private Sub deleteCommand_Click()      
   mybookmark = mrc.Bookmark    
   str2$ = MsgBox("是否刪除當前記錄?", vbOKCancel, "刪除當前記錄")    
   If str2$ = vbOK Then        
        mrc.MoveNext
        If mrc.EOF Then      
            mrc.MoveFirst
            If mrc.RecordCount = 1 Then '如果記錄集中只有一個記錄(即當前要被刪除的記錄)        
                mrc.Delete  '刪除記錄
                MsgBox "沒有記錄", vbOKOnly + vbExclamation, "警告"    '彈出顯示框顯示沒有記錄
                Unload Me              '解除安裝該窗體
                Exit Sub
            Else                       '如果不是最後一個記錄 其他程式碼的功能跟已經註釋的相同
                mybookmark = mrc.Bookmark
                mrc.MoveLast      
                mrc.Delete
                mrc.Bookmark = mybookmark
                Call viewData
            End If
        Else
            mybookmark = mrc.Bookmark    
            mrc.MovePrevious
            mrc.Delete
            mrc.Bookmark = mybookmark   
            Call viewData
        End If
   Else
        mrc.Bookmark = mybookmark   
        Call viewData
   End If
End Sub 

 3.在刪除記錄中不適用標籤。

程式碼如下:

程式碼(4)
Private Sub deleteCommand_Click()
   str2$ = MsgBox("是否刪除當前記錄?", vbOKCancel, "刪除當前記錄")    
   If str2$ = vbOK Then 
       mrc.Delete
       mrc.MoveNext
       If mrc.RecordCount = 0 Then        
           MsgBox "沒有記錄", vbOKOnly + vbExclamation, "警告"
           Unload Me
           Exit Sub
       Else
          If mrc.EOF Then      
              mrc.MoveFirst
              Call viewData
          Else              
              Call viewData
          End If
       End If
   End If
End Sub 

      相比較程式碼(4)更簡潔,刪除記錄說刪就刪。先刪除當前的記錄然後在找下個記錄,有就顯示,沒有就顯示沒有記錄
程式碼(3)先找下一個記錄做個標籤,然後在回來把當前的記錄刪掉,在顯示作標籤的記錄。

4.個人感受
       在敲刪除記錄的程式碼時 我是仿照程式碼(1)來進行的。我們平常的思維是先新增記錄然後在對記錄進行修改,當沒有新增記錄時,就不會去開啟修改記錄的窗體,但無意時開啟了,問題就出來了。這就是平時我們考慮問題的不周到造成的,不過問題出現了那我們就解決問題。



 


 

相關文章