我正在製作一個簡單的Access窗體(連續視圖)。在Details部分有一個複選框,在頁腳有一個Command按鈕。訪問連續窗體:添加控件而不修改基礎表?
這樣,用戶可以使用複選框「選擇」多個記錄,然後單擊按鈕上的命令按鈕以運行更新所選記錄的腳本。沒有必要永久存儲這些檢查值。
通常情況下,我會爲基礎表添加一個布爾字段並將複選框與該字段關聯。但有沒有辦法做到這一點,而無需修改表格?即將複選框值存儲在內存中?
我正在製作一個簡單的Access窗體(連續視圖)。在Details部分有一個複選框,在頁腳有一個Command按鈕。訪問連續窗體:添加控件而不修改基礎表?
這樣,用戶可以使用複選框「選擇」多個記錄,然後單擊按鈕上的命令按鈕以運行更新所選記錄的腳本。沒有必要永久存儲這些檢查值。
通常情況下,我會爲基礎表添加一個布爾字段並將複選框與該字段關聯。但有沒有辦法做到這一點,而無需修改表格?即將複選框值存儲在內存中?
您可以在基於 斷開記錄集的表單中包含記錄選擇複選框。這是您在內存中創建的ADO記錄集,不受任何數據源的約束。通過記錄集中的主鍵,命令按鈕的單擊過程可以遍歷記錄集以檢索「選定」記錄的主鍵列表。如果這種方法聽起來有用,請參閱Danny Lesandrini在Database Journal的文章:Create In-Memory ADO Recordsets
我根據該文章的代碼創建了此表單。主窗體包含基於子窗體的Form_Open
期間加載的斷開記錄集的子窗體。
注意,你實際上並不需要顯示在表格中的主鍵(ID
);只要它包含在記錄集中,就可以在記錄集行走時檢索它。
Private Sub Form_Open(Cancel As Integer)
Dim dbs As DAO.Database
Dim fld As ADODB.Field
Dim rstAdo As ADODB.Recordset
Dim rstDao As DAO.Recordset
Dim strSql As String
Set rstADO = New ADODB.Recordset
With rstAdo
.Fields.Append "EmployeeID", adInteger, , adFldKeyColumn
.Fields.Append "FirstName", adVarChar, 10, adFldMayBeNull
.Fields.Append "LastName", adVarChar, 20, adFldMayBeNull
.Fields.Append "Selected", adBoolean
.CursorType = adOpenKeyset
.CursorLocation = adUseClient
.LockType = adLockPessimistic
.Open
End With
Set dbs = CurrentDb
strSql = "SELECT EmployeeID, FirstName, LastName " & _
"FROM Employees ORDER BY LastName, FirstName"
Set rstDao = dbs.OpenRecordset(strSql, dbOpenSnapshot)
Do Until rstDao.EOF
rstAdo.AddNew
rstAdo!EmployeeID = rstDao!EmployeeID
rstAdo!FirstName = rstDao!FirstName
rstAdo!LastName = rstDao!LastName
rstAdo!Selected = False
rstAdo.Update
rstDao.MoveNext
Loop
Set Me.Recordset = rstAdo
rstDao.Close
Set rstDao = Nothing
Set dbs = Nothing
End Sub
該代碼示例使用ADO早期綁定這需要設置一個版本Microsoft ActiveX數據對象的參考。但是,它可以很好地適用於後期綁定的適當修改。
這種方法並不完全是輕量級的。但是,它允許您選擇複選框而不將其綁定到實際數據表中的「是/否」字段。如果用戶可能會在共享表中覆蓋每個其他人的選擇,那麼這對於多用戶應用程序來說是一個挑戰。斷開的記錄集整齊地避免了這種衝突。
不,沒有。連續表單不是很多活動記錄,它是一個有許多其他記錄視圖的活動記錄。對未綁定控件的任何更新僅適用於當前記錄。您可以使用記錄選擇器來選擇一組記錄並使用它們:http://wiki.lessthandot.com/index.php/Allow_the_User_to_Select_Multiple_Records_for_Processing
你絕對可以這樣做。您只需將複選框與數據源綁定到VBA函數即可。
該函數可以根據行的PK值返回true/false,並將值存儲在集合中。
我這裏工作示例:
http://www.kallal.ca/msaccess/msaccess.html
抓住多選的例子。
所以這裏的帖子聲稱,你不能做到這一點,或者你需要一列或一個需要使用一些斷開連接的記錄均爲100%WRONG
有趣的方法,並且比斷開的記錄集簡單得多。基本上,您將主鍵添加到模塊級集合變量。在你的示例表單中,當我點擊一個複選框時,它們會在更改爲期望值之前閃爍一個黑色方塊大約1/2秒。我如何保持這種「閃光」不再發生? – PowerUser
這有點沉重,但很容易從你的樣本中調整,正是我期待的。它甚至考慮到Remou對多用戶衝突的擔憂。我現在正在推出一個版本。謝謝。 – PowerUser