Foxtable(狐表)用户栏目专家坐堂 → [求助]跨表填充,增加判断条件后死机(已解决)


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

主题:[求助]跨表填充,增加判断条件后死机(已解决)

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


加好友 发短信
等级:七尾狐 帖子:1525 积分:10580 威望:0 精华:0 注册:2008/9/24 11:16:00
[求助]跨表填充,增加判断条件后死机(已解决)  发帖心情 Post By:2014/4/2 18:11:00 [只看该作者]

一段代码跨表填充:

For Each dr As DataRow In DataTables("在册名单").DataRows
    Dim pr As DataRow
    If dr.IsNull("编号") Then
        dr("单位") = Nothing
    Else
        pr = DataTables("变动日期").Find("编号 = '" & dr("编号") & "' And 变动日期 <= '" & rq & "'","变动日期 Desc")
        If pr IsNot Nothing Then
            dr("监区") = pr("监区")
            dr("单位") = pr("单位")
            dr("变动日期") = pr("变动日期")
        End If
    End If
Next
运行后死机,折腾半天,找到规律:先将代码改成     pr = DataTables("变动日期").Find("编号 = '" & dr("编号") & "'")
运行正常,然后再改回原来的代码,运行达到效果,但是重新打开项目,在运行原来的代码,依旧死机。
现在用一个笨办法,就是先运行短代码,然后运行长代码,就不会出现死机,但感觉不爽,请各位老师帮助支招,谢谢。

现在运行的代码如下:
For Each dr As DataRow In DataTables("在册名单").DataRows
    Dim pr As DataRow
    If dr.IsNull("编号") Then
        dr("单位") = Nothing
    Else
        pr = DataTables("变动日期").Find("编号 = '" & dr("编号") & "'")
        If pr IsNot Nothing Then
            dr("监区") = pr("监区")
            dr("单位") = pr("单位")
            dr("变动日期") = pr("变动日期")
        End If
    End If
Next
For Each dr As DataRow In DataTables("在册名单").DataRows
    Dim pr As DataRow
    If dr.IsNull("编号") Then
        dr("单位") = Nothing
    Else
        pr = DataTables("变动日期").Find("编号 = '" & dr("编号") & "' And 变动日期 <= '" & rq & "'","变动日期 Desc")
        If pr IsNot Nothing Then
            dr("监区") = pr("监区")
            dr("单位") = pr("单位")
            dr("变动日期") = pr("变动日期")
        End If
    End If
Next

[此贴子已经被作者于2014-4-3 13:57:42编辑过]

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


加好友 发短信
等级:七尾狐 帖子:1695 积分:10725 威望:0 精华:0 注册:2009/10/25 16:45:00
  发帖心情 Post By:2014/4/2 19:58:00 [只看该作者]

呵呵,也有第二呀···· ,确有其事,希望狐爸找找原因。。。。

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


加好友 发短信
等级:七尾狐 帖子:1525 积分:10580 威望:0 精华:0 注册:2008/9/24 11:16:00
  发帖心情 Post By:2014/4/2 20:01:00 [只看该作者]

做了一个案例,先单击”短代码“按钮,运行正常,然后单击”长代码“按钮,运行正常,符合需要的效果。
但是打开项目后,如果直接单击”长代码“按钮,就会死机,请各位老师指教,谢谢!!

 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:案列.foxdb




[此贴子已经被作者于2014-4-2 20:02:20编辑过]

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


加好友 发短信
等级:七尾狐 帖子:1695 积分:10725 威望:0 精华:0 注册:2009/10/25 16:45:00
  发帖心情 Post By:2014/4/2 21:07:00 [只看该作者]

我碰到过lz的问题,这样弄一下就ok了:

························
        pr = DataTables("变动日期").datarows(0)  '  加上这一段
        pr = DataTables("变动日期").Find("编号 = '" & dr("编号") & _
        "' And 变动日期 <= '" & rq & "'","变动日期 Desc")

····························


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


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

 效率问题,建议用sql语句来做,参考代码

 

'日期转换
Dim rq As Date = Today()
'删除加班补休填报所有行
DataTables("在册名单").DeleteFor("[编号] Is Not Null ")

MainTable= Tables("在册名单")

 

Dim cmd As new SQLCommand
cmd.CommandText = "Select d.*, c.入监日期, c.离监日期 from {名册清单} As c inner join (Select b.编号, b.监区, b.单位, b.变动日期 from (Select 编号,max(变动日期) As 变动日期 from {变动日期} group by 编号) As a inner join {变动日期} As b  on a.编号 = b.编号 And a.变动日期 = b.变动日期) As d on c.编号 = d.编号" _
 & " where " & "入监日期 <= #" & rq & "# And 离监日期 > #" & rq & "#"
Dim f As New Filler
f.SourceTable = cmd.ExecuteReader
f.DataTable = DataTables("在册名单") '指定数据接收表
f.Fill() '填充数据

 

Tables("在册名单").Sort = "单位,编号"
Tables("在册名单").AutoSizeCols()
Tables("在册名单").Cols.Frozen = 4
Tables("在册名单").ListMode = True
With Tables("在册名单") '返回最末行
    .Position = .Rows.Count - 1
End With
'DataTables("在册名单").Save()


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


加好友 发短信
等级:七尾狐 帖子:1525 积分:10580 威望:0 精华:0 注册:2008/9/24 11:16:00
  发帖心情 Post By:2014/4/3 9:07:00 [只看该作者]

谢谢e-png和有点甜两位老师的回复和指教!

两种方法试了一下,e-png老师的方法好像不见效,而有点甜老师的sql语句有点看不懂,难以理解,执行的效果可能会有问题:
1、变动日期的条件是<=,式中为=?
2、取值为变动日期的倒序,式中好像没有体现?
需要在完整的项目中进行测试。还是要再次感谢两位老师的热情帮助!!

另:跨表填充的代码比较直观,效率也可以接受,使用率很高,出现上述的问题,应该要想办法解决。

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


加好友 发短信
等级:七尾狐 帖子:1695 积分:10725 威望:0 精华:0 注册:2009/10/25 16:45:00
  发帖心情 Post By:2014/4/3 9:12:00 [只看该作者]

呵呵,甜老师:快不了多少。。。

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


加好友 发短信
等级:七尾狐 帖子:1525 积分:10580 威望:0 精华:0 注册:2008/9/24 11:16:00
  发帖心情 Post By:2014/4/3 9:18:00 [只看该作者]

e-png老师,您的方法试了一下,好像不见效,还是我的理解问题?请指教,谢谢。

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


加好友 发短信
等级:七尾狐 帖子:1525 积分:10580 威望:0 精华:0 注册:2008/9/24 11:16:00
  发帖心情 Post By:2014/4/3 10:39:00 [只看该作者]

Bin老师,能否帮助看一下,谢谢!

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


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

 回复6楼,应该是没有问题的。但是这种sql的方法,你使用之前,先把数据来源表保存才行,这样数据才正确。

 

 效率的话,是因为这个问题,你可以变通这改一下

 

http://www.foxtable.com/help/topics/2219.htm

 


 回到顶部
总数 20 1 2 下一页