根据身份证号自动计算生日和性别的功能,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楼写的代码执行一下,看一下运行的时间
------解决方案--------------------
那你跟踪一下执行哪句代码时比较慢
------解决方案--------------------