access在結合或綁定的組合框中添加新值
2024-09-07 19:05:09
供稿:網友
當主表(“一”表)中的主鍵字段與相關表(“多”表)中的外部鍵字段建立了關系后,在基于相關表(“多”表)而建的窗體中,外部鍵字段的控件可以設為組合框,通過鍵盤或鼠標,輸入或選擇組合框中已存的值,也就是引用“一”表所有的數據。 此時,組合框的“行來源類型(RowSourceType)”屬性為“表/查詢”;“行來源(RowSource)”屬性為一查詢或SQL語句,同時必須設置“結合列(或綁定列)(BoundColumn)”屬性;而“限于列表”屬性必須設為“是”,這是為了確保在相關表(“多”表)中的外部鍵字段必須與主表(“一”表)中的主鍵字段有一一對應的關系。從中也可以看出,輸入數據必須先輸入主表(“一”表)的數據,然后才能在相關表(“多”表)中,引用主表(“一”表)的數據。
當組合框為結合(或綁定)時,上述一些屬性必須如上所述。假如在組合框中輸入新值,將會觸發“不在列表中(NotInList)”事件。在該事件中寫上適當的代碼就能將新值添加到組合框所結合(或綁定)的表中。
在使用該事件時,access提供了兩個變量,NewData 和Response 。
當輸入的值不在列表中時,Access把這一新值寫入NewData變量中。通過訪問NewData可將新值添加到主表中。
Response有三個值可取:acDataErrDisplay (默認值)、acDataErrContinue和acDataErrAdded 。
書寫形式為:
Response = acDataErrDisplay
Response = acDataErrContinue
Response = acDataErrAdded
它們的含義為:
1、acDataErrDisplay為用戶顯示默認的消息。當不答應用戶將新值添加到組合框的列表中時,可以使用它。
2、acDataErrContinue 不為用戶顯示默認的消息。假如要為用戶顯示自定義消息時,可以使用它。例如,事件過程能顯示一個自定義對話框以詢問用戶是否要保存新的輸入項。假如回答為 Yes,事件過程將新的輸入項添加到列表中,并將 Response 參數設置為 acDataErrAdded。假如回答是 No,事件過程將 Response 參數設置為 acDataErrContinue。
3、acDataErrAdded 不為用戶顯示消息,但在 NotInList 事件過程中將輸入項添加到組合框列表中。在輸入項被添加后,Microsoft Access 將通過重新查詢組合框來更新列表。然后 Microsoft Access 重新檢查字符串和組合框列表,并將 NewData 參數中的值保存到組合框綁定到的字段中。假如字符串不在列表中,則 Microsoft Access 將顯示一條錯誤消息。
①當主表只有一個字段可以添加新值時,不必另建主表輸入窗體,用"Insert Into表名稱(字段名) Values ('" & NewData & "');"語句將新值直接追加到主表中。以下參考代碼:
PRivate Sub 控件名_NotInList(NewData As String, Response As Integer)
DoCmd.SetWarnings False
DoCmd.RunSQL "Insert Into 表名稱(字段名) Values ('" & NewData & "');"
Response = acDataErrAdded
DoCmd.SetWarnings True
End Sub
②假如,主表有多個字段需要添加新值時,必須另建基于主表的輸入窗體。在主表窗體的“加載”事件中寫入:
Private Sub Form_Load()
If Len(Me.OpenArgs) Then Me.與“多”表窗體中相同字段的控件名 = Me.OpenArgs
End Sub
而在“多”表的“不在列表中”的事件中,寫入以下參考代碼:
Private Sub 控件名_NotInList(NewData As String, Response As Integer)
If MsgBox("是否要添加新值嗎?", vbInformation + vbYesNo, "尋問") Then
DoCmd.OpenForm "主表窗體名稱", , , , acFormAdd, acDialog, NewData
Response = acDataErrAdded
End If
End Sub