首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > PB >

遇到个纠结的有关问题,行数多了(六七百行)速度很慢,按理说与行数没关系的

2012-02-23 
遇到个纠结的问题,行数多了(六七百行)速度很慢,按理说与行数没关系的根据身份证号自动计算生日和性别的功

遇到个纠结的问题,行数多了(六七百行)速度很慢,按理说与行数没关系的
根据身份证号自动计算生日和性别的功能,dw的 itemchanged事件,
行数多了(六七百条)速度很慢,要六七秒的时间,多一百条数据就多一秒钟,如果是指几十行数据就感觉不出来。按理说与数据条数是没关系的,以下是源码, 大家帮忙看看,也不是很高深的问题:

VB code
case "身份证号"        //this.acceptText ()        setPointer(HourGlass!)        string    ls_data        string    ls_xb //性别        datetime ldt_bir //生日        ls_data = trim(data)        if  len(trim(ls_data)) <> 18 and  len(trim(ls_data)) <> 15 then            messageBox ('提示', '身份证号必须为18位或15位', stopSign!)            return        end if        //wf_cal_idcar (row ,data)    //自动计算生日,性别                choose case len(ls_data)             case    18                ls_temp = mid(ls_data, 7, 4) + '-' + mid(ls_data, 11, 2) + '-' + mid(ls_data, 13, 2)                 ldt_bir = datetime (date(ls_temp))                            if mod(long(mid(ls_data, 17, 1)),2) =1 then                     ls_xb =  '男'                else                    ls_xb =  '女'                end if            case    15                 ls_temp = mid(ls_data, 7, 2) + '-' + mid(ls_data, 9, 2) + '-' + mid(ls_data, 11, 2)                 ldt_bir = datetime (date(ls_temp))                //messageBox (ls_temp, string(ldt_bir) )        end choose            setItem (row, '出生日期', ldt_bir)        setITem(row, '性别', ls_xb)


[解决办法]
问题不是出在这儿,把你的QQ贴上来,帮你远程看一下,应该是rowfocuschanged之类的地方重复调用了一些代码
[解决办法]
case "身份证号"
//在这个位置记录一下cpu
long ll_cpu
ll_cpu = cpu()
//this.acceptText ()
setPointer(HourGlass!)
string ls_data
string ls_xb //性别
datetime ldt_bir //生日
ls_data = trim(data)
if len(trim(ls_data)) <> 18 and len(trim(ls_data)) <> 15 then
messageBox ('提示', '身份证号必须为18位或15位', stopSign!)
return
end if
//wf_cal_idcar (row ,data) //自动计算生日,性别

choose case len(ls_data) 
case 18
ls_temp = mid(ls_data, 7, 4) + '-' + mid(ls_data, 11, 2) + '-' + mid(ls_data, 13, 2) 
ldt_bir = datetime (date(ls_temp))
if mod(long(mid(ls_data, 17, 1)),2) =1 then 
ls_xb = '男'
else
ls_xb = '女'
end if
case 15 
ls_temp = mid(ls_data, 7, 2) + '-' + mid(ls_data, 9, 2) + '-' + mid(ls_data, 11, 2) 
ldt_bir = datetime (date(ls_temp))
//messageBox (ls_temp, string(ldt_bir) )
end choose
setItem (row, '出生日期', ldt_bir)
setITem(row, '性别', ls_xb)

//在这个位置看一下执行的时间(毫秒)
messagebox('', cpu() - ll_cpu)
[解决办法]
这个确实不会影响,影响的肯定是其他的,你试着把这段代码写成
case "身份证号"
string ls
ls = ''

看看,速度如何
[解决办法]
应该不是这段代码造成速度慢!
[解决办法]
你最好设置断点调试一下,这样更容易找出慢在哪里
按你这种说法,肯定有哪个地方的代码需要遍历到所有行
[解决办法]
你把我在3楼写的代码执行一下,看一下运行的时间
[解决办法]
那你跟踪一下执行哪句代码时比较慢
[解决办法]
探讨


那你跟踪一下执行哪句代码时比较慢


[解决办法]
dw中有没有什么计算列运算量比较大的
[解决办法]
应该是计算列的问题
[解决办法]
探讨
引用:
dw中有没有什么计算列运算量比较大的


只有年龄是根据日期自动计算,不过这是在后台sql中计算的,这时没有保存数据,所以也不会有影响

[解决办法]
应该还是执行了其它的代码,把数据窗口删除掉,重新加一个,除了itemchanged事件不要写任何代码,再试


如果还不行,把dataobject重新画一下,不要任何计算列,再试一下


-------------------------------------

如果和setItem (row, '出生日期', ldt_bir)有关的话,应该是窗口里引用了个计算列,如显示年龄之类的,你仔细找找
[解决办法]
探讨
引用:
应该是计算列的问题

郁闷了, 我把代码复制到另一个软件里运行,几千条数据,cpu间隔时间为零,很正常

dw中也没有计算列

热点排行