访问:表单,子表单和查询

时间:2015-08-11 16:46:59

标签: forms vba ms-access

根据我过去几天所做的搜索,我想要实现的目标应该相当简单,但我发现的任何东西都没有解决我的问题。这是我第一次使用Access或SQL。对问题的长度提前道歉。

基本上我需要从一个表中获取一个值并将其与另一个表中的另一个表相乘,然后通过表单和子表单将结果存储在第二个表中。

问题:

我正在尝试创建项目数据库,其中一部分是报价工具。该数据库有几个表格,涵盖了我们项目经理的所有必需输入,其中大部分都链接到其父表的PK。

我当前的尝试有一个表单(frmJobDetails),提供每个项目的详细信息(链接到tblJobs)。此表单有两个子表单:

  1. frmJobRolesSubform详细说明了从事该项目工作的人员(尤其是他们的销售率。
  2. frmJobProcessesSubform详细说明了任务,分配给哪个任务以及估计完成的小时数。
  3. 两个子表单都链接到他们自己的表(分别为tblJobs_RolestblJobs_Processes)。

    frmJobProcessesSubformfrmJobRolesSubform获取项目工作人员及其角色,以便经理可以将人员分配到frmJobProcessesSubform上的任务。这是通过组合框完成的:cboRole

    到目前为止,非常好。

    我需要获得处理给定任务的人的销售率,以便我可以计算任务的成本。具体来说,我希望子表单上的字段计算任务的成本,然后将其存储在tblJobs_Processes中。

    我的尝试

    我尝试构建一个调用qryProcessCost的查询(cboRole),作为字段单元格或条件单元格([Forms]![frmJobsProcessesSubform]![cboRole])中的表达式。

    我知道当表单不活动时这不能成功,但是当从子表单中选择时,我正在获取[Forms]![frmJobsProcessesSubform]![cboRole]的输入请求。当示例值硬编码到查询中时,查询成功运行。显然,查询应该只返回一个值。

    我已经尝试将文本框的ControlSource设置为[qryProcessCost]![dblProcessCost](其中dblProcessCost是计算字段),但这不能写入表格(据我可以推断) 。此外,我在单元格中出现#Name?错误,我似乎无法深究这一点。

    我尝试将组合框的RecordSource属性设置为SELECT [qryProcessCost]![dblProcessCost] FROM [qryProcessCost],将ControlSource设置为表的相关字段。虽然这将是一个笨重的解决方案,但它实际上无法工作,因为它无法获得[Forms]![frmJobsProcessesSubform]![cboRole]的值。

    我尝试使用中间文本框来确定传递的值cboRole,并且我对此感到满意 - frmJobsRolesSubform中分配的角色的主键。

    问题:

    我猜我现在可能不得不求助于VBA以获得我想要的东西,但我不熟悉Access VBA结构(尽管我已经使用了Excel VBA)。

    任何人都有任何想法,提示,建议或指示?

    提前干杯,

    亚伦

1 个答案:

答案 0 :(得分:0)

如果其他人遇到类似问题,我已在下面发布了完整的解决方案:

我对我的引用实现了Gene的更正,它提供了一些内容,但是当表单上的字段发生更改时,查询不会更新。正如我在问题中所提到的,出于可用性原因,我也非常希望它是一个文本框而不是一个组合框,但是不确定如何为文本框创建一个记录源和控制源。

我最终绕圈,通过VBA和宏以及几种类型的错误,并发生了使用DLookUp here的建议。我之前没有能够让他们为这个特定的问题工作,但这次我设法让它工作了。具体来说,我将DLookUp放在以下宏中:

SetProperty
   Control Name  txtBudgetCost
   Property      Value
   Value         =DLookUp("[dblCostRate]","[tblJobs_Roles]","[pkJobs_RoleID]="[cboRole])*[txtBudg‌​etHours]

此宏用于子表单上相关字段的After Update事件。

将字段的value属性设置为DLookUp意味着我可以将文本框txtBudgetCost的Control Source属性设置为表中的相关字段,以获得所需的行为。

cboRoletxtBudgetHours都是与字段txtBudgetCost在同一子表单中的字段。

此解决方案的唯一问题是,在数据表视图中查看子表单时,会为新记录行指定#Name?错误。我可能只需要在某个地方输入一些错误处理,尽管我还没有考虑到它应该是什么。

干杯,

亚伦