标题:请教搜索无重复的行
只看楼主
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
也就是说,1-100这100个数据是放在100个单元格中的。
假如现在已经有9行不重复的记录,如果后面任意一行的记录中那怕只有一个数据与前面9行记录的数据中任意一个数据相等,那么被比较的这行数据与前面9行数据即为重复数据。
所以不出现不重复行的概率,与每条记录的排列顺序有很大关系。
我把吹版代码生成的结果与我的代码生成的结果做了比对,结果完全一样。

[此贴子已经被作者于2018-7-23 19:43编辑过]


坚守VFP最后的阵地
2018-07-23 19:40
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
回复 30楼 fdxxhjc
记录位置的改变对最后结果的影响是很大的。

坚守VFP最后的阵地
2018-07-23 19:45
fdxxhjc
Rank: 1
等 级:新手上路
帖 子:305
专家分:0
注 册:2014-4-10
得分:0 
回复 32楼 sdta
请问先生,我这个
“是的,像这块中的第一行就是原表中的第一行,当这个第一行不管放在何处的情况下,一旦遇到以这行为标准的情况下他总可再次分别遇到这“10行”块中的各行,也就应该至少存在这样的“一块”吧”
这段的想法正确吗
2018-07-23 19:46
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:0 
每个人的理解是不同的,我还是坚持自己的观点。你有我的QQ,如果方便的话可以通过语音交流的方法来沟通。

坚守VFP最后的阵地
2018-07-23 20:15
fdxxhjc
Rank: 1
等 级:新手上路
帖 子:305
专家分:0
注 册:2014-4-10
得分:0 
回复 34楼 sdta
先生太好了,谢谢,但您的QQ号我查不到,可否发个于我,谢谢
2018-07-23 20:21
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:432
帖 子:10064
专家分:41463
注 册:2014-5-20
得分:0 
以下是引用fdxxhjc在2018-7-23 19:46:59的发言:

请问先生,我这个
“是的,像这块中的第一行就是原表中的第一行,当这个第一行不管放在何处的情况下,一旦遇到以这行为标准的情况下他总可再次分别遇到这“10行”块中的各行,也就应该至少存在这样的“一块”吧”
这段的想法正确吗

试了一下,好象是不一定的。
用第1行与312行调换,第312行调换前有“10行”块,调换后就只有“4行”块。
调换前

调换后

测试代码:
USE 原表 ALIAS 原表 IN 0
USE 比较后 ALIAS 比较后 IN 0
SELECT 比较后
ZAP
SELECT * FROM 比较后 INTO CURSOR tmp_比较后 READWRITE
FOR nRecno=1 TO RECCOUNT("原表")
    SELECT 原表
    GO nRecno
    DIMENSION arr[1]
    SCATTER TO arr
    GO TOP
    INSERT INTO tmp_比较后 FROM ARRAY arr
    SCAN FOR RECNO()!=nRecno
        SCATTER TO arr_recno
        n = ALEN(arr)+10
        DIMENSION arr_tmp[n]
        ACOPY(arr, arr_tmp)
        ACOPY(arr_recno, arr_tmp, 1, -1, n-9)
        ASORT(arr_tmp)
        ai = arr_tmp[1]
        FOR i=2 TO n
            IF arr_tmp[i]==ai
                EXIT
            ELSE
                ai = arr_tmp[i]
            ENDIF
        ENDFOR
        IF i > n
            DIMENSION arr[n]
            ACOPY(arr_recno, arr, 1, -1, n-9)
            INSERT INTO tmp_比较后 FROM ARRAY arr_recno
            REPLACE 循环记录 WITH "  第"+TRANSFORM(RECNO("原表"))+"条" IN "tmp_比较后"
        ENDIF
    ENDSCAN
    GO TOP IN "tmp_比较后"
    REPLACE 循环记录 WITH "以第"+TRANSFORM(nRecno)+"为准,有"+TRANSFORM(RECCOUNT("tmp_比较后"))+"条" IN "tmp_比较后"
    INSERT INTO 比较后 SELECT * FROM tmp_比较后
    SELECT tmp_比较后
    ZAP
ENDFOR
SELECT * FROM 比较后
2018-07-24 09:23
yh1966
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2018-7-16
得分:0 
回复 3楼 sdta
页面2 init:
select fjpb01
*!*    选择激活上述表的工作区
*!*    set order to 一批号   && 一批号
go bottom

set multilocks on
*!*    设置成可以进行多个记录锁定的配置
=cursorsetprop("buffering",3)
*!*    设置缓冲区环境为3,即表示行缓冲设定,即指针所指的那个记录,即只是一个记录
thisform.Refresh

命令按钮组中保存按钮的:click

CASE this.Value=3

    cmessagetext="确定要保存吗?"
    ndialogboxtype=4+32+0
    ctitlebartext="信息窗口"
    nanswer=messagebox(cmessagetext,ndialogboxtype,ctitlebartext)
    do case
    case  nanswer=6
   
    gh=0
    ph=0
    jzdh=0
    xmph=0
    mpph=0
    jzrq=""   
    gh=thisform.pageframe1.page1.pageframe1.page2.一罐号1.value
    ph=thisform.pageframe1.page1.pageframe1.page2.一批号1.value
    jzdh=thisform.pageframe1.page1.pageframe1.page2.菌种代号1.value
    xmph=thisform.pageframe1.page1.pageframe1.page2.斜面批号1.value
    mpph=thisform.pageframe1.page1.pageframe1.page2.母瓶批号1.value
    jzrq=thisform.pageframe1.page1.pageframe1.page2.一接种日期1.value
      IF  EMPTY(gh) .or. EMPTY(ph).or. EMPTY(jzdh).or. EMPTY(xmph).or. EMPTY(mpph).or. EMPTY(jzrq)
          ??chr(7)
           cmessagetext="资料不全,不予保存!"
           ndialogboxtype=0+48+0
           ctitlebartext="信息窗口"
           nanswer=messagebox(cmessagetext,ndialogboxtype,ctitlebartext)      
           thisform.pageframe1.page1.pageframe1. .F.
           thisform.pageframe1.page1.pageframe1.
           thisform.refresh
      ELSE
     
*!*              thisform.pageframe1.page1.pageframe1.page2.一批号1.controlsource=""
*!*              thisform.pageframe1.page1.pageframe1.page2.一接种日期1.controlsource=""     
*!*              SELECT fjpb01
*!*              GO TOP
*!*              LOCATE all FOR  一批号=ph   
          LOCATE all FOR  一批号=ph .and.一接种日期=jzrq   
     
          IF EOF()
            =tableupdate(.t.)
            ??chr(7)
           cmessagetext="保存成功!"
           ndialogboxtype=0+48+0
           ctitlebartext="信息窗口"
           nanswer=messagebox(cmessagetext,ndialogboxtype,ctitlebartext)
           thisform.pageframe1.page1.pageframe1. .T.
           thisform.pageframe1.page1.pageframe1. .F.
           thisform.pageframe1.page1.pageframe1. .F.
           xgbz=.F.
           thisform.refresh   
          ELSE

          ??chr(7)
           cmessagetext="记录重复(批号和接种日期同时相同),不予保存!"
           ndialogboxtype=0+48+0
           ctitlebartext="信息窗口"
           nanswer=messagebox(cmessagetext,ndialogboxtype,ctitlebartext)
           delete
           pack
           thisform.pageframe1.page1.pageframe1. .T.
           thisform.pageframe1.page1.pageframe1. .F.
           thisform.pageframe1.page1.pageframe1. .F.
           go bottom
           xgbz=.F.
           thisform.refresh
           endif      
      endif
    case  nanswer=7
        =tablerevert(.T.)
        *!*    对行缓冲区中的记录还原,即还原成空白
        ??chr(7)
        cmessagetext="放弃添加新记录成功!"
        ndialogboxtype=0+48+0
        ctitlebartext="信息窗口"
        nanswer=messagebox(cmessagetext,ndialogboxtype,ctitlebartext)
        thisform.pageframe1.page1.pageframe1. .T.
        thisform.pageframe1.page1.pageframe1. .F.
        thisform.pageframe1.page1.pageframe1. .F.
        go bottom
        xgbz=.F.
        thisform.refresh
    endcase

表中并无重复记录,但保存成功哪些语句无用,直接就报 cmessagetext="记录重复(批号和接种日期同时相同),不予保存!请求高手帮助,谢谢!
2018-08-29 13:54



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-488751-1-1.html




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

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