我需要在访问2010上创建一个表单,该表单在表格中的记录(t_main
)之间导航
但问题是我需要一个组合来选择param1_old
和新的param2_old
和新的。
这个组合将有2个值,每个参数的旧值和新值。最后,在我选择要为此用户保留哪些参数后,我将单击一个按钮并将此信息保存到新表中(t_saved
)。
t_main
具有以下结构:
user; date; name; param1_old; param1_new; param2_old; param2_new
和
t_saved
具有以下结构:
user; date; name; param1; param2
关于如何做到这一点的任何想法?我应该使用记录集吗?有没有办法避免它,只是强制组合将2个不同字段的值带入值列表?
非常感谢您的帮助!
编辑: 我知道理解我需要的内容相当复杂,我会尝试在屏幕截图中显示:
表中的数据如下:
user; date; name; param1_old; param1_new; param2_old; param2_new
1234568789;"21/07/2014";"John Smith";'Lemon street 125';'Avocado avenue 123'; '...'; '..'
答案 0 :(得分:1)
您没有提到每个表中的主键是什么,所以我假设它是user
字段,t_main
和t_saved
中的每条记录都有唯一的{{ 1}}。
如果没有,则将其替换为实际的主键。
请注意,user
是保留关键字,您无法为字段date
命名,因此我将其重命名为date
。
我创建的small sample database可以按照您的描述运作(至少我理解)。
我用一些示例数据创建了这些表:
我创建了一个绑定到thedate
表的表单:
请注意,下拉框t_main
和cbParam1
未绑定到任何字段,而是未绑定。
下拉框的行源有点像黑客,但效果很好
例如,对于cbParam2
:
cbParam1.RowSource
此查询从SELECT param1_old
FROM t_main
WHERE user=Forms![FormMain]![User]
UNION ALL
SELECT param1_new
FROM t_main
WHERE user=Forms![FormMain]![User];
记录中选择与当前显示的t_main
具有相同user
的旧字段和新字段。实际上,它显示了组合框中当前记录的旧参数和新参数。
FormMain
背后的代码主要用于管理显示
如果下拉框中的一个为空,或者我们之前已经添加了该记录,我们阻止用户将数据添加到t_saved
。
Option Compare Database
Option Explicit
' We use this variable to keep track of whether the
' record was already found in the t_saved table
Private alreadysaved As Boolean
'-----------------------------------------------------------------------------
' Update the UI after we change our selection of parameter
'-----------------------------------------------------------------------------
Private Sub cbParam1_AfterUpdate()
UpdateUI
End Sub
Private Sub cbParam2_AfterUpdate()
UpdateUI
End Sub
'-----------------------------------------------------------------------------
' Enable/Disable the save button.
' The button is only enabled if the user selected both parameters
'-----------------------------------------------------------------------------
Private Sub UpdateUI()
btAddData.Enabled = Not (IsNull(cbParam1) Or IsNull(cbParam2)) _
And Not alreadysaved
End Sub
'-----------------------------------------------------------------------------
' Refresh teh data every time we change record
'-----------------------------------------------------------------------------
Private Sub Form_Current()
' Reset the values of the parameters comboboxes
cbParam1 = Null
cbParam2 = Null
cbParam1.Requery
cbParam2.Requery
' Check if there is already a record for the same user in the t_save table
alreadysaved = DCount("user", "t_saved", "user='" & user & "'") > 0
' Display a warning to tell the user the current record cannot be saved again
lblInfo.Visible = alreadysaved
UpdateUI
End Sub
代码的重要部分实际上是将数据添加到t_saved
表中的新记录的代码:
'-----------------------------------------------------------------------------
' The button was clicked.
' Save the current record data to the t_save table
'-----------------------------------------------------------------------------
Private Sub btAddData_Click()
' We create a new new record in t_save and copy our data
Dim db As DAO.Database
Dim rs As DAO.Recordset
Set db = CurrentDb()
Set rs = db.OpenRecordset("t_saved", dbOpenDynaset, dbFailOnError)
With rs
.AddNew
!user = user
!thedate = thedate
!name = name
!param1 = cbParam1
!param2 = cbParam2
.Update
.Close
End With
Set rs = Nothing
Set db = Nothing
' Force the form to refresh itself
' This will cause the Form's OnCurrent event to be triggered
Me.Requery
End Sub