回 帖 发 新 帖 刷新版面

主题:[讨论]SCAN到重复的数据(foxpro菜鸟一个)

在我debug我下面的code的过程中, 当SCAN我的tmpA cursor的时候, 例如里面有一个depno为"729644"的数据吧. 当SCAN完这条数据后, 理论上应该跳到下一跳数据才对, 我也不知道为什么他又SCAN同一条数据(depno为"729644")一次. 然后打印出来的report结果是数据库中每一条数据, 程序都SCAN了两次. 我不明白是什么原因, 按照我SCAN的语法也看不出什么毛病. 而且以前一直用着也没有出过这样的问题, 不知道是不是因为累积数据太多了, foxpro会在SCAN时出些这样的bug呢? 请各位高人帮忙看看, 我把code都贴上来了, 谢谢

SELECT acno, depno, val(depno) as dnumeric, depsts, txndate, valdate, orgdepn;
    FROM fddata;
    WHERE  &wcond ;
    ORDER BY depno ;
    INTO CURSOR tmpA  

IF _TALLY > 0 THEN
    
    CREATE CURSOR repcsr ( acno C(12), depno C(6), depsts C(1), txndate D, valdate D, orgdepn C(6) )
    
    
    CALCULATE MIN(dnumeric) TO dno

SCAN
        SCATTER MEMVAR
        IF m.dnumeric > dno + 1 THEN
            FOR i = dno + 1 TO dnumeric - 1
                  SELECT repcsr
                  APPEND BLANK
                  REPLACE depno WITH ALLTRIM(STR(i))
            ENDFOR

            SELECT tmpA
            SCATTER MEMVAR
        ENDIF

        SELECT repcsr
        APPEND BLANK
        GATHER MEMVAR
        dno = dnumeric

    ENDSCAN

回复列表 (共7个回复)

沙发

顺便说说, depno是primary key, 所以在数据库中绝对不会有两条有相同depno的数据, 所以我确定是SCAN了同一条数据两次

板凳

你在玩什么游戏? 说明你在做什么.

3 楼

one,你并没有在scan tmpA 而是在scan  repcsr 

two,IF m.dnumeric > dno + 1 THEN     m.dnumeric 含义不清,无法判断真实意图,上下文没有交代

three,综合上下文判断,出现重复很有可能是因为IF m.dnumeric > dno + 1 被执行了一次真,然后退出if后又继续执行下面的数据导入

所以,关键问题在于IF m.dnumeric > dno + 1 THEN  这一行,你自己再看看

4 楼

IF m.dnumeric > dno + 1 THEN     m.dnumeric的意图我也不清楚, 刚接手这个application,上一手的人早就走了, 问也没得问. 不过我不知道是不是因为这个if loop的原因, 因为例如depno为"729644"的数据, 并不符合IF LOOP的条件, IF LOOP并没有执行. 但还是SCAN了两次

5 楼

插入一个?m.dnumeric > dno + 1看一下就知道了

6 楼

请问加个?是什么意思? 是加入一个断点吗?

7 楼

在两个append blank下面再分别加一句:
messagebox('i='+str(i))

messagebox('m.depno='+m.depno)
然后再试运行一下,分析问题之所在

我来回复

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