遇到个纠结的问题,行数多了(六七百行)速度很慢,按理说与行数没关系的根据身份证号自动计算生日和性别的功
遇到个纠结的问题,行数多了(六七百行)速度很慢,按理说与行数没关系的
根据身份证号自动计算生日和性别的功能,dw的 itemchanged事件,
行数多了(六七百条)速度很慢,要六七秒的时间,多一百条数据就多一秒钟,如果是指几十行数据就感觉不出来。按理说与数据条数是没关系的,以下是源码, 大家帮忙看看,也不是很高深的问题:
VB codecase "身份证号" //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中有没有什么计算列运算量比较大的
[解决办法]应该是计算列的问题
[解决办法][解决办法]应该还是执行了其它的代码,把数据窗口删除掉,重新加一个,除了itemchanged事件不要写任何代码,再试
如果还不行,把dataobject重新画一下,不要任何计算列,再试一下
-------------------------------------
如果和setItem (row, '出生日期', ldt_bir)有关的话,应该是窗口里引用了个计算列,如显示年龄之类的,你仔细找找
[解决办法]