以文本方式查看主题

-  Foxtable(狐表)  (http://www.foxtable.com/bbs/index.asp)
--  专家坐堂  (http://www.foxtable.com/bbs/list.asp?boardid=2)
----  [求助]父表与子表不能同步加载(已解决)  (http://www.foxtable.com/bbs/dispbbs.asp?boardid=2&id=14057)

--  作者:yyzlxc
--  发布时间:2011/11/6 20:10:00
--  [求助]父表与子表不能同步加载(已解决)

根据帮助中的父表与子表同步加载案例,如果要求根据"订单"表"订单ID""单位"两个条件对"订单明细"表进行同步加载,以下代码应该如何修改,请各位老师帮助指教,谢谢!!

 

If DataTables("订单").DataRows.Count = 0 Then \'如果订单表没有数据
    DataTables("订单明细").LoadFilter = "订单ID Is Null" \'不加载订单明细
Else
    Dim ids As String
    For Each dr As DataRow In DataTables("订单").DataRows
        ids = ids & "," & dr("订单ID")
    Next
    ids= ids.Trim(",")
    DataTables("订单明细").LoadFilter = "订单ID In (" & ids & ")"
End If
DataTables("订单明细").Load()

[此贴子已经被作者于2011-11-8 8:02:53编辑过]

--  作者:狐狸爸爸
--  发布时间:2011/11/6 20:11:00
--  
没有办法。
--  作者:yyzlxc
--  发布时间:2011/11/6 20:18:00
--  
这就惨了,明细表每个月要增加3000多条数据,全部加载简直是个灾难,狐爸老师,能否考虑采取其他方法来解决?谢谢狐爸老师的回复!!
--  作者:狐狸爸爸
--  发布时间:2011/11/6 20:20:00
--  

呵呵,一个订单的订单明细,和一个月的订单明细有什么关系?

一个订单会有3000个明细?

也许你的设计有问题,或许你的理解有问题。

 


--  作者:yyzlxc
--  发布时间:2011/11/6 20:47:00
--  

我只是打个比方,实际情况是共20多个单位,每个单位100多个员工,每个月3000多条数据,一年就是近4万条数据,如果五年的数据就是20万,太恐怖了。

现在的方案是,每次只加载一个月的数据,也就是3000来条,应该问题不大,再次谢谢狐爸老师。


--  作者:yyzlxc
--  发布时间:2011/11/6 21:41:00
--  

代码好像有点问题,报酬明细表不能加载,不知问题在哪里,请各位老师指教,谢谢!!

 

 


[此贴子已经被作者于2011-11-6 22:04:48编辑过]

--  作者:狐狸爸爸
--  发布时间:2011/11/6 21:57:00
--  

表达式的日期应该用#可以起来:

 

If DataTables("数据汇总").DataRows.Count = 0 Then \'如果订单表没有数据
    DataTables("报酬明细").LoadFilter = "日期 Is Null" \'不加载订单明细
Else
    Dim ids As String
    For Each dr As DataRow In DataTables("数据汇总").DataRows
        If ids > "" Then
            ids= ids & ","
        End If
        ids = ids & "#" & dr("日期") & "#"
    Next
    DataTables("报酬明细").LoadFilter = "日期 In (" & ids & ")"
End If
DataTables("报酬明细").Load()

 


--  作者:yyzlxc
--  发布时间:2011/11/6 22:03:00
--  
谢谢狐爸老师,代码运行正常。再次感谢!!
--  作者:yyzlxc
--  发布时间:2011/11/7 10:17:00
--  

狐爸老师,上述代码用在内部数据源,运行正常,但是在外部数据源(SQL)的条件下出错,将"#"号去掉,又不能加载明细表,代码应该如何修改?望指教,谢谢!!

 

 If DataTables("数据汇总").DataRows.Count = 0 Then \'如果订单表没有数据
    DataTables("报酬明细").LoadFilter = "日期 Is Null" \'不加载订单明细
Else
    Dim ids As String
    For Each dr As DataRow In DataTables("数据汇总").DataRows
        If ids > "" Then
            ids= ids & ","
        End If
        ids = ids & "#" & dr("日期") & "#"
    Next
    DataTables("报酬明细").LoadFilter = "日期 In (" & ids & ")"
End If
DataTables("报酬明细").Load()

 


图片点击可在新窗口打开查看此主题相关图片如下:s.png
图片点击可在新窗口打开查看
[此贴子已经被作者于2011-11-7 10:19:33编辑过]

--  作者:狐狸爸爸
--  发布时间:2011/11/7 14:26:00
--  
如果数据源是SQl SERVER,日期常量用单引号而不是#号括起来,例如:
SELECT * FROM {订单} WHERE 日期 >= \'1/1/1999\' AND 日期 <= \'1/31/1999\'
如果是Oracle的数据源,必须用TO_DATE函数转换,例如加载1999年10月21日的订单:
SELECT * FROM {订单} WHERE 日期 = TO_DATE(\'10/21/1999\',\'MM/DD/YYYY\')