为什么Microsoft Access表单会为一个查询而不是另一个查询创建记录?

Ins*_*ter 4 ms-access

我有一个Access数据库.让我们假装它是一家宠物商店.

有一张动物桌子.

Animals (animal_id, birth_date, price)
Run Code Online (Sandbox Code Playgroud)

然后是我们销售的不同类型动物的特定表格.

Dogs (animal_id, bark_volume)
Cats (animal_id, collar_size, shedding_rate)
Fish (animal_id)
Run Code Online (Sandbox Code Playgroud)

鱼没有趣味,所以它们没有任何特殊的领域.Fish表存在,因此您知道Animals表中的哪些记录是鱼.

现在,我有一个通用的表格,可以将动物添加到宠物商店.在你获得表格之前,首先要说明你要添加什么样的动物.基于此,表单显示/隐藏字段,更改其记录源,并将字段绑定到适当的数据列.表单从查询DogInfo,CatInfo和FishInfo中提取数据.

现在,当你进入一只狗或一只猫时,一切都很好.记录被添加到动物和狗或猫.

然而,当你进入鱼类时,你得到的只是动物,没有鱼.

可能是什么导致了这个?是不是因为鱼桌上缺少其他栏而引起的?

(让我们撇开这样一个事实,即使用select查询更新表格根本就没有意义.我没想到Access首先让我这么做,但Access的座右铭似乎是"让错误的事情变得容易"做得和正确的事情很难做到."数据库相对简单且不经常使用,并且它比我开始工作之前至少好100倍,所以我真的不太担心这个问题只要我能使它工作.)

DJ.*_*DJ. 7

"是不是因为Fish桌上缺少其他栏目而引起的?"

是 - 当您在子记录(狗和猫)上输入数据时,Access将自动填写父ID(animal_id)

由于鱼类记录没有数据条目,因此无法创建.你必须在代码中这样做.不确定您的表单和数据源是如何设置的,但您可以在其中一个表单事件上执行以下操作:

Fish![animal_id] = Animal![animal_id]
Run Code Online (Sandbox Code Playgroud)

编辑

在FishInfo查询中,您必须提供Fish.[animal_id]别名 - 您不能有两个具有相同名称的字段 - 请调用它Fish_animal_id

然后在Form_BeforeUpdate事件中输入:

Me.Fish_animal_id = Me.animal_id
Run Code Online (Sandbox Code Playgroud)