帮帮忙啊,不胜感激!

时间:2021-11-03 21:12:04
需要一段FOXPRO下的代码,我不懂FOXPRO,时间又紧来不及看书,所以只好求救大家了,谢谢!
问题是这样的:
有两张表,表1有XM,CSNY,RXNY,A,B,C,D,....等等好多个字段,表2有XM,CSNY,RXNY,A,B,C六个字段。其中表2的A,B,C字段下均为空。
现欲根据XM作为索引检索表1的A,B,C的内容并拷贝到表2的相应记录下,即对于表2的每条记录,用XM检索表1的相应记录,并拷贝A,B,C到表2下。
由于表1里有可能同一个XM有2条及以上的记录,这时候需要根据CSNY,RXNY进一步区分。

能不能给我一段直接能用的代码?Thank you very much!

10 个解决方案

#1


说的不够清楚,不知道下面的语句和不和你的要求:
select b.xm,b.csny,b.rxny,a.a,a.b,a.c from a,b where
a.xm=b.xm and a.csdy=b.csdy and a.rxny=b.rxny into dbf newb

#2


select a
use 表1
select b
use 表2
select a
do while .not. eof()
    select b
    goto top
    locate for XM==a.XM and CSNY==a.CSNY and RXNY==a.RXNY
    if found()
       goto recno()
       replace A whith a.A, B with a.B, C with a.C
    endif
    select a
    skip
enddo
    
          
       

#3


along的方法是可行的,取出符合的记录到一个新库,然后添加到B中。
只要是你的想法和其给出的条件一致就可以;
select .....
use b
appe from  newb

#4


你们能告诉我以上两段代码是不是在命令窗口直接运行的吗?

还有,若表1是ORACLE数据库的,而表2是DBF格式的怎么办?

#5


你要让它直接运行可把上面的代码
加到命令窗口的init或load事件中
否则可添加一按钮,将代码写入其click事件中

#6


将use 后面的表1,表2用实际的表名代替即可在命令窗口中直接运行,如果表不在默认路径中,需加上路径。对oracle不是太熟,我想use 命令应该只能用于dbf格式文件吧,或者可以试试用import命令将oracle数据导入吧

#7


表1.XM---表2.XM,表1.CSNY---表2.CSNY,表1.RXNY---表2.RXNY(这是对应关系)
由于表2里的数据是人工输入的,特别是CSNY和RXNY字段很可能有错,而一般情况下XM字段就足够唯一辨别。所以我想这样:
1,对应表2的一条确定的记录,按XM检索表1的数据,若在表1里只能查出唯一的一个记录,则执行拷贝A,B,C字段内容的工作。
2,否则说明表2存在两条或以上的记录且这些记录的XM字段相同,这时若根据CSNY能进一步区分开这些记录,则执行拷贝。
3,否则用RXNY字段再次区分,若能,则执行拷贝。若还是不能区分开,则把表2的这条记录拷贝到另外一个文件,以便人工区分用。此时不执行拷贝。
这样循环,直至表2的所有记录都被处理过。
谢谢!

我的油箱是handyqiu@yeah.net,若有兴趣,大家以后互相帮忙。

#8


能根据我上面发的帖子给我一段在命令窗口中就运行的代码吗?

#9


以上,同意xiaoli_xie(snow) 
不过要是在sql中,一句话就搞定了

#10


n=0
select a
use 表1
select b
use 表2
do while .not. eof()
    select a
    goto top
    locate for XM==b.XM and CSNY==b.CSNY and RXNY==b.RXNY
    if found()
       n=recno()
       continue
       if found()
          select c
          use 表3
          append blank
          replace XM with b.XM, CSNY with b.CSNY, RXNY with b.RXNY;
          A with b.A, B with b.B, C with b.C
       else
          select a
          goto n
          select b
          replace A whith a.A, B with a.B, C with a.C
       endif
    endif
    select b
    skip
enddo
其中表3应与表2结构相同

#1


说的不够清楚,不知道下面的语句和不和你的要求:
select b.xm,b.csny,b.rxny,a.a,a.b,a.c from a,b where
a.xm=b.xm and a.csdy=b.csdy and a.rxny=b.rxny into dbf newb

#2


select a
use 表1
select b
use 表2
select a
do while .not. eof()
    select b
    goto top
    locate for XM==a.XM and CSNY==a.CSNY and RXNY==a.RXNY
    if found()
       goto recno()
       replace A whith a.A, B with a.B, C with a.C
    endif
    select a
    skip
enddo
    
          
       

#3


along的方法是可行的,取出符合的记录到一个新库,然后添加到B中。
只要是你的想法和其给出的条件一致就可以;
select .....
use b
appe from  newb

#4


你们能告诉我以上两段代码是不是在命令窗口直接运行的吗?

还有,若表1是ORACLE数据库的,而表2是DBF格式的怎么办?

#5


你要让它直接运行可把上面的代码
加到命令窗口的init或load事件中
否则可添加一按钮,将代码写入其click事件中

#6


将use 后面的表1,表2用实际的表名代替即可在命令窗口中直接运行,如果表不在默认路径中,需加上路径。对oracle不是太熟,我想use 命令应该只能用于dbf格式文件吧,或者可以试试用import命令将oracle数据导入吧

#7


表1.XM---表2.XM,表1.CSNY---表2.CSNY,表1.RXNY---表2.RXNY(这是对应关系)
由于表2里的数据是人工输入的,特别是CSNY和RXNY字段很可能有错,而一般情况下XM字段就足够唯一辨别。所以我想这样:
1,对应表2的一条确定的记录,按XM检索表1的数据,若在表1里只能查出唯一的一个记录,则执行拷贝A,B,C字段内容的工作。
2,否则说明表2存在两条或以上的记录且这些记录的XM字段相同,这时若根据CSNY能进一步区分开这些记录,则执行拷贝。
3,否则用RXNY字段再次区分,若能,则执行拷贝。若还是不能区分开,则把表2的这条记录拷贝到另外一个文件,以便人工区分用。此时不执行拷贝。
这样循环,直至表2的所有记录都被处理过。
谢谢!

我的油箱是handyqiu@yeah.net,若有兴趣,大家以后互相帮忙。

#8


能根据我上面发的帖子给我一段在命令窗口中就运行的代码吗?

#9


以上,同意xiaoli_xie(snow) 
不过要是在sql中,一句话就搞定了

#10


n=0
select a
use 表1
select b
use 表2
do while .not. eof()
    select a
    goto top
    locate for XM==b.XM and CSNY==b.CSNY and RXNY==b.RXNY
    if found()
       n=recno()
       continue
       if found()
          select c
          use 表3
          append blank
          replace XM with b.XM, CSNY with b.CSNY, RXNY with b.RXNY;
          A with b.A, B with b.B, C with b.C
       else
          select a
          goto n
          select b
          replace A whith a.A, B with a.B, C with a.C
       endif
    endif
    select b
    skip
enddo
其中表3应与表2结构相同