人 Person_Pet 宠物在Access中实现多对多,子窗体,复选框2007
我需要做一个数据输入表单。假设我们有一张名为Person的表格,并在其中包含适当的字段。在我的表格中,我需要允许用户从(一个或多个)复选框中选择代表所有可能的宠物(固定列表项目:狗,ser猫,美洲驼,jackalope,em,,龙,蜘蛛......) 。
对于表单,需要有一个复选框来表示每个可能的选择。如果那个人确实有一只宠物狗,那么该复选框必须是真实的,如果他们没有一只狗,它就需要是假的(我想我说的很明显,因为我试图做为一个子表单在“多对多”,并显示“假”价值的东西。他们可以选择不止一个。
最后,我需要作出新的形式或重用modificiations数据录入等形式
是这个一个子表单?我有一个Person表,Pet表,Person_Pet(id/joining)表。我试图用VBA去做所有这些,但我认为我选择了艰难的方式,但是,还不算太晚改变方向
编辑: 如果我从这开始怎么办?它会导致某些东西给我所有可能的宠物列表,如果p.personid为空,那么复选框不会被选中。如果它不是null,那么它会被检查。这可能吗? (原谅的格式,访问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宠物表中的相应字段.... so dog = chk1,serval = chk2 ... stuff
- 做这个vba(并从Form_Current()调用函数并将它传递给我。 ID):
功能update_checkboxes(issueID作为变型) 昏暗查询作为字符串 昏暗RS作为DAO.Recordset 昏暗分贝数据库 集分贝= 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的东西是恨我。抱歉。 UM。 issue = person,payer = pet。我知道相应的复选框的东西是不是想法,我将不得不搜索/检查字符串字段,但这显示了我认为我可能最终会使用除非..........的概念。 .........
后续问题:是否有任何严重的时间限制问题/后果/ sumthing来运行这些vba查询每次记录被更改?
btw。仅供参考。希望通过选定的答案来展示可能的答案是因为有时候什么东西不是和事物一样重要。有些地区/县/市不会允许pitbulls。加利福尼亚州的整个州显然不敌雪貂。我确实有一个pitbull。我没有雪貂。我们都希望我们有宠物龙训练。所有这些都在一些地区的禁止宠物列表上,所以......这些东西都需要显示。一个列表框可以做到,但我觉得这有点尴尬。通过明显地列出我所有可能的宠物,我知道哪些人会举起旗帜。尽管最终只有真正重要的是我所拥有的.......仍然。但显然我并没有为人们和宠物做一个可爱的小访问数据库,以及他们可以在哪里生活。
关于你的跟进:当你从一个数据集移动到另一个数据集时,幕后会发生很多事情,这个小小的vbacode并没有什么区别。真正耗时的部分是SQL - 并且扩展性好(即,如果在pet_person中有更多的数据集,则不需要更长的时间) - 并且贯穿整个petlistbox只会是一个问题,如果有数以千计的数据集宠物桌会让你的设计首先出现其他问题;) – Johanness 2012-04-27 22:14:15
另一种想法是:有些人花时间思考你的问题,做出 - 有希望的 - 有价值的贡献,有时帮助你腾出时间免费。你可以在编辑你的问题时表现出他们的尊重,但你第一次没有把握的时候 - 或者甚至更好:把它写在你当地的编辑器中,并且在你拥有它的时候粘贴它......只是一句话 - 没有冒犯 – Johanness 2012-04-27 22:26:09