当前位置: 代码迷 >> PB >> PB9.0 效率问匙解决思路
  详细解决方案

PB9.0 效率问匙解决思路

热度:16   发布时间:2016-04-29 07:40:47.0
PB9.0 效率问匙
三个表:
1、消费项目表  记录客户所的消费项目
   有2千多条记录

2、客人类型表  记录客户的所有客人类型
   有40多个记录

3、特殊折扣表  存放每个客人类型对第一个可折(消费项目表有表示是否可折的字段isdiscount)消费项目的折扣
   有4万多条记录

现在消费项目表的项目的可折属性改变:增加了可折消费项目,或者将某些可折的消费项目改成不可折。
现在做程序自动调整特殊折扣表的数据,思路是:
1、处理增加了的可折项目
   a、找出在特殊折扣表里没有、而在消费项目里有的可折扣项目,那怕是只有一个客人类型都没有的可折项目;
   b、将这些可折项目分别对每一个客人类型往客类折扣表里插入,已有了的就不插入。
2、处理原来可折,现在不可折了的项目;
   ...

第1种情况的a步骤,系统就不响应了。代码如下,各位大大,我应如何调整思路或代码才能避免这种情况啊?

dw_pricespec.visible    = false
dw_discitem.visible     = false
dw_customertype.visible = false

dw_pricespec.settransobject( sqlca )

dw_discitem.settransobject( sqlca )
dw_discitem.retrieve( )

dw_customertype.settransobject( sqlca )
dw_customertype.retrieve( )

dw_item.settransobject( sqlca )

long ll_loop1,    ll_loop2,       ll_loop3
long ll_itemrows, ll_custyperows, ll_pricerows
long ll_row

ll_itemrows    = dw_discitem.rowcount( )
ll_custyperows = dw_customertype.rowcount( )

string ls_custypeno, ls_itemno

for ll_loop1 = 1 to ll_itemrows
for ll_loop2 = 1 to ll_custyperows
ls_itemno = dw_discitem.getitemstring( ll_loop1, 'v_itemno' )
ls_custypeno = dw_customertype.getitemstring( ll_loop2, 'v_customertypeno' )

ll_pricerows = dw_pricespec.retrieve( ls_custypeno )

   if dw_pricespec.find( "v_itemno = '" + ls_itemno + "'", 1, ll_pricerows ) <= 0 then
   ll_row = dw_item.insertrow( 0 )
dw_item.setitem( ll_row, 'typeno',    dw_discitem.getitemstring( ll_loop1,  'v_itemtypeno' ) )
dw_item.setitem( ll_row, 'subtypeno', dw_discitem.getitemstring( ll_loop1,  'v_subtypeno' ) )
dw_item.setitem( ll_row, 'itemno',    dw_discitem.getitemstring( ll_loop1,  'v_itemno' ) )
dw_item.setitem( ll_row, 'name',      dw_discitem.getitemstring( ll_loop1,  'v_name1' ) )
dw_item.setitem( ll_row, 'unit',      dw_discitem.getitemstring( ll_loop1,  'v_unit' ) )
dw_item.setitem( ll_row, 'price',     dw_discitem.getitemdecimal( ll_loop1, 'n_price' ) )
dw_item.setitem( ll_row, 'priceclub', dw_discitem.getitemdecimal( ll_loop1, 'n_priceclub' ) )
dw_item.setitem( ll_row, 'i_type',    dw_discitem.getitemnumber( ll_loop1,  'i_type' ) )

exit
   end if
next
next



------解决方案--------------------
??!!!!你居然在客户端这样循环?2000*40000,死不了才怪。你的A需求肯定是在 表1 和 表3 外连接之后,然后再在客户端操作啊
  相关解决方案