Foxtable(狐表)用户栏目专家坐堂 → [求助]drawcell中效率太低了 有没有别的办法啊


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

主题:[求助]drawcell中效率太低了 有没有别的办法啊

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


加好友 发短信
等级:三尾狐 帖子:713 积分:5196 威望:0 精华:0 注册:2012/4/13 13:10:00
[求助]drawcell中效率太低了 有没有别的办法啊  发帖心情 Post By:2014/5/15 12:06:00 [显示全部帖子]

Dim cmd As new SQLCommand
cmd.ConnectionName -- ""
If e.Row("Status") = "采购中" Then
    cmd.CommandText = "SELECT DISTINCT OrderNumber from {Purchase_Orders} where OrderNumber = '" & e.Row("OrderNumber") & "'and (select sum(Quantity) from {IQC_Details} where Identify = {Purchase_Orders}.[_Identify]) - (select sum(StorageQty) from {IQC_Details} where Identify = {Purchase_Orders}.[_Identify]) > 0 And DATEDIFF(day,GETDATE(),{Purchase_Orders}.DeliveryDate) <= 3 And DATEDIFF(day,GETDATE(),{Purchase_Orders}.DeliveryDate) >= 0"
    If cmd.ExecuteScalar IsNot Nothing Then
        e.Style = "timequick"
    End If
    cmd.CommandText = "SELECT DISTINCT OrderNumber from {Purchase_Orders} where OrderNumber = '" & e.Row("OrderNumber") & "'and (select sum(Quantity) from {IQC_Details} where Identify = {Purchase_Orders}.[_Identify]) - (select sum(StorageQty) from {IQC_Details} where Identify = {Purchase_Orders}.[_Identify]) > 0 And DATEDIFF(day,GETDATE(),{Purchase_Orders}.DeliveryDate) < 0 "
    If cmd.ExecuteScalar IsNot Nothing Then
        e.Style = "timeout"
    End If
End If


这些写在drawcell事件里 效率太低了 有没有别的方法弄颜色上去啊

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


加好友 发短信
等级:三尾狐 帖子:713 积分:5196 威望:0 精华:0 注册:2012/4/13 13:10:00
  发帖心情 Post By:2014/5/15 13:20:00 [显示全部帖子]

以下是引用Bin在2014-5-15 12:14:00的发言:
你居然在DrAWCELl做这样的操作,不卡才怪了

你的需求是什么,说一下.看看有什么好方案没

 

在订单表中状态为“采购中”的订单, 并且对应的订单明细表中排除该笔订单明细中已经到货的,只要有一项的预计到货日期和今天日期差3天以内, 将订单表中标记一个颜色,如果已经超过今天的日期并且未到货,那就标记另外一个颜色

 

BIN 大哥 看来还得做个辅助列是吧? 把cmd.CommandText 中的内容做为一个辅助列估计就可以了吧


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


加好友 发短信
等级:三尾狐 帖子:713 积分:5196 威望:0 精华:0 注册:2012/4/13 13:10:00
  发帖心情 Post By:2014/5/15 13:20:00 [显示全部帖子]

以下是引用jspta在2014-5-15 12:30:00的发言:
   cmd.CommandText = "SELECT DISTINCT OrderNumber from {Purchase_Orders} where OrderNumber = '" & e.Row("OrderNumber") & "'and (select sum(Quantity) from {IQC_Details} where Identify = {Purchase_Orders}.[_Identify]) - (select sum(StorageQty) from {IQC_Details} where Identify = {Purchase_Orders}.[_Identify]) > 0 And DATEDIFF(day,GETDATE(),{Purchase_Orders}.DeliveryDate) <= 3 And DATEDIFF(day,GETDATE(),{Purchase_Orders}.DeliveryDate) >= 0"
    If cmd.ExecuteScalar IsNot Nothing Then

用一个全局表进行代替。把相关数据全部加载,然后引用这个表,这个效率应该还能接受

 

还是做一个辅助列吧 估计就可以了


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


加好友 发短信
等级:三尾狐 帖子:713 积分:5196 威望:0 精华:0 注册:2012/4/13 13:10:00
  发帖心情 Post By:2014/5/15 16:18:00 [显示全部帖子]

Select _Identify,OrderNumber,OrderDate,Supplier,InvoiceNumber,InvoiceDate,UserName,Status,
(Select DISTINCT OrderNumber from Purchase_Orders b where (Select Status from Purchase_List where OrderNumber = b.OrderNumber) = '采购中' 
and b.Quantity - (select sum(Quantity) from IQC_Details where Identify = b._Identify) > 0 
And DATEDIFF(day,GETDATE(),b.DeliveryDate) between 0 and 3) as 辅助
from Purchase_List a

这样做辅助列 辅助列里居然没数据,是不是哪里写错了啊 求帮忙看看

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


加好友 发短信
等级:三尾狐 帖子:713 积分:5196 威望:0 精华:0 注册:2012/4/13 13:10:00
  发帖心情 Post By:2014/5/15 16:44:00 [显示全部帖子]

以下是引用有点甜在2014-5-15 16:27:00的发言:

额,哪有这样写代码的?辅助列的值是不是只有空和非空两种?

 

Select _Identify,OrderNumber,OrderDate,Supplier,InvoiceNumber,InvoiceDate,UserName,Status,
((Select top 1 OrderNumber from Purchase_Orders b where (Select Status from Purchase_List where OrderNumber = b.OrderNumber) = '采购中' 
and b.Quantity - (select sum(Quantity) from IQC_Details where Identify = b._Identify) > 0 
And DATEDIFF(day,GETDATE(),b.DeliveryDate) between 0 and 3)  is null) as 辅助
from Purchase_List a

 

甜总,

辅助列到时候就为了判断空和非空

加了 is null 会报错,关键字 is 附近有语法错误,去掉is null 后辅助列还是没有数据

 


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


加好友 发短信
等级:三尾狐 帖子:713 积分:5196 威望:0 精华:0 注册:2012/4/13 13:10:00
  发帖心情 Post By:2014/5/15 17:32:00 [显示全部帖子]

以下是引用有点甜在2014-5-15 16:53:00的发言:

 那试试这样改,再不行,就上传例子

 

Select _Identify,OrderNumber,OrderDate,Supplier,InvoiceNumber,InvoiceDate,UserName,Status,
(Select top 1 OrderNumber is null from Purchase_Orders b where (Select Status from Purchase_List where OrderNumber = b.OrderNumber) = '采购中' 
and b.Quantity - (select sum(Quantity) from IQC_Details where Identify = b._Identify) > 0 
And DATEDIFF(day,GETDATE(),b.DeliveryDate) between 0 and 3) as 辅助
from Purchase_List a

 

 

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

 

做了个简单例子

 

窗口表中加载表A时 增加辅助列,

表A相当于父表,表B相当于子表,

要求表A中对应的子表表B中的数据在表C中的数量作比较,如果表B中的数量>表C中的数量,同时,表B的日期又刚好和今天日期相差3天时,表A的辅助列就填充上内容

 

请领导帮忙看看 非常感谢


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


加好友 发短信
等级:三尾狐 帖子:713 积分:5196 威望:0 精华:0 注册:2012/4/13 13:10:00
  发帖心情 Post By:2014/5/16 8:41:00 [显示全部帖子]

以下是引用有点甜在2014-5-15 18:07:00的发言:

 呃,你表里面的数据就是查不到对应值的才对啊。

 

 代码,如下

 

Select [_Identify],订单号,(Select DISTINCT 订单号 from {表B} where {表a}.订单号 = {表B}.订单号 and {表B}.数量 - (Select sum(数量) from {表C} where ID = {表B}.[_Identify]) > 0 And DATEDIFF("d",now(),{表B}.日期) between 0 And 3) As 辅助 from {表A}

 

 

改了下日期 可以正常显示了,但是想不通项目中为何不行!纳闷了啊!!!!思路一模一样的

 

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


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


加好友 发短信
等级:三尾狐 帖子:713 积分:5196 威望:0 精华:0 注册:2012/4/13 13:10:00
  发帖心情 Post By:2014/5/16 9:19:00 [显示全部帖子]

select [_Identify],OrderNumber,OrderDate,Supplier,InvoiceNumber,InvoiceDate,UserName,Status,(Select DISTINCT OrderNumber from {Purchase_Orders} where {Purchase_Orders}.OrderNumber = {Purchase_List}.OrderNumber And (Select Status from {Purchase_List} where OrderNumber = {Purchase_Orders}.OrderNumber) = '采购中' and {Purchase_Orders}.Quantity - isnull((select sum(Quantity) from {IQC_Details} where Identify = {Purchase_Orders}.[_Identify]),0) > 0 And DATEDIFF("d",GETDATE(),{Purchase_Orders}.DeliveryDate) between 0 And 3) As day1,(Select DISTINCT OrderNumber from {Purchase_Orders} where {Purchase_Orders}.OrderNumber = {Purchase_List}.OrderNumber And (Select Status from {Purchase_List} where OrderNumber = {Purchase_Orders}.OrderNumber) = '采购中' and {Purchase_Orders}.Quantity - isnull((select sum(Quantity) from {IQC_Details} where Identify = {Purchase_Orders}.[_Identify]),0) > 0 And DATEDIFF("d",GETDATE(),{Purchase_Orders}.DeliveryDate) < 0) As day2 from {Purchase_List}

 

问题已解决


 回到顶部