Ms access 访问组合框绑定和选定值
我试图创建一个简单的表单来输入数据。我有两张桌子,作业和报告。报表表引用具有一对多(一个作业,多个报表)的作业。在浏览报告时,我需要列出所有作业的组合框,以将相应的作业显示为所选值。这在.NET环境中很容易,但我不理解如何在combobox的属性表中设置它。我的组合框记录源来自一个查询:Ms access 访问组合框绑定和选定值,ms-access,Ms Access,我试图创建一个简单的表单来输入数据。我有两张桌子,作业和报告。报表表引用具有一对多(一个作业,多个报表)的作业。在浏览报告时,我需要列出所有作业的组合框,以将相应的作业显示为所选值。这在.NET环境中很容易,但我不理解如何在combobox的属性表中设置它。我的组合框记录源来自一个查询: SELECT Jobs.UID, Jobs.Projectcode, Jobs.Projectname, Jobs.Owner, Jobs.Contractor FROM Jobs ORDER BY Jobs.
SELECT Jobs.UID, Jobs.Projectcode, Jobs.Projectname, Jobs.Owner, Jobs.Contractor
FROM Jobs
ORDER BY Jobs.[Projectcode];
该表单基于联接表的查询:
SELECT Report.ID, Report.ReportNumber, Report.ReportDate, Report.Temperature, Report.Weather, Report.Progress, Report.PeopleatOAC, Report.Trades, Jobs.UID, Jobs.Projectname, Jobs.Owner, Jobs.Contractor
FROM Report
INNER JOIN Jobs ON Jobs.UID = Report.JobID
UNION ALL SELECT Report.ID, Report.ReportNumber, Report.ReportDate,
Report.Temperature, Report.Weather, Report.Progress, Report.PeopleatOAC,
Report.Trades, Jobs.UID, Jobs.Projectname, Jobs.Owner, Jobs.Contractor
FROM Report
LEFT JOIN Jobs ON Jobs.UID = Report.JobID WHERE (((Report.JobID) Is Null))
ORDER BY Report.ID;
按照我的设置方式,报表可以有一个空作业字段。因此,我希望能够从组合框中选择一个作业来更新报告表,并且如果当前记录有一个与之关联的作业ID,我希望组合框能够反映正确的作业。这可能吗?我实现的是与表单的当前事件关联,该表单根据作业ID设置组合框值(或清除组合框值)。以及绑定到combobox的已更改事件,以使用选择更新数据库。这已经足够好了,但是与C#、WPF和MVVM相比,VBA感觉非常有限 对于遇到类似问题的人,这里有两个VBA函数:
Private Sub Form_Current()
Dim JobID As Integer
Dim i As Integer
Dim TempVal As Variant
Dim TestVal As Integer
TempVal = Me.JobID.Value
If Me.JobID.Value <> Empty Then
JobID = Me.JobID.Value
Else: JobID = -2
End If
With Me.JobCodeCombo
If (JobID >= 0) Then
For i = 0 To .ListCount - 1
TestVal = .Column(0, i)
If .Column(0, i) = JobID Then
.Value = .ItemData(i)
Exit For
End If
Next
Else
Me.JobCodeCombo = Null
End If
End With
End Sub
Private Sub JobCodeCombo_Change()
Dim ReportID As Long
Dim JobID As Long
Dim dbs As DAO.Database
Dim qdfUpdateJobID As DAO.QueryDef
Dim CurrentRecord As Long
CurrentRecord = Me.CurrentRecord
Set dbs = CurrentDb
Set qdfUpdateJobID = dbs.QueryDefs("UpdateReportWithJobID")
ReportID = Me.ReportID.Value
JobID = Me.JobCodeCombo.Column(0)
qdfUpdateJobID.Parameters(0).Value = JobID
qdfUpdateJobID.Parameters(1).Value = ReportID
qdfUpdateJobID.Execute
qdfUpdateJobID.Close
DoCmd.Save acForm, "Form1"
Me.Requery
DoCmd.GoToRecord acDataForm, "Form1", acGoTo, CurrentRecord
End Sub
PARAMETERS [P1] Long, [P2] Long;
UPDATE Report SET JobID = P1
WHERE [ID] = P2;