请教怎么优化速度 谢谢

adyyadyy 2010-12-10 10:18:12
请教怎样优化下面的代码
现在1分钟运行不到100条
共有8万多条--!!!
另请问:有没有SQL查询分组后,合并非数值型字段的方法?

nxjh=''
Select * FROM k2 INTO CURSOR fk2 READWRITE
Select * FROM k2 INTO CURSOR fk3 READWRITE
Select fk2
DO WHILE !EOF()
locat for EMPTY(ALLTRIM(系统归属))
DO while FOUND()
nxh=ALLTRIM(新号)
Select gsk
locat For ALLTRIM(新号)=nxh
DO while FOUND()
nxjh=nxjh+ALLTRIM(新旧号)+','
continue
enddo
Select fk3
REPLACE 系统归属 WITH nxjh FOR ALLTRIM(新号)=nxh all
nxjh=''
Select fk2
continue
enddo
ENDDO
...全文
320 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
十豆三 2010-12-15
  • 打赏
  • 举报
回复
VFP9.0 以下代码1-2秒

Select Distinct 新号,新旧号 Into Cursor fgsk From gsk Order By 新号
Update k2 Set k2.系统归属=Rtrim(k2.系统归属)+Rtrim(fgsk.新旧号)+',' from fgsk Where Rtrim(k2.新号)==Rtrim(fgsk.新号)
lc_apple 2010-12-15
  • 打赏
  • 举报
回复
[Quote=引用 26 楼 adyyadyy 的回复:]
上传了dbf,怎么没下文了? -_-!!
[/Quote]
你的理想速度是多快??
其实十三豆给你的那个已经很快了!

adyyadyy 2010-12-15
  • 打赏
  • 举报
回复
[Quote=引用 28 楼 apple_8180 的回复:]
VFP9.0 以下代码1-2秒

SQL code
Select Distinct 新号,新旧号 Into Cursor fgsk From gsk Order By 新号
Update k2 Set k2.系统归属=Rtrim(k2.系统归属)+Rtrim(fgsk.新旧号)+',' from fgsk Where Rtrim(k2.新号)==Rtrim(fgsk.新号)
[/Quote]
严重感谢楼上各位,狠严重感谢十豆三老师!
adyyadyy 2010-12-14
  • 打赏
  • 举报
回复
上传了dbf,怎么没下文了? -_-!!
我是小数位 2010-12-13
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 apple_8180 的回复:]
select 备注 from gsk where 新号=dd

改为

select 备注 into cursor t1 from gsk where 新号=dd
[/Quote]修改LOCATE FOR 語句為SEEK,在程序中堅決不要用LOCATE FOR
我是小数位 2010-12-13
  • 打赏
  • 举报
回复
[Quote=引用楼主 adyyadyy 的回复:]
请教怎样优化下面的代码
现在1分钟运行不到100条
共有8万多条--!!!
另请问:有没有SQL查询分组后,合并非数值型字段的方法?

nxjh=''
Select * FROM k2 INTO CURSOR fk2 READWRITE
Select * FROM k2 INTO CURSOR fk3 READWRITE
Select fk2
DO WHILE !EOF()……
[/Quote]我估計80%的時間都在這裡句上面消耗了!建議添加索引,用SEEK語句,一定會快1半以上!
十豆三 2010-12-13
  • 打赏
  • 举报
回复
select 备注 from gsk where 新号=dd

改为

select 备注 into cursor t1 from gsk where 新号=dd
adyyadyy 2010-12-12
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wwwwb 的回复:]
vfp9:
select 新号,hb(新号) as xh into curs dd from a group by 新号 nofi

update b from dd set b.备注=dd.xh where b.新号=dd.新号

function hb(dd)
select 备注 from a where 新号=dd
gg=''
scan
gg=gg+备注
endsc
r……
[/Quote]
按如上改成:
select 新号,hb(新号) as xh into curs dd from gsk group by 新号 nofi

update k2 from dd set k2.备注=dd.xh where b.新号=dd.新号

function hb(dd)
select 备注 from gsk where 新号=dd
gg=''
scan
gg=gg+备注
endsc
retu gg
endfun
运行时每查询一条出现一个查询对话框,还得请教怎么能不显示查询对话框?
xilaianzxsc 2010-12-12
  • 打赏
  • 举报
回复
VFP 9.0 快
xilaianzxsc 2010-12-11
  • 打赏
  • 举报
回复
程序优化是个学问,可以大大提高运行的速度
wwwwb 2010-12-10
  • 打赏
  • 举报
回复
没有,多动手做做才行
上传你的dbf到
www.access911.net/csdn
只要有问题的,用WINRAR压缩
adyyadyy 2010-12-10
  • 打赏
  • 举报
回复
还是不会用啊
还有没有适合初级级别的速度快点方法?
wwwwb 2010-12-10
  • 打赏
  • 举报
回复
看看VFP的HELP吧
adyyadyy 2010-12-10
  • 打赏
  • 举报
回复
我试试 谢谢
adyyadyy 2010-12-10
  • 打赏
  • 举报
回复
select 新号,hb(新号) as xh into curs dd from a group by 新号 nofi

update b from dd set b.备注=dd.xh where b.新号=dd.新号

function hb(dd)
select 备注 from a where 新号=dd
gg=''
scan
gg=gg+备注
endsc
retu gg
endfun

级别太低看不懂啊--!!!!!!!!
wwwwb 2010-12-10
  • 打赏
  • 举报
回复
SQL语句+自定义函数,如4楼代码
adyyadyy 2010-12-10
  • 打赏
  • 举报
回复
备注是字符型

SQL+UDF是什么?
wwwwb 2010-12-10
  • 打赏
  • 举报
回复
vfp9:
select 新号,hb(新号) as xh into curs dd from a group by 新号 nofi

update b from dd set b.备注=dd.xh where b.新号=dd.新号

function hb(dd)
select 备注 from a where 新号=dd
gg=''
scan
gg=gg+备注
endsc
retu gg
endfun
wwwwb 2010-12-10
  • 打赏
  • 举报
回复
用用SQL+UDF的方法解决,备注什么类型?
adyyadyy 2010-12-10
  • 打赏
  • 举报
回复
谢谢
不知这样能说清不--!!!
表a 表b
将表a中 新号 相同的记录的 备注 合并
重写表b中与表a中 新号 相同的记录的 备注 字段

贴中的代码就是完成这个事情的
加载更多回复(9)

2,723

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧