Foxtable(狐表)用户栏目专家坐堂 → 求助窗口筛选中的一个小错误


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

主题:求助窗口筛选中的一个小错误

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


加好友 发短信
等级:六尾狐 帖子:1303 积分:10071 威望:0 精华:0 注册:2013/11/8 15:27:00
  发帖心情 Post By:2016/3/12 17:19:00 [只看该作者]

这个测了下还有问题,不停地跳出下图,最后填充了很多进来

图片点击可在新窗口打开查看此主题相关图片如下:555.png
图片点击可在新窗口打开查看

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


加好友 发短信
等级:狐神 帖子:5015 积分:25363 威望:0 精华:0 注册:2015/8/18 9:21:00
  发帖心情 Post By:2016/3/14 8:44:00 [只看该作者]

Dim dt2 As DataTable = DataTables("部门损益总账")
Dim kms As List(of String())
kms = dt2.GetValues("所属单位|科目编号|科目名称|部门名称")
Dim min As Date = dt2.Compute("min(所属日期)")
Dim max As Date = dt2.Compute("max(所属日期)")
Dim sd As Date = min
Do While Format(sd, "yyyyMM") <= Format(max, "yyyyMM")
    For i As Integer = 0 To kms.Count - 1
        Dim s  = String.Format("所属单位='{0}' and 科目编号='{1}' and 科目名称='{2}' and 部门名称='{3}' and substring(convert(所属日期,'System.String'),1,7) = substring(convert(#{4}#,'System.String'),1,7)",kms(i)(0),kms(i)(1),kms(i)(2),kms(i)(3),sd)
        
            If dt2.Find(s) Is Nothing Then
            Dim ndr As DataRow = dt2.AddNew
            ndr("所属单位") = kms(i)(0)
            ndr("科目编号") = kms(i)(1)
            ndr("科目名称") = kms(i)(2)
            ndr("部门名称") = kms(i)(3)
            ndr("所属日期") = sd
        End If
    Next
    sd = sd.AddMonths(1)

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


加好友 发短信
等级:六尾狐 帖子:1303 积分:10071 威望:0 精华:0 注册:2013/11/8 15:27:00
  发帖心情 Post By:2016/3/14 9:16:00 [只看该作者]

谢谢,这种方式我用在了很多地方要用到的小数据表上了。

用在大数据表上 时我发现还是不可行,在一张大数据表上用了一下,发现记录成倍增加,如A部门最小日期是10月,B部门最小日期是7月,增加的时候A部门也增加了7、8、9月的记录。大数据表上看来还是前一种方法可行一点。

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


加好友 发短信
等级:六尾狐 帖子:1303 积分:10071 威望:0 精华:0 注册:2013/11/8 15:27:00
  发帖心情 Post By:2016/3/14 9:37:00 [只看该作者]

Dim jb As New SQLJoinTableBuilder("利润表附表","部门损益总账")
jb.C(此处连接外部数据源的代码贴不进来)
jb.AddTable("部门损益总账","部门名称","部门档案","部门名称",JoinModeEnum.inner) '添加统计表
jb.AddTable("部门损益总账","科目编号","科目档案","科目编码",JoinModeEnum.inner) '添加统计表
jb.AddCols("{部门档案}.所属单位", "部门类型", "所属日期", "上级部门", "一级科目","借方发生")
jb.build

Dim dt1 As DataTable = DataTables("部门档案")
Dim dt2 As DataTable = DataTables("部门损益总账")
Dim dt3 As DataTable = DataTables("利润表附表")
Dim dt4 As DataTable = DataTables("科目档案")
Dim kms As List(Of String) = dt3.GetValues("一级科目")
Dim min As Date = dt2.Compute("min(所属日期)")
Dim max As Date = dt2.Compute("max(所属日期)")
For Each dr As DataRow In dt1.Select("")
    Dim sd As Date = min
    Do While Format(sd, "yyyyMM") <= Format(max, "yyyyMM")
        For Each km As String In kms
            Dim ndr As DataRow = dt3.AddNew
            ndr("一级科目") = km
            ndr("所属单位") = dr("所属单位")
            ndr("部门类型") = dr("部门类型")
            ndr("上级部门") = dr("上级部门")
            ndr("所属日期") = sd
        Next
        sd = sd.AddMonths(1)
    Loop
Next

Dim b As New CrossTableBuilder("利润表附表",jb.BuildSQL,"CWBBGL")  
b.HGroups.AddDef("所属单位") 
b.HGroups.AddDef("部门类型") 
b.HGroups.AddDef("上级部门","部门") 
b.HGroups.AddDef("所属日期",DateGroupEnum.year,"年")
b.HGroups.AddDef("所属日期",DateGroupEnum.month,"月")
b.VGroups.AddDef("一级科目") 
b.Totals.AddDef("借方发生","本月") 
b.Totals.AddDef("借方发生","累计",True) 
b.Decimals = 2 
b.Build '生成统计表

原来在内部数据源用的代码,我按照帮助改了下在外部数据源使用,发现并没有实现内部数据源同样的结果,跟最初结果还是一样,不知是不是代码哪里还有问题
[此贴子已经被作者于2016/3/14 9:37:06编辑过]

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/3/14 9:39:00 [只看该作者]

Dim dt2 As DataTable = DataTables("部门损益总账")
Dim kms As List(of String())
kms = dt2.GetValues("所属单位|科目编号|科目名称|部门名称")
For Each km As String() In kms
    Dim s  = String.Format("所属单位='{0}' and 科目编号='{1}' and 科目名称='{2}' and 部门名称='{3}'",km(0),km(1),km(2),km(3))
   
    Dim min As Date = dt2.Compute("min(所属日期)", s)
    Dim max As Date = dt2.Compute("max(所属日期)")
    Dim sd As Date = min
    Do While Format(sd, "yyyyMM") <= Format(max, "yyyyMM")
        s  = String.Format("所属单位='{0}' and 科目编号='{1}' and 科目名称='{2}' and 部门名称='{3}' and substring(convert(所属日期,'System.String'),1,7) = substring(convert(#{4}#,'System.String'),1,7)",km(0),km(1),km(2),km(3),sd)
        If dt2.Find(s) Is Nothing Then
            Dim ndr As DataRow = dt2.AddNew
            ndr("所属单位") = km(0)
            ndr("科目编号") = km(1)
            ndr("科目名称") = km(2)
            ndr("部门名称") = km(3)
            ndr("所属日期") = sd
        End If
        sd = sd.AddMonths(1)
    Loop
   
Next

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


加好友 发短信
等级:六尾狐 帖子:1303 积分:10071 威望:0 精华:0 注册:2013/11/8 15:27:00
  发帖心情 Post By:2016/3/14 10:23:00 [只看该作者]

第二种方式OK了,真是太谢谢了

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


加好友 发短信
等级:六尾狐 帖子:1303 积分:10071 威望:0 精华:0 注册:2013/11/8 15:27:00
  发帖心情 Post By:2016/3/15 9:14:00 [只看该作者]

上述代码我放到正式项目里,数据库为SQL server,提示以下错误,哪里需要改的

图片点击可在新窗口打开查看此主题相关图片如下:qq图片20160315091447.png
图片点击可在新窗口打开查看


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


加好友 发短信
等级:狐神 帖子:5015 积分:25363 威望:0 精华:0 注册:2015/8/18 9:21:00
  发帖心情 Post By:2016/3/15 9:20:00 [只看该作者]

到数据库修改表结构,把_Locked列设置为可以为空

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


加好友 发短信
等级:六尾狐 帖子:1303 积分:10071 威望:0 精华:0 注册:2013/11/8 15:27:00
  发帖心情 Post By:2016/3/15 9:31:00 [只看该作者]

数据库那里把_Locked设置成允许为空后,错误是没有了,但代码好象没起作用,点击没反映

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


加好友 发短信
等级:贵宾 帖子:39310 积分:196782 威望:0 精华:1 注册:2015/4/25 9:23:00
  发帖心情 Post By:2016/3/15 9:56:00 [只看该作者]

是不是新增行都有问题?你自己能否新增行并赋值?

 

Dim ndr As DataRow = DataTables("部门损益总账").AddNew
ndr("所属单位") = 1
ndr("科目编号") = 2
ndr("科目名称") = 3
ndr("部门名称") = 4
ndr("所属日期") = Date.today


 回到顶部
总数 41 上一页 1 2 3 4 5 下一页