[提问]字段替换的问题!!!

cuilei9999 2005-09-13 04:14:44
各位大虾:

小弟有一个 vf 问题,希望帮助解决。

就是想实现两个库之间的字段替换,比如,

A库中有4个字段,a1,a2,a3,a4;B库中也有4个字段b1,b2,b3,b4;

我想把B库中的一个字段例如b3,替换到A库中的a3字段上,

条件是b1中的记录内容等于a1中的记录内容就替换,不等就不换,

怎么实现阿,谢谢指导!!!
...全文
317 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
cuilei9999 2005-09-15
  • 打赏
  • 举报
回复
use 22

SCAN

UPDATE 11 SET 11.yxdm=22.kzx3 WHERE 11.ksh=22.ksh

ENDSCAN

有问题吗,我没看出来啊,和路径有关吗,我把VF库和程序放在一起了可以把!!!!

郁闷!!!
rayhua 2005-09-15
  • 打赏
  • 举报
回复
我的也是VF6.0啊,运行下面程序一切正常啊,你再试试
select 1
use A表
select 2
use B表
SCAN
UPDATE A表 SET A.A3=B.B3 WHERE A.A1=B.B1
ENDSCAN
zsjiaming 2005-09-14
  • 打赏
  • 举报
回复

* testupdate2.prg
* 这次表名用的不是变量.和上面的写法不同
*
* 不使用变量,直接用表名
* 这里表1用aaa 表2用bbb
*

CREATE CURSOR aaa ( aa1 c(10),aa2 n(10)) &&生成测试用表aaa,只建立二个字段aa1,aa2
CREATE CURSOR bbb ( bb1 c(10),bb2 n(10)) &&生成测试用表bbb,只建立二个字段bb1,bb2

* 每个表加入20个记录
FOR i=1 TO 20
if i<11 && 前10个记录中表 aaa 的aa2字段 和表bbb的 BB2字段 是相同,都是i+100
INSERT INTO aaa (aa1,aa2) VALUES ("aa"+STR(i,2),i+100)
INSERT INTO bbb (bb1,bb2) VALUES ("bb"+STR(i,2),i+100)
else && 后10个记录中表 aaa 的aa2字段 和表bbb的 BB2字段 是不相同.
INSERT INTO aaa (aa1,aa2) VALUES ("aa"+STR(i,2),i+200)
INSERT INTO bbb (bb1,bb2) VALUES ("bb"+STR(i,2),i+100)
endif
ENDFOR


select aaa
go top
BROW && 看表aaa的原来的内容
&& 可以看到字段aa1的内容是 aa 1....aa20

SELECT bbb
SCAN
UPDATE aaa SET aaa.aa1=bbb.bb1 WHERE aaa.aa2==bbb.bb2
ENDSCAN

SELECT aaa
GO TOP
BROWSE &&看看表A替换后的内容
&& 可以看到字段aa1的内容是 bb1 1....bb10 aa11...aa20 (前十个已经换了)

&&关闭释放临时表...
use in aaa
use in bbb
zsjiaming 2005-09-14
  • 打赏
  • 举报
回复
update sql语句是可以在VFP6.0下使用.
"语法错误"极可能是你用了变量..注意写法.下面二个用变量和非变量测试UPDATE SQL在VFP6的使用

*testupdate2.prg
local dbf_a,dbf_b,i

dbf_a="aaa" && 表A的名称"testa" 这里用变量dbf_a
dbf_b="bbb" && 表B的名称"testb" 这里用变量dbf_a

CREATE CURSOR (dbf_a) ( aa1 c(10),aa2 n(10)) &&生成测试用表A,只建立二个字段aa1,aa2
CREATE CURSOR (dbf_b) ( bb1 c(10),bb2 n(10)) &&生成测试用表B,只建立二个字段bb1,bb2

FOR i=1 TO 20 &&每个表加入20个记录
if i<11 && 前10个记录中表A的aa2字段和表B的BB2字段是相同,都是i+100
INSERT INTO (dbf_a) (aa1,aa2) VALUES ("aa"+STR(i,2),i+100)
INSERT INTO (dbf_b) (bb1,bb2) VALUES ("bb"+STR(i,2),i+100)
else && 后10个记录中表A的aa2字段和表B的BB2字段是不相同.
INSERT INTO (dbf_a) (aa1,aa2) VALUES ("aa"+STR(i,2),i+200)
INSERT INTO (dbf_b) (bb1,bb2) VALUES ("bb"+STR(i,2),i+100)
endif
ENDFOR


sele(dbf_a)
go top
BROW && 看表A的原来的内容
&& 可以看到字段aa1的内容是 aa 1....aa20

SELECT(dbf_b)
SCAN
UPDATE (dbf_a) SET &dbf_a..aa1=&dbf_b..bb1 WHERE &dbf_a..aa2==&dbf_b..bb2
ENDSCAN

SELECT(dbf_a)
GO TOP
BROWSE &&看看表A替换后的内容
&& 可以看到字段aa1的内容是 bb1 1....bb10 aa11...aa20 (前十个已经换了)

&&关闭释放临时表...
use in (dbf_a)
use in (dbf_b)
lxzm1001 2005-09-14
  • 打赏
  • 举报
回复
对不起啊,要是用mssql应该是对的,可是vf我就不知道了
cuilei9999 2005-09-14
  • 打赏
  • 举报
回复
谢谢各位了,我照着做了一下,但是没成功,说

UPDATE A表 SET A表.A3=B表.B3 WHERE A表.A1=B表.B1

这行“语法错误”,不会阿,我看也没问题啊,不知道怎么回事??

我用的VF6!!
十豆三 2005-09-14
  • 打赏
  • 举报
回复
新建一个程序(PRG),内容如下:
***************
USE B表
SCAN
UPDATE A表 SET A表.A3=B表.B3 WHERE A表.A1=B表.B1
ENDSCAN
***************
保存!
然后在命令窗口运行:
DO 程序名
就可以了。
rayhua 2005-09-14
  • 打赏
  • 举报
回复
对上面的程序改正如下:
新建一个程序,内容如下:
select 1
use A表
select 2
use B表
SCAN
UPDATE A表 SET A表.A3=B表.B3 WHERE A表.A1=B表.B1
ENDSCAN
rayhua 2005-09-14
  • 打赏
  • 举报
回复
因为上面的代码里有循环语句,而循环语句不能在命令窗口直接使用,所以必须要写在程序里才行。
rayhua 2005-09-14
  • 打赏
  • 举报
回复
新建一个程序,内容如下:
select 1
use A表
select 2
use B表
SCAN
UPDATE A表 SET A.A3=B.B3 WHERE A.A1=B.B1
ENDSCAN
然后运行该程序就OK了。
cuilei9999 2005-09-13
  • 打赏
  • 举报
回复
我用的是VF6,能在命令窗口中实现吗??
上面的好像不行啊!
十豆三 2005-09-13
  • 打赏
  • 举报
回复
如果是VFP9:
UPDATE A表 SET A表.A3=B表.B3 FROM B表 WHERE A表.A1=B表.B1


如果是VFP9以下
USE B表
SCAN
UPDATE A表 SET A表.A3=B表.B3 WHERE A表.A1=B表.B1
ENDSCAN

2,723

社区成员

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

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