Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access 为什么Microsoft Access表单会为一个查询而不是另一个查询创建记录?_Ms Access - Fatal编程技术网

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

Ms access 为什么Microsoft Access表单会为一个查询而不是另一个查询创建记录?,ms-access,Ms Access,我有一个Access数据库。让我们假设这是一家宠物店 有一张动物桌 Animals (animal_id, birth_date, price) 然后是我们出售的不同类型动物的特定表格 Dogs (animal_id, bark_volume) Cats (animal_id, collar_size, shedding_rate) Fish (animal_id) 鱼不有趣,所以它们没有任何特殊的领域。Fish表的存在就是为了让您知道动物表中的哪些记录是Fish 现在,我有一个通用的表格,

我有一个Access数据库。让我们假设这是一家宠物店

有一张动物桌

Animals (animal_id, birth_date, price)
然后是我们出售的不同类型动物的特定表格

Dogs (animal_id, bark_volume)
Cats (animal_id, collar_size, shedding_rate)
Fish (animal_id)
鱼不有趣,所以它们没有任何特殊的领域。Fish表的存在就是为了让您知道动物表中的哪些记录是Fish

现在,我有一个通用的表格,用于向宠物商店添加动物。在你拿到表格之前,你首先要说明你要添加的是哪种动物。基于此,表单显示/隐藏字段,更改其记录源,并将字段绑定到相应的数据列。表单从查询DogInfo、CatInfo和FishInfo中提取数据

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

然而,当你进入一条鱼时,你得到的只是一只动物,而不是鱼

这可能是什么原因造成的?这是不是因为Fish表中缺少其他列


(让我们撇开使用select查询更新表毫无意义这一事实不谈。我一开始并不指望Access让我这么做,但Access的座右铭似乎是“让错误的事情容易做,让正确的事情难做。”不过,该数据库相对简单,使用频率较低,而且比我开始使用它之前至少高出100倍,所以只要我能让它正常工作,我就不太担心这个问题。)

您没有狗/猫/鱼表的单独ID吗?假设唯一的区别是列的数量,我想知道这是否突然解决了它。

这是因为Fish表上缺少其他列造成的吗

是-当您在儿童记录(狗和猫)上输入数据时,Access将自动填写家长ID(动物ID)

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

Fish![animal_id] = Animal![animal_id]
编辑

在您的FishInfo查询中,您必须为鱼[animal\u id]提供一个别名-不能有两个同名字段-将其命名为
Fish\u animal\u id

然后,在表单_BeforeUpdate事件中输入以下内容:

Me.Fish_animal_id = Me.animal_id

您是否考虑过在不同的表上配置关系?考虑到上面的设计,我将首先向特定的动物表添加一个标识列,并将其设置为主键。例如:

Dogs(DOG_ID, animal_id, bark_volume)
Cats(CAT_ID, animal_id, collar_size, shedding_rate)

等等。在关系视图中,然后定义一对多(一对一?)关系,从
Animals.ANIMAL\u ID
Dogs.ANIMAL\u ID
。然后,您可以将动物表连接到表单上的combo/listbox控件,以从该表中选择一条记录。我认为,如果正确配置该控件,甚至可以从该控件创建新记录(或者可以使用子窗体)

除了糟糕的设计,您是否在各个表之间建立了关系?您是否将表设置为强制引用完整性?

我没有。这在某种程度上会有所帮助吗?行业规范是使用一个单独的ID列来标识特定的行,并且可能是一个自动编号(即使这三个表都称为“ID”)。它也可能触发该行的创建。已尝试添加ID列。触发创建时没有运气。此表设置有很多错误。我希望这只是一个没有经过仔细设计的例子。基本设计是基于这样的:这有很多错误,在谷歌上搜索“访问表结构”。除非你有一个特定的评论或比在没有有用结果的情况下搜索一个词更有用的东西,否则你没有帮助。这听起来不错,但我无法运行代码。它告诉我类似于“限定符必须是一个集合”。这取决于您使用的记录集/字段名称-基本上,您必须将Fish记录的动物id设置为主动物id,我调整字段名称以对应,但是Access仍然不喜欢它。需要更多关于用于更改recordsource和字段名称等的代码的信息。数据源在Select Case块中设置,该块检查enum的值,然后将窗体的recordsource属性设置为相关查询的名称(字符串)。到目前为止,这仍然不起作用,所以即使StAcExobe确实这样做,我也不认为这是对的。是的,一个到多个关系在IngalIsID和引用完整性的执行上是我将如何做到这一点。也没有添加ID列。