Foxtable(狐表)用户栏目专家坐堂 → [求助]关联表相关问题


  共有3523人关注过本帖树形打印复制链接

主题:[求助]关联表相关问题

帅哥哟,离线,有人找我吗?
lesliecheung912
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:452 积分:3015 威望:0 精华:0 注册:2014/4/23 17:12:00
[求助]关联表相关问题  发帖心情 Post By:2014/5/7 9:52:00 [只看该作者]

各位老师好,先遇到一关联表问题,还请各位老师帮忙看一下
如图所示,各控件都绑定到主表的各个字段,窗口中的表绑定的关联表,且档案编号是按照流水号自动变好的。
ERROR:当新增档案明细时,如果各控件只有档案编号一个有值,其他空间没有值的时候,点新增档案明细时系统会自动关闭。老师们认为是哪里有问题呢?
按钮【新增档案明细】的代码为:Dim r As Row = Tables("档案管理总表.档案管理明细").Addnew
'撤销锁定表
DataTables("档案管理明细").AllowEdit = True

顺便再问一个问题哈,当我新增一条档案明细后点上一条下一条时,档案明细不会保存的,需不需要在上一条下一条中加条件:如果没保存明细就不让它执行上一条或下一条的,若需要该如何定条件。亦或是在关闭的时候给人提醒,若不保存就不能关闭?
请老师们帮忙,多谢!
图片点击可在新窗口打开查看此主题相关图片如下:qq截图20140507093444.png
图片点击可在新窗口打开查看


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/5/7 10:02:00 [只看该作者]

 第二个问题,看这里 http://www.foxtable.com/help/topics/2263.htm

 


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/5/7 10:05:00 [只看该作者]

 第一个问题,关闭的问题,是不是你的关联是多列关联?

 

 在关联表新增行的时候,必须先保证关联列是有值的方可。

[此贴子已经被作者于2014-5-7 10:04:55编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
lesliecheung912
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:452 积分:3015 威望:0 精华:0 注册:2014/4/23 17:12:00
  发帖心情 Post By:2014/5/7 10:13:00 [只看该作者]

先感谢有点甜老师,看你的视频教程学到了不少东西。
第一个问题,关联列只有一列就是档案编号,应该不是您说的那类错误。
第二个问题,上一条下一条是针对主表来操作的,但是我的问题是明细表中新增明细或者修改明细没有保存的情况,也需要在上一条下一条写上with tables("档案明细")之后的判断吗?应该不是这样吧。

 回到顶部
帅哥哟,离线,有人找我吗?
lesliecheung912
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:452 积分:3015 威望:0 精华:0 注册:2014/4/23 17:12:00
  发帖心情 Post By:2014/5/7 10:25:00 [只看该作者]

帮助中:将窗口的BeforeClose事件代码设置为:

If Tables("员工").Current.DataRow.RowState <> DataRowState.Unchanged Then '如果当前行已经修改过
    e.Cancel = 
True
End
 If

但是我新增了档案明细后如果已经执行了上一条下一条的话,以上代码就不适用了吧,应该怎么改呢?请原谅我的愚钝


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/5/7 10:26:00 [只看该作者]

 1、你去看看 档案明细 的datacolchanged事件,看写了什么代码,贴出来看看;

 

 2、粗犷一点的做法就是,直接检测 档案明细 是否有修改 http://www.foxtable.com/help/topics/0387.htm

 

 2、细致一点的做法,你就需要循环检测

 

Dim hasSave As Boolean = True
For Each r As Row In Tables("档案管理总表.档案管理明细").Rows
    If r.DataRow.RowState <> DataRowState.Unchanged Then
        hasSave = False
    End If
Next

If hasSave Then
    '下一条
End If


 回到顶部
帅哥哟,离线,有人找我吗?
lesliecheung912
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:452 积分:3015 威望:0 精华:0 注册:2014/4/23 17:12:00
  发帖心情 Post By:2014/5/7 10:34:00 [只看该作者]

辛苦了甜老师。
档案明细表的Datacolchanged事件:
'多列的跨表更新
If e.DataCol.Name = "档案编号" Then
    If e.NewValue Is Nothing Then
        e.DataRow("档案名称") = Nothing
        e.DataRow("档案类型") = Nothing
        e.DataRow("归档日期") = Nothing
        e.DataRow("保管期限") = Nothing
        e.DataRow("部门2") = Nothing
        e.DataRow("部门2") = Nothing
        e.DataRow("办事处") = Nothing
        e.DataRow("档案移交人") = Nothing
        e.DataRow("档案室") = Nothing
        e.DataRow("档案柜") = Nothing
    Else
        Dim dr As DataRow = e.DataRow.GetParentRow("档案管理总表")
        If dr IsNot Nothing
            e.DataRow("档案编号") = dr("档案编号")
            e.DataRow("档案名称") = dr("档案名称")
            e.DataRow("档案类型") = dr("档案类型")
            e.DataRow("归档日期") = dr("归档日期")
            e.DataRow("保管期限") = dr("保管期限")
            e.DataRow("部门1") = dr("部门1")
            e.DataRow("部门2") = dr("部门2")
            e.DataRow("办事处") = dr("办事处")
            e.DataRow("档案移交人") = dr("档案移交人")
            e.DataRow("档案室") = dr("档案室")
            e.DataRow("档案柜") = dr("档案柜")
        End If
    End If
End If

'将录入的主表的字段关联到明细表中
Dim zdmc As DataRow
zdmc = DataTables("档案管理总表").Find("[档案编号] = '" & e.DataRow("档案编号") & "'")
If zdmc IsNot Nothing Then
    e.DataRow("档案名称") = zdmc("档案名称")
    e.DataRow("档案类型") = zdmc("档案类型")
    e.DataRow("归档日期")=zdmc("归档日期")
    e.DataRow("保管期限") = zdmc("保管期限")
    e.DataRow("部门1") = zdmc("部门1")
    e.DataRow("部门2")=zdmc("部门2")
    e.DataRow("办事处") = zdmc("办事处")
    e.DataRow("档案移交人") = zdmc("档案移交人")
    e.DataRow("档案室")=zdmc("档案室")
    e.DataRow("档案柜") = zdmc("档案柜")
End If

档案管理总表的datacolchanged事件:If e.DataCol.name="档案编号" AndAlso e. DataRow.isnull("档案编号")=False Then
    Dim dr As DataRow = DataTables("档案管理明细").addnew
    dr("档案编号")=e.DataRow("档案编号")
End If


'关联表
Select Case e.DataCol.Name
    Case "档案编号" , "档案名称","档案类型","归档日期","保管期限","部门1","部门2","办事处","档案移交人","档案室","档案柜"
        Dim drs As List(Of DataRow) = e.DataRow.GetChildRows("档案管理明细")
        For Each dr As DataRow In drs
            dr(e.DataCol.Name) = e.NewValue
        Next
End Select

您看看是不是代码有问题啊?

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/5/7 10:51:00 [只看该作者]

把下面这一段去掉。

 

 

'将录入的主表的字段关联到明细表中
Dim zdmc As DataRow
zdmc = DataTables("档案管理总表").Find("[档案编号] = '" & e.DataRow("档案编号") & "'")
If zdmc IsNot Nothing Then
    e.DataRow("档案名称") = zdmc("档案名称")
    e.DataRow("档案类型") = zdmc("档案类型")
    e.DataRow("归档日期")=zdmc("归档日期")
    e.DataRow("保管期限") = zdmc("保管期限")
    e.DataRow("部门1") = zdmc("部门1")
    e.DataRow("部门2")=zdmc("部门2")
    e.DataRow("办事处") = zdmc("办事处")
    e.DataRow("档案移交人") = zdmc("档案移交人")
    e.DataRow("档案室")=zdmc("档案室")
    e.DataRow("档案柜") = zdmc("档案柜")
End If

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2014/5/7 10:58:00 [只看该作者]

 最后不行的话,就上传一个例子吧。

 回到顶部
帅哥哟,离线,有人找我吗?
lesliecheung912
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:一尾狐 帖子:452 积分:3015 威望:0 精华:0 注册:2014/4/23 17:12:00
  发帖心情 Post By:2014/5/7 11:03:00 [只看该作者]

你好厉害啊甜姐,能给我讲讲为什么嘛

 回到顶部