主题:这个程序复制功能怎么有问题?谢谢您
李静静
[专家分:0] 发布于 2011-07-27 22:42:00
close all
use bb in 0
select bb
go top
do while not eof()
update aa set dwdm=bb.xm where allt(ksh)=allt(bb.ksh) and allt(xm)=allt(bb.xm) and allt(kzx2)<>allt(bb.kzx2)
skip
enddo
bb.dbf和aa.dbf在附件中,可以下载
以上程序是将bb.dbf中的姓名复制到aa.dbf中的dwdm中,但要符合后面的条件。可是我运行之后为什么aa.dbf中没有“刘彪”呢,明明bb.dbf中的kzx2=安徽滨海物业管理公司 而aa.dbf中的kzx2=安徽滨海物业管理 程序的条件都符合啊,为什么结果就不对呢
最后更新于:2011-07-27 23:20:00
回复列表 (共4个回复)
沙发
李静静 [专家分:0] 发布于 2011-07-28 16:54:00
没有人测试过吗?
真的很难解决吗
板凳
alpen [专家分:1140] 发布于 2011-07-29 14:21:00
close all
use bb in 0
select bb
go top
do while not eof()
if bb.kzx2='安徽滨海物业管理公司'
**符合条件是能否找到?
select aa
loca for allt(ksh)=allt(bb.ksh) and allt(xm)=allt(bb.xm) and allt(kzx2)<>allt(bb.kzx2)
if eof()
?'no find'
else
?'find it'
endif
select bb
endif
update aa set dwdm=bb.xm where allt(ksh)=allt(bb.ksh) and allt(xm)=allt(bb.xm) and allt(kzx2)<>allt(bb.kzx2)
select bb
skip
enddo
你自己找为什么结果就不对呢
3 楼
李静静 [专家分:0] 发布于 2011-07-30 23:57:00
楼上
您好,非常感谢您回答http://bbs.pfan.cn/post-372485.html,您的回答只是针对我这里的一条记录啊,如果我有100条记录的dwdm都要复制呢?您这样好像没有什么针对性吧,谢谢。感谢您继续帮忙解决一下,呵呵。
别的朋友若有会的,也请帮忙解决一下啊,谢谢。
4 楼
moz [专家分:37620] 发布于 2011-07-31 09:49:00
1. 你程序里面用的更新语句是SQL语句,跟VFP表的记录位置无关,没有必要使用那些select,go top,skip还有循环.
2. 三个条件里面,最后一个条件是有歧义的,VFP有一个特点,在某些状态下,"ABC"="AB" 是成立的.
[quote]SET ANSI 指定在使用等号操作符(=)的 SQL 命令中,当进行一个 SQL 字符串比较时,是否在较短的字符串后加空格,或当进行一个二进制表达式比较时,是否在二进制表达式中加 0 字节。
SET EXACT 不同于 SET ANSI 命令, SET EXACT 不作用于 Visual FoxPro SQL 命令。[/quote]
3. 在SQL语句里面,函数的使用,会影响执行的效率,应该尽可能的减少函数.
你的程序修改如下:
[quote]SET ANSI ON && 在下面语句里使用了两个等号==,这一句设置可以忽略.
update aa set dwdm=bb.xm from bb where aa.ksh=bb.ksh and aa.xm=bb.xm and !(aa.kzx2==bb.kzx2)[/quote]
我来回复