| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5407 人关注过本帖
标题:联系吹水佬老师
只看楼主 加入收藏
厨师王德榜
Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18
等 级:贵宾
威 望:199
帖 子:989
专家分:4966
注 册:2013-2-16
收藏
得分:0 
回复 10楼 yd1954
看看我发在4楼的代码,应该已经给你解决了.符合条件的是418条记录吧.
2020-04-13 17:53
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册

坚守VFP最后的阵地
2020-04-13 18:24
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
程序代码:
CLOSE DATABASES ALL 
USE 表9 ALIAS b9 IN 0
USE 表10 ALIAS b10 IN 0
SELECT b10
ZAP 
SELECT z59, z60, z61, z62, z63, z64, z65, z66, z67, z68, z69 FROM 表8 WHERE RECNO() = RECCOUNT() INTO ARRAY a8

SELECT b9
SCAN
    SCATTER FIELDS z59, z60, z61, z62, z63, z64, z65, z66, z67, z68, z69 TO a9
    LOCAL a10[1, 14]
    a10 = 0
    a10[1, 1] = h1
    a10[1, 2] = h2
    a10[1, 3] = h3
    ok = 0
    FOR i = 1 TO 11
        IF ASCAN(a9, a8[i]) > 0
            ok = 1
            EXIT 
        ENDIF 
    ENDFOR 
    IF ok = 1
        LOOP 
    ENDIF 
    FOR i = 1 TO 11
        IF a9[i] != a8[i]
            a10[1, i + 3] = a9[i]
        ENDIF 
    ENDFOR 
    INSERT INTO 表10 FROM ARRAY a10
ENDSCAN 
SELECT b10
BROWSE 

坚守VFP最后的阵地
2020-04-13 18:25
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43182
注 册:2014-5-20
收藏
得分:20 
回复 楼主 yd1954
从表9取数放到表10,好像没说清楚表9与表10的数据记录关系,因每次取出的数据记录是不同的。
假设以H1、H2和H3作为表9与表10的数据记录对应关系测试,不知有无理解错,没校对。
图片附件: 游客没有浏览图片的权限,请 登录注册

CREATE CURSOR tt (zs I)
USE 表8 IN 0 ALIAS t8
USE 表9 IN 0 ALIAS t9
USE 表10 IN 0 ALIAS t10
SELECT t10
ZAP
APPEND FROM DBF("t9") FIELDS H1,H2,H3
INDEX on STR(H1,1)+STR(H2,1)+STR(H3,1) TAG h1h2h3
SELECT t8
GO BOTTOM
SCATTER FIELDS z59,z60,z61,z62,z63,z64,z65,z66,z67,z68,z69 TO a8
DIMENSION a8[11,1]
SELECT tt
APPEND FROM ARRAY a8
FOR i=59 TO 69
    cmd = "SELECT H1,H2,H3,z"+TRANSFORM(i)+" FROM t9 WHERE z"+TRANSFORM(i)+" NOT in (SELECT zs FROM tt) INTO CURSOR tmp"
    EXECSCRIPT(cmd)
    SELECT tmp
    SET RELATION TO STR(H1,1)+STR(H2,1)+STR(H3,1) INTO "t10"
    cmd = "REPLACE t10.z"+TRANSFORM(i)+" WITH tmp.z"+TRANSFORM(i)+" ALL"
    EXECSCRIPT(cmd)
    SET RELATION TO
ENDFOR
SELECT * FROM t10
CLOSE DATABASES ALL
RETURN
2020-04-13 21:12
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43182
注 册:2014-5-20
收藏
得分:0 
用 UPDATE - SQL
CREATE CURSOR tt (zs I)
USE 表8 IN 0 ALIAS t8
USE 表9 IN 0 ALIAS t9
USE 表10 IN 0 ALIAS t10
SELECT t10
ZAP
APPEND FROM DBF("t9") FIELDS H1,H2,H3
SELECT t8
GO BOTTOM
SCATTER FIELDS z59,z60,z61,z62,z63,z64,z65,z66,z67,z68,z69 TO a8
DIMENSION a8[11,1]
SELECT tt
APPEND FROM ARRAY a8
FOR i=59 TO 69
    cmd = "SELECT H1,H2,H3,z"+TRANSFORM(i)+" FROM t9 WHERE z"+TRANSFORM(i)+" NOT in (SELECT zs FROM tt) INTO CURSOR tmp"
    EXECSCRIPT(cmd)
    cmd = "UPDATE t10 SET t10.z"+TRANSFORM(i)+"=tmp.z"+TRANSFORM(i)+" FROM tmp WHERE tmp.H1=t10.H1 AND tmp.H2=t10.H2 AND tmp.H3=t10.H3"
    EXECSCRIPT(cmd)
ENDFOR
SELECT * FROM t10
CLOSE DATABASES ALL
RETURN
2020-04-13 21:36
yd1954
Rank: 2
来 自:辽宁沈阳
等 级:论坛游民
帖 子:143
专家分:21
注 册:2016-7-1
收藏
得分:0 
回复 11楼 厨师王德榜
厨师王德榜老师你好!
你写的程序已在VF中运行,很好。有的地方看不懂,今后继续学习。
2020-04-14 10:42
yd1954
Rank: 2
来 自:辽宁沈阳
等 级:论坛游民
帖 子:143
专家分:21
注 册:2016-7-1
收藏
得分:0 
回复 15楼 吹水佬
吹水佬老师,你好!
你的两个程序都看了,有些地方不懂。
运行没有问题,但运行结果不是我想要的。是我没说清楚。
不等于的保留,等于的就应删除,因此运行结果应少于1000行。
sdta,厨师王德榜2位的程序运行后是418行。
再次感谢老师的帮助!
以后有问题还要请教老师。
2020-04-14 10:51
yd1954
Rank: 2
来 自:辽宁沈阳
等 级:论坛游民
帖 子:143
专家分:21
注 册:2016-7-1
收藏
得分:0 
回复 14楼 吹水佬
吹水佬老师,你好!
你写的2个程序都看了,有一些地方看不懂。
程序运行没有问题,但结果不是我想要的。是我没有说清楚。
不等于的保留,等于的删除,因此结果应少于1000行。
sdta,厨师王德榜,两位的程序运行后是418行。
非常感谢老师的多次帮助。以后有问题还要请教老师。
2020-04-14 11:07
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43182
注 册:2014-5-20
收藏
得分:0 
回复 17楼 yd1954
我是不等的保留,相等的请空。
或者我理解错了,有点不明?
假如表9同一记录的z59相等而z60不等,当比对z59时删除这条记录,是不是会漏掉z60不等这记录?
2020-04-14 12:57
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3147
专家分:8408
注 册:2015-3-25
收藏
得分:20 
回复 18楼 yd1954
* 利用楼2的思路
程序代码:
CLOSE DATABASES 
USE 表8 ALIAS B8 IN 0
USE 表9 ALIAS B9 IN 0
USE 表10 ALIAS B10 IN 0

*!* 查找动态比对参数
SELECT t0.Qihao,z59,z60,z61,z62,z63,z64,z65,z66,z67,z68,z69 FROM B8 AS t0 ;
RIGHT JOIN (SELECT NVL(MAX(Qihao),0) as Qihao FROM B8) AS  t1 ON t0.Qihao=t1.Qihao ;
INTO ARRAY a8

*!* 拼接动态比对条件
LOCAL s1,ii
s1=TRANSFORM(a8[1,2])
FOR ii=3 TO 12
    s1 = s1 + "," + TRANSFORM(a8[1,ii])
ENDFOR

*!* 查询过滤新数据
SELECT H1,H2,H3,z59,z60,z61,z62,z63,z64,z65,z66,z67,z68,z69 FROM b9 WHERE ;

 !INLIST(z59,&s1) AND ;

 !INLIST(z60,&s1) AND ;

 !INLIST(z61,&s1) AND ;

 !INLIST(z62,&s1) AND ;

 !INLIST(z63,&s1) AND ;

 !INLIST(z64,&s1) AND ;

 !INLIST(z65,&s1) AND ;

 !INLIST(z66,&s1) AND ;

 !INLIST(z67,&s1) AND ;

 !INLIST(z68,&s1) AND ;

 !INLIST(z69,&s1) INTO ARRAY a9

*!* 生成新的表10数据
SELECT b10
ZAP 
APPEND FROM ARRAY a9
BROWSE
2020-04-14 13:28
快速回复:联系吹水佬老师
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.039937 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved