问题12-VFP中用update语句解决两个表中相同字段的置换问题,请帮忙看一下,谢谢!(100分) (100分)

T

thlt

Unregistered / Unconfirmed
GUEST, unregistred user!
问题12-用update语句解决两个表中相同字段的置换问题,请帮忙看一下,谢谢!(100分)
http://www.delphibbs.com/delphibbs/dispq.asp?lid=2478578
回复 ahthc@163.com

下面这个链接是数据库teac.dbc中的两个表:
http://freehost20.websamba.com/thxlt/biao.jpg
当表teach.dbf 中 [学校代码](字段名xxdm)与表school.dbf中[学校代码](字段名xxdm)
相同时,要求程序自动将后一个表school.dbf中 [学校名称](字段名xxmc)和
[学校性质](字段名xxxz)分别换成前一个表teach.dbf 中的相应字段的值。
要求使用Update语句。以下是源程序,但是其中有一句乱码:
-------------------------------------
LCMSG = ' 正在置换学校名称性质... '
WAIT WINDOW AT SROWS() / 2 + 1 , (SCOLS() - LEN(LCMSG)) / 2 - 15 NOCLEAR NOWAIT LCMSG
SELECT 1
USE ./xxjzgtj/teacher
GO TOP
RYBH0 = RYBH
do
WHILE .NOT. EOF()
IF RYBH > RYBH0
RYBH0 = RYBH
ENDIF
SKIP
ENDDO
RYBH0 = ALLTRIM(RYBH0)
SELECT 2
USE ./xxjzgtj/school
INDEX ON XXDM TO ./xxjzgtj/code0
SELECT 1
INDEX ON XXDM TO ./xxjzgtj/code
I = 1
do
WHILE I < VAL(RYBH0) + 1
II = STR(I / VAL(RYBH0) * 100,3) + '%'
lcMsg = " 正在置换学校名称性质[&amp;ii.]... "
WAIT WINDOW AT SROWS() / 2 + 1 , (SCOLS() - LEN(LCMSG)) / 2 - 15 NOCLEAR NOWAIT LCMSG
SET FILTER TO RYBH = RIGHT('000' - ALLTRIM(STR(I)),3)

//下面这句是乱码:
UPDATE ON XXDM FROM SCHOOL ???EClause[C3] XXMC ???EClause[D1] SCHOOL.XXMC , XZ ;
???EClause[D1] SCHOOL.XZ
I = I + 1
ENDDO
WAIT CLEAR
= MESSAGEBOX(' 已将全部教职工代码库按学校代码库进行名称性质置换! ','提示信息')
CLOSE ALL
THISFORM.RELEASE
------------------------
其中的一句乱码是:
UPDATE ON XXDM FROM SCHOOL ???EClause[C3] XXMC ???EClause[D1] SCHOOL.XXMC , XZ ;
???EClause[D1] SCHOOL.XZ
请问,这句代码的本来面目是什么?
(我附近实在没有这方面的人可以请教,手头也缺少这方面的参考书。)
 
很急的问题,各位高手,这个帖子怎么只有人看没有人回啊?是不是嫌分给少了?可是我的分不多啊!
 
其实这个问题很简单,运行程序看能实现什么功能,看它修改了什么
然后再运行你的(将这句注释掉),和原来的有什么不同,就差不多了
 
VF? Sorry,N年没用它了!
 
VF,我也不懂呀!
 
to WoDing :
看来您是位VFP方面的高手。
我反复修改了N次,都提示语法错误,您能帮助指点一下吗?
求您了!
或给出相关的语法,实现下面的功能:
当表teach.dbf 中 [学校代码](字段名xxdm)与表school.dbf中[学校代码](字段名xxdm)相同时,要求程序自动将后一个表school.dbf中 [学校名称](字段名xxmc)和
[学校性质](字段名xxxz)分别换成前一个表teach.dbf 中的相应字段的值。
 
VF,没用过!
 
我已经帮你问了,等待中.......
 
VFP3.0的帮助,(不能叫收藏,差不多是珍藏了,[:D])
update - sql 命令
示例 请参阅
以新值更新表中的记录。
语法
UPDATE [DatabaseName1!]TableName1
SET Column_Name1 = eExpression1
[, Column_Name2 = eExpression2 ...]
WHERE FilterCondition1 [AND | OR FilterCondition2 ...]]
参数
UPDATE [DatabaseName1!]TableName1
TableName1 指定要更新记录的表。
DatabaseName1 指定包含表的非当前数据库名。如果包含表的数据库不是当前数据库,则应包含这个数据库名。在数据库名称与表名之间有一个感叹号 (!)。
SET Column_Name1 = eExpression1
[, Column_Name2 = eExpression2
指定要更新的列以及这些列的新值。如果省略了 WHERE 子句,在列中的每一行都用相同的值更新。
WHERE FilterCondition1 [AND | OR FilterCondition2 ...]]
指定要更新的记录。
FilterCondition 指定要更新的记录所符合的条件。可以根据需要加入多个筛选条件,条件之间用 AND 或 OR 操作符连接。也可以用 NOT 操作符对逻辑表达式的值取反,或者使用 EMPTY( ) 函数检查字段是否为空。
说明
UPDATE-SQL 命令只能用来更新单个表中的记录。
与 REPLACE 命令不同的是,在更新可共享访问的表中的多个记录时,UPDATE-SQL 命令使用了记录锁。在多用户的情况下,使用记录锁能减少记录竞争,但是可能会降低使用性能。为了达到最好的性能,请以独占使用方式打开表或用 FLOCK( )
函数锁定表。
 
推荐到这里去问:
http://www.programfan.com/club/bbs.asp?bbsid=9
 
to WoDing :
看了你的帖子,我还是一头雾水。
 
update school.学校名称=teach.学校名称, school.学校性质=teach.学校性质
from school a full outer join teach b
on a.学校代码=b.学校代码
看看这样行不行???
 
这样应该可以:
update on xxdm from school repl xxmc with school.xxmc,xz with school.xz
 
感谢大家的帮助,thdsj朋友给的代码编译通过。
 
顶部