如何通过从tableB获取数据来基于tableA-fieldB自动填充tableA-fieldA?

时间:2016-11-13 20:30:31

标签: ms-access ms-access-2016

首先,一些背景信息:我习惯使用Excel,我一直用它为我的世界建筑爱好创建生产计算器。由于最近一些需要计算的数据量过大的问题,我终于放弃并尝试将其全部转换为Access。

我一直在做一些关于如何使用Access的阅读,并在此基础上决定了以下内容:

1)我有一个温度表,适用于具有特定生产水平(1,2 ...)的区域(北方,温带......)

2)我有一个特定生产水平(湿地,干旱......)的降水表(1,2 ...)

3)然后我有一个生物群落表,我将上述区域混合在一起,用以下字段创建我的生物群落:
- 生物群落 - 降水(表2中的下拉菜单) - 温度(表1中的下拉菜单) - 生产力水平(应该是表2中的降水生产水平乘以表1中的温度生产水平)。

问题:如何让表3中的生产力水平自动生成?

注意1:我不了解VBA,这是我第一次使用Access。

注意2:我被告知只是创建表3作为表格,但我认为这不符合我想做的事情。万一它可能是相关的(我没有看到明显的),我接下来将描述我建立这个数据库的第一个目标。

数据输入表格:下面引用的所有表格都是通过纬度 - 经度的连接来连接的。我已经成功地部分构建了它(主窗体和城市子窗体) - 基于表格的主表格,包含3个字段:纬度,经度,地形 - 基于具有3个字段的表格的子表单:城市名称,基础日期,折叠日期 - 基于3个表格的3个子表格,每个表格代表一个时间段,有2个字段:生物群系(生物群系在给定区域内根据时间段而变化)及其生产力水平。

在建立世界之后,通过坐标协调,我将进入下一阶段 - 创建表格,我可以识别植物和动物,以及从中获取的产品及其生产力水平。然后,这将用于创建我的世界经济系统和不同财富水平的人物清单。

我可以在Excel中轻松地完成这项工作(不使用VBA),但是在我可以使用之前,数据量会终止该文件。我只希望我能设法在Access中取消它 - 但我会一步一步地处理这个怪物。现在,我只关注上面发布的问题。感谢您提供给我的任何帮助。

1 个答案:

答案 0 :(得分:1)

您想要一个数据库触发器,这意味着将数据输入到指定列中的biome表中会“触发”第三个表的计算。 Access不支持触发器,但有一种解决方法。您可以使用表单并为触发属性的文本框创建事件。

  • 根据您的biome表格创建新表单。我建议你先让触发器工作。稍后您可以将其添加到包含所有子表单的表单中。由于您是Access的新手,因此您不希望如此快地处理子表单,因为它们会使一切变得更加复杂。
  • 您将文本框Precipitation,Temperature,ProductivityLevel重命名为txtPrecipitation txtTemperature txtProdLevel
  • 您打开VBA编辑器并尝试使用新表单中的以下代码:

'Trigger Events
private sub txtTemperature_Change()
call CalculateProductivityLevel()
end sub
private sub txtPrecipitation_Change()
call CalculateProductivityLevel()
end sub
private sub txtTemperature_AfterUpdate()
call CalculateProductivityLevel()
end sub
private sub txtPrecipitation_AfterUpdate()
call CalculateProductivityLevel()
end sub

'Calculation Procedure
private sub CalculateProductivityLevel()
  'Check if both attributes have values. If not do not calculate anything
  if (Len(me.txtTemperature & "") = 0) OR (Len(me.txtPreciperation & "") = 0) Then 
    exit sub
  else
    me.txtProdLevel = me.txtTemperature * me.txtTemperature
end sub

请注意

  • 当两个属性中有新条目或保存新条目时,触发事件将调用calulcation过程。
  • 确保将代码放在VBA编辑器的新表单选项卡中
  • 未经测试的代码,因此可能存在一些错误