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


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

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

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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2014/4/3 10:57:00 [只看该作者]

并不是死机,而是效率问题导致的.  等个2分钟就好了.

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


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

回Bin老师:好像不是吧,先运行短代码,然后运行长代码N次,都很快,4秒左右。但是打开项目,直接运行长代码,就死机,不止2分钟的。

 回到顶部
帅哥,在线噢!
wjl-se
  13楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:三尾狐 帖子:762 积分:6302 威望:0 精华:0 注册:2011/12/1 14:47:00
  发帖心情 Post By:2014/4/3 11:44:00 [只看该作者]

我的经验是:
把日期比较从合成表达式拿出来
pr = DataTables("变动日期").Find("编号 = '" & dr("编号") & "' '","变动日期 Desc")
        If pr IsNot Nothing Then
If ....  '在这里进行日期比较
            dr("监区") = pr("监区")
            dr("单位") = pr("单位")
            dr("变动日期") = pr("变动日期")
        End If
end if
...

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


加好友 发短信
等级:贵宾 帖子:35433 积分:178524 威望:0 精华:3 注册:2013/3/30 16:36:00
  发帖心情 Post By:2014/4/3 11:48:00 [只看该作者]

以下是引用wjl-se在2014-4-3 11:44:00的发言:
我的经验是:
把日期比较从合成表达式拿出来
pr = DataTables("变动日期").Find("编号 = '" & dr("编号") & "' '","变动日期 Desc")
        If pr IsNot Nothing Then
If ....  '在这里进行日期比较
            dr("监区") = pr("监区")
            dr("单位") = pr("单位")
            dr("变动日期") = pr("变动日期")
        End If
end if
...

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




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


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

谢谢wjl-se老师和Bin老师的新方案,经测试还是存在问题,重新做了一个案例上传。
以编号3316027352为例,正确的效果是
日期>=2013-11-12  监区为入监监区
日期>=2013-12-18  监区为后勤监区
日期>=2014-03-19  监区为一监区
但是新代码日期<2014-03-19时,监区为空。
如何调整代码获得正确效果,请各位老师指教,谢谢。

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





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


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

这样试试,我测试可以:


'日期转换
Dim rq As Date = Today()
'删除加班补休填报所有行
DataTables("在册名单").DeleteFor("[编号] Is Not Null ")
MainTable= Tables("在册名单")
'填充编号
Dim f As New Filler
f.SourceTable = DataTables("名册清单") '指定数据来源
f.SourceCols = "编号,入监日期,离监日期" '指定数据来源列
f.DataTable = DataTables("在册名单") '指定数据接收表
f.DataCols = "编号,入监日期,离监日期" '指定数据接收列
f.Filter = "入监日期 <= '" & rq & "' And 离监日期 > '" & rq & "'"
f.Fill() '填充数据
For Each dr As DataRow In DataTables("在册名单").DataRows
    Dim pr As DataRow
    If dr.IsNull("编号") Then
        dr("单位") = Nothing
    Else
        pr = DataTables("变动日期").Find("编号 = '' ")
        pr = DataTables("变动日期").Find("编号 = '" & dr("编号") & _
"' And 变动日期 <= '" & rq & "'","变动日期 Desc")
        If pr IsNot Nothing Then
            dr("监区") = pr("监区")
            dr("单位") = pr("单位")
            dr("变动日期") = pr("变动日期")
        End If
    End If
Next
Tables("在册名单").Sort = "单位,编号"
Tables("在册名单").AutoSizeCols()
Tables("在册名单").Cols.Frozen = 4
Tables("在册名单").ListMode = True
With Tables("在册名单") '返回最末行
    .Position = .Rows.Count - 1
End With


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


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

谢谢e-png老师的回复,代码测试,符合要求,速度也正常,解决了大问题,再次衷心感谢e-png老师的热心帮助!!

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


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

 为什么加pr = DataTables("变动日期").Find("编号 = '' ") 这段代码,问题就解决了,没有道理啊,不会是Foxtable的一个bug吧。

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


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

我也来凑凑热闹

 

'日期转换
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 {变动日期} where 变动日期 <= #" & rq & "# 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
  20楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


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

谢谢甜老师的回复,同样运行正常,符合所需的效果,多了一个方案,代码还需要消化一下,收藏了。谢谢甜老师。

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