【发布时间】:2012-05-05 13:19:27
【问题描述】:
人 人_宠物 宠物
我需要制作一个数据输入表单。假设我们有一个名为 Person 的表,其中包含适当的字段。在我的表单上,我需要允许用户从(一个或多个)复选框中进行选择,这些复选框代表他们可能拥有的所有可能的宠物(固定的项目列表:狗、薮猫、美洲驼、鹿角羚、鸸鹋、龙、蜘蛛......) .
对于表单,需要有一个复选框来代表每个可能的选择。如果该人确实有一只宠物狗,则该复选框必须为真,如果他们没有狗,则该复选框必须为假(我想我说的是显而易见的,因为我试图将其作为子表单“多对多”和显示“假”值的东西。他们可以选择不止一个。
最终我需要制作一个新表格或重新使用数据输入表格进行修改等。
这是一个子表单吗?我有一个 Person 表、Pet 表、Person_Pet(id/joining)表。我正在尝试使用 VBA 完成这一切,但我认为我选择了艰难的方式,但是,现在改变方向还为时不晚。
编辑: 如果我从这个开始呢?这将导致给我一个所有可能宠物的列表,如果 p.personid 为空,则不选中该复选框。如果它不为空,则对其进行检查。这可能吗? (请原谅格式,访问 sql 编写器显然不知道选项卡是什么,请原谅 sytanx 错误,因为我必须快速查找和替换表名)
select pet.*, p.personid
from pet pet
left outer join
(select pi.petID, pi.personid
from person,
pet_person pi,
pet
where person.id = pi.personID and
pet.id = pi.petID) as p
on p.petID = pet.id
编辑:
好的。那里有一个巨大的答案。我也解决了。我还没有看过你的答案,但我会稍微看一下。这是我的答案...(没有子表单,都在主表单上,“人”表单)
- 制作复选框...并将它们命名为 chk1、chk2、chk3...等等。
- 确保它们对应于我的 lil pet 表中的适当字段....所以 dog = chk1, serval = chk2... stuff
- 执行此 vba(并从 Form_Current() 调用函数并将其传递给 me.id):
函数 update_checkboxes(issueID As Variant) 暗淡查询作为字符串 Dim rs As DAO.Recordset 将 db 作为数据库 设置 db = CurrentDb 暗淡作为字符串
If Not IsNull(issueID) Then
query = "SELECT iif(joined.issueid is null, 0, 1) as binval, payer.* " & _
"FROM payer AS payer LEFT JOIN (select ri.issueid, ri.payerid " & _
"from issue i, payer r, payer_issue ri " & _
"where i.id = ri.issueid and r.id = ri.payerid and ri.issueid = " & issueID & _
") AS joined ON joined.payerid = payer.id;"
Else
query = "select 0 as binval, payer.* from payer"
End If
Set rs = db.OpenRecordset(query)
rs.MoveFirst
Do While Not rs.EOF
s = rs.Fields("CorrespondingChkboxNumber")
Me.Controls("chk" & s).Value = rs.Fields("binval")
rs.MoveNext
Loop
rs.Close
End Function
是的。复制粘贴代码格式stackoverflow的东西讨厌我。对不起。嗯。问题=人,付款人=宠物。我知道相应的复选框不知道,我将不得不搜索/检查一个字符串字段,但这显示了我认为我最终可能会使用的概念,除非............ .........
后续问题:每次更改记录时运行这些 vba 查询是否存在严重的时间限制问题/后果/总结?
顺便说一句。供参考。用选定的答案显示可能的答案的愿望是因为有时事物不是什么与事物是什么同样重要。一些地区/县/市不允许比特犬。整个加利福尼亚州显然取缔了雪貂。我确实有一只比特犬。我没有雪貂。我们都只希望我们有宠物龙可以训练。所有这些都在某些地区的禁止宠物清单上,所以......这两个东西都需要展示。一个列表框可以做到这一点,但我觉得它看起来有点尴尬。通过明显列出我所有可能的宠物,我知道哪些会升旗。虽然最后只有我所拥有的才是真正重要的......仍然。但显然我并没有为人和宠物以及他们可以居住的地方制作一个可爱的小访问数据库。
【问题讨论】:
-
关于您的跟进:当您从一个数据集移动到另一个数据集时,幕后会发生很多事情,以至于这个小 vbacode 没有任何区别。真正耗时的部分是 SQL——它可以很好地扩展(即,如果你在 pet_person 中有更多数据集,它不会花费更长的时间)——并且只有在有数千个数据集的情况下,运行整个 petlistbox 才会成为问题宠物桌首先会给您的设计带来其他问题;)
-
另一种想法:有些人会花时间思考您的问题,做出 - 希望 - 有价值的贡献,有时会免费帮助您。如果您第一次没有正确回答问题,您可以在编辑问题时向他们表示尊重 - 甚至更好:将其写入本地编辑器并在您拥有它时将其粘贴......只是一个评论 - 没有冒犯