我想創建一個新表“TblMany”,從其他資料表“TblControl”中過濾值。
使用表單“FrmMany”的多個復選框進行過濾。
帶有資料“TblControl”的表:

帶有復選框的表單,代表“Box?”中可用的所有值 資料表中的列:

按下按鈕后,它應該創建一個新表(或重新創建一個現有表),顯示在“FrmMany”中選擇的數字行

需要多選:


我已經用“iif”或“where”做了一些測驗,但我認為這只能通過 VBA 實作。
有任何想法嗎?
uj5u.com熱心網友回復:
您是正確的,您需要使用 VBA 來執行此操作。首先,您需要回圈復選框以查看它們是否用于選擇資料。完成此操作后,您需要構建一個將資料插入現有表的 SQL 字串。像這樣的東西似乎有效:
Private Sub cmdProcess_Click()
On Error GoTo E_Handle
Dim intLoop1 As Integer
Dim strSQL As String
For intLoop1 = 1 To 8
If Me("chk" & intLoop1) = True Then strSQL = strSQL & intLoop1 & ","
Next intLoop1
If Len(strSQL) > 0 Then
If Right(strSQL, 1) = "," Then strSQL = Left(strSQL, Len(strSQL) - 1)
CurrentDb.Execute "DELETE * FROM tblMany;"
CurrentDb.Execute "INSERT INTO tblMany " _
& " SELECT * FROM tblControl " _
& " WHERE Box1 IN(" & strSQL & ") " _
& " OR Box2 IN(" & strSQL & ") " _
& " OR Box3 IN(" & strSQL & ");"
End If
sExit:
On Error Resume Next
Exit Sub
E_Handle:
MsgBox Err.Description & vbCrLf & vbCrLf & "cmdProcess_Click", vbOKOnly vbCritical, "Error: " & Err.Number
Resume sExit
End Sub
我假設這tblMany是tblControl除了欄位的精確副本之外ID是 Autonumber intblControl并且只是 numeric in tblMany。
與其重復洗掉和插入資料(這會導致膨脹),不如使用查詢并根據需要修改其 SQL 更好:
CurrentDb.QueryDefs("qryMany").SQL="SELECT * FROM tblControl " _
& " WHERE Box1 IN(" & strSQL & ") " _
& " OR Box2 IN(" & strSQL & ") " _
& " OR Box3 IN(" & strSQL & ");"
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/505136.html
標籤:毫秒访问
上一篇:訪問VBA以在服務器端運行查詢
