Office中国论坛/Access中国论坛

标题: 层级联接问题? [打印本页]

作者: JimmyOu3259    时间: 2007-10-27 09:24
标题: 层级联接问题?
创建了级层联接关系以后,为什么“图纸资料窗体”不能创建新记录了?创建记录老提示什么冲突,只有“主机窗体”先创建一条记录后才能在“图纸资料窗体”再创建记录,有什么办法可以解决?
作者: t小宝    时间: 2007-10-27 11:45
创建了一对多的关系并实施参照完整性后,就是这样.
要不想这样,就取消实施参照完整性.
作者: JimmyOu3259    时间: 2007-10-27 11:54
如果取消的话,那“主机窗体”记录修改的话“图纸资料窗体”相应的记录就不能连动修改了。
请问你有没有什么好的方法?
作者: t小宝    时间: 2007-10-27 12:11
既然要连动修改相应的子记录,
而又要在主记录没有的情况下先添加新的子记录,
那不是自相矛盾吗?
作者: liwen    时间: 2007-10-27 13:07
先提供一下思路试试:
在子记录的更新前事件中,判断是否存在相应的主记录,如果没有就创建主记录这样行吗?
作者: JimmyOu3259    时间: 2007-10-27 14:29
我可能表达的不太清楚,你们可以看下附件;在“图纸窗体”中新建一条记录,该窗体的前4个内容“工号,合同号,计划产出日期,订购单位”由下拉菜单选择,其实这44内容是对应“主机窗体”的内容,当“主机窗体”这4个内容做修改时,“图纸窗体”能不能相应改变?麻烦大家看一下,谢谢!!!
作者: t小宝    时间: 2007-10-27 16:32
表的设计可能有点问题,
图纸资料表中的“工号,合同号,计划产出日期,订购单位”字段与主机信息表重复,把这四个字删除,建一个包含两个表的查询作为图纸子窗体的记录源.就不存在四个字段对应内容变动的问题.
这个查询应该包括图纸资料表的所有字段和主机信息表中的“工号,合同号,计划产出日期,订购单位”字段.
作者: JimmyOu3259    时间: 2007-10-31 08:30
t小宝,你可以在我的附件上做一下吗?谢谢啦
作者: t小宝    时间: 2007-10-31 21:10
在例子上删除图纸资料表字段.更改了图纸资料子窗体的数据源查询.
作者: JimmyOu3259    时间: 2007-11-1 08:22
t小宝先谢谢你啊,我要的就是这样的效果,但是按你的附件的话“图纸资料”窗体就不能再添加新记录,也不能修改?是什么原因啊,望解答一下?感激不尽!!!!!!!
作者: t小宝    时间: 2007-11-1 10:56
1、更改了修改和添加按钮的代码。图纸资料表取消了四个字段,所以要取消这四个字段的修改和添加代码。
2、更改了删除按钮的代码。图纸资料表是"一对多"关系的"多"方,编号字段作为连接字段,是有重复的,所以添加了一个唯一的自动编号字段,在删除按钮中使用。
具体改动请对照原来的库
[attach]26779[/attach]
作者: JimmyOu3259    时间: 2007-11-1 12:49
先谢谢你啊!!!!!
作者: JimmyOu3259    时间: 2007-11-2 08:17
t小宝,如果按你的附件话 “主机信息”窗体有几条记录“图纸资料”窗体才能新增几条记录;但是“图纸资料”窗体中相同“工号,合同号,订购单位,计划产出日期”的记录中图纸名称等其他几项是可以不同啊?现在我想增加记录就不行了。。。
作者: t小宝    时间: 2007-11-2 14:20
为实现层级连接,图纸资料的编号只能输入主机信息中有的编号,但图纸资料可以输入多条编号相同的记录,可实现你要求的效果。
作者: JimmyOu3259    时间: 2007-11-2 16:11
为什么我在这个附件上不能在“图纸资料”窗体新增记录啊?什么原因啊,麻烦你再看看,谢谢!!!!!!
作者: t小宝    时间: 2007-11-2 17:13
不好意思,表结构和表关系没有得改完,再试试这个
[attach]26804[/attach]
作者: JimmyOu3259    时间: 2007-11-3 08:01
谢谢你啊,这个问题拖很久,现在终于被你解决了。。。。

[ 本帖最后由 JimmyOu3259 于 2007-11-3 14:28 编辑 ]
作者: JimmyOu3259    时间: 2007-11-3 14:32
t小宝,按这种做法,在“图纸资料”窗体中有两条记录时,我想修改下面那条时,为什么老是只修该第一条记录?
作者: t小宝    时间: 2007-11-3 15:12
你原来的代码有很多错误,特别是有一个For循环更是不知有什么用?
改成下面的就可以了:

Private Sub 修改记录_Click()
On Error GoTo Err_修改记录_Click
Dim STemp As String
Dim Rs As ADODB.Recordset
If IsNull(Me![图纸资料表查询 子窗体]![ID]) Then Exit Sub
Set Rs = New ADODB.Recordset
STemp = "select * from 图纸资料表 Where ID=" & Me![图纸资料表查询 子窗体]![ID]
Rs.Open STemp, CurrentProject.Connection, adOpenKeyset, adLockOptimistic
If IsNull(Me![编号]) = True Then
    MsgBox "请输入编号,它不可以为空!", vbOKOnly, "输入编号"
    Me![编号].SetFocus
ElseIf IsNull(Me![图纸名称]) = True Then
    MsgBox "请输入图纸名称,它不可以为空!", vbOKOnly, "输入图纸名称"
    Me![图纸名称].SetFocus
ElseIf IsNull(Me![计划完成日期]) = True Then
    MsgBox "请输入计划完成日期,它不可以为空!", vbOKOnly, "输入计划完成日期"
    Me![计划完成日期].SetFocus
Else
    Rs("图纸名称") = Me![图纸名称]
    Rs("计划完成日期") = Me![计划完成日期]
    Rs("实际完成日期") = Me![实际完成日期]
    Rs("分图日期") = Me![分图日期]
    Rs("制图人") = Me![制图人]
    Rs("备注") = Me![备注]
    Rs.Update
    Me![图纸资料表查询 子窗体].Requery
    MsgBox "图纸资料表已经修改完成!", vbOKOnly, "修改完成"
End If
Exit_修改记录_Click:
    Set Rs = Nothing
    Exit Sub
Err_修改记录_Click:
    MsgBox Err.Description
    Resume Exit_修改记录_Click
End Sub

[ 本帖最后由 t小宝 于 2007-11-3 15:16 编辑 ]
作者: t小宝    时间: 2007-11-3 15:22
主机信息窗体也有类似的问题,你自己参照修改.
还有,代码应设置缩进,才好看清逻辑关系.
作者: JimmyOu3259    时间: 2007-11-6 08:13
好的,我修改看看,谢谢啊




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3