回 帖 发 新 帖 刷新版面

主题:这个程序复制功能怎么有问题?谢谢您

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=安徽滨海物业管理  程序的条件都符合啊,为什么结果就不对呢

回复列表 (共4个回复)

沙发

没有人测试过吗?
真的很难解决吗

板凳


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 楼


楼上
您好,非常感谢您回答http://bbs.pfan.cn/post-372485.html,您的回答只是针对我这里的一条记录啊,如果我有100条记录的dwdm都要复制呢?您这样好像没有什么针对性吧,谢谢。感谢您继续帮忙解决一下,呵呵。

别的朋友若有会的,也请帮忙解决一下啊,谢谢。

4 楼

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]

我来回复

您尚未登录,请登录后再回复。点此登录或注册