2013-01-10 37 views
0

我正在處理關鍵庫存數據庫。管理誰簽名房間鑰匙,什麼時候他們把他們帶回來。我創建了我計劃使用的桌子,並已開始製作表格。但是,我無法按照需要使窗體/子窗體正常工作。訪問按鈕VBA問題和子表單問題

我已經創建了按鈕來添加/編輯/刪除/ etc的子表中的記錄是表的結果。我已經編寫了基於我在我的數據庫類中做過的一箇舊項目的按鈕(當時有人做了這些表單,我做了查詢)。我似乎無法讓他們工作。到目前爲止,我只編寫了「mainKeys」表單的按鈕。

我注意到主窗體顯示了14條記錄中的1條,而來自我舊項目的窗體只顯示了窗體中的所有記錄。

這裏的訪問文件:http://jumpshare.com/b/W7AKih

這裏是我的舊項目(這是林試圖複製):http://jumpshare.com/b/r7Y6O1

下面是按鈕的代碼:

Option Compare Database 

Private Sub cmdAdd_Click() 
If Me.keyID.Tag & "" = "" Then 
    CurrentDb.Execute "INSERT INTO KEYS(KEY_ID, ROOM, DRAWER)" & _ 
     " VALUES(" & Me.keyID & ",'" & Me.roomID & "'," & Me.drawerID & ")" 
      subKey.Form.Requery 
Else 
    CurrentDb.Execute "UPDATE KEYS " & _ 
    " SET KEY_ID=" & Me.keyID & _ 
    ", ROOM='" & Me.roomID & "'" & _ 
    ", DRAWER='" & Me.drawerID & "'" & _ 
    " WHERE KEY_ID=" & Me.keyID.Tag 
End If 
cmdReset_Click 
subKey.Form.Requery 
End Sub 

Private Sub cmdBack_Click() 

End Sub 

Private Sub cmdDelete_Click() 
If Not (Me.subKey.Form.Recordset.EOF And Me.subKey.Form.Recordset.BOF) Then 
    If MsgBox("Confirm Deletion?", vbYesNo) = vbYes Then 
     CurrentDb.Execute "DELETE FROM KEYS" & _ 
      " WHERE KEY_ID=" & Me.subKey.Form.Recordset.Fields("KEY_ID") 
       Me.subKey.Form.Requery 
    End If 
End If 
End Sub 

Private Sub cmdEdit_Click() 
If Not (Me.subKey.Form.Recordset.EOF And Me.subKey.Form.Recordset.BOF) Then 
     With Me.subKey.Form.Recordset 
      Me.keyID = .Fields("KEY_ID") 
      Me.roomID = .Fields("ROOM") 
      Me.drawerID = .Fields("DRAWER") 
      Me.keyID.Tag = .Fields("KEY_ID") 
      Me.cmdAdd.Caption = "Update Record" 
      Me.cmdEdit.Enabled = False 
     End With 
End If 
End Sub 

Private Sub cmdExit_Click() 
DoCmd.Close 
End Sub 

Private Sub cmdReset_Click() 
    Me.keyID = "" 
    Me.roomID = "" 
    Me.drawerID = "" 

    Me.keyID.SetFocus 
    Me.cmdEdit.Enabled = True 
    Me.cmdAdd.Caption = "ADD KEY" 
    Me.keyID.Tag = "" 
End Sub 

從我可以看到Reset &退出按鈕工作得很好,添加/刪除/更新記錄不會。 另外,這是我正在爲我的學校的辦公室工作的一個小項目。如果任何人有什麼建議,他們在文件中看到的將是偉大的。

+0

更改後不應該更新數據庫嗎?可能是「Me.update()' – Vogel612

+0

,但我認爲這就是」Me.subKey.Form.Requery「所做的。我看着文件即時通訊使用作爲指導,沒有me.update(),它似乎工作正常。 – Batman

+0

,但沒有任何查詢或編輯功能,嘗試檢查是否工作後添加它 – Vogel612

回答

0

沒有任何事情發生的原因是數據庫中的事件行被設置爲[Embedded Macro]而不是[Event Procedure],所以您發佈的代碼永遠不會運行。在遇到問題時設置斷點以查看是否已達到代碼總是明智的。

之後,在我看來,你會在一種方式上遇到太多的麻煩,而在另一種方面會太少。當Access將非常好地處理子表單的添加時,不必編寫所有插入代碼,而是編寫更多的檢查代碼以確保數據狀態良好。

+0

這是我第一次去VBA。所以我不知道如何寫好檢查。然而,這些字段與表相關聯,因此我假設它將使用表中的類型和相應的輸入掩碼來防止用戶輸入不正確的信息。目前他們是無限的,但我計劃改變這一點。 – Batman

+0

好吧,盡情享受:) – Fionnuala

+0

我已將所有按鈕更改爲[事件過程]。 「添加密鑰」按鈕現在可用。但是,當我嘗試編輯記錄時,在標準表達式中出現數據類型不匹配。 我編輯時的數據類型沒有改變,所以我不明白爲什麼我得到這個錯誤。試圖刪除記錄時,我也得到相同的錯誤 – Batman