从两个表中搜索和替换值VFP 9

问题描述 投票:0回答:2

我有一个大学项目的bdf文件,我想从另一个表中检索给定匹配条件的值,测试每条记录(它们具有相同的id_number并且它们不符合另一个条件)。我一直坚持这一点,因为在进行替换时它只需要从表中获取第一个参考值(而不是符合条件的参考值)。那些没有条件1.Mp_id == d2.po在参考表中添加ship2,以及其余不符合条件的,添加ship2寻找参数prod_code从参考表中检索ship2

CLOSE DATABASES
USE Ruta + "FILE.dbf" IN 0 ALIAS d1
USE Ruta2 + "REFERENCE.dbf" IN 0 ALIAS d2
SELECT d1
ALTER TABLE d1 ADD COLUMN ship c(10) &&create new column to fill in the reference
SELECT d2
GO TOP
DO WHILE !EOF()
  SELECT d1
  REPLACE d1.ship WITH d2.ship2 FOR d1.Mp_id == d2.po
  REPLACE d1.ship WITH d2.ship2 FOR d1.prod_code == d2.prod AND d1.Mp_id != d2.po
  SELECT d2
  SKIP
ENDDO
CLOSE DATABASES ALL

提前谢谢了!

visual-foxpro foxpro dbf
2个回答
1
投票

不幸的是,“给你”代码不会“教你”任何关于如何做到这一点。 下面的代码被快速记下来并没有经过测试,但是如果您花一些时间使用推荐的教程视频,您应该能够判断以下内容是否适用于您,如果没有,则可能需要更改。

USE Ruta2 + "REFERENCE.dbf" IN 0 ALIAS d2 EXCL  && Open 'Child' table
SELECT D2
INDEX ON po TAG Po  && Index table on po field values
INDEX ON prod TAG Prod  && Index table on prod field values
SET ORDER TO po  && 'Activate' 'child' table Po index

USE Ruta + "FILE.dbf" IN 0 ALIAS d1   && Open 'Parent' table
SELECT D1
ALTER TABLE d1 ADD COLUMN ship c(10) &&create new column to fill in the reference
SET RELATION TO id INTO D2  && set relation such that d1.id = d2.po
REPLACE ALL d1.ship with d2.ship2 FOR !EMPTY(d2.po)

SELECT D2
SET ORDER TO Prod  && 'Activate' 'child' table Prod index
SELECT D1
SET RELATION TO prod_code INTO D2  && set relation such that d1.prod_code = d2.prod
REPLACE ALL d1.ship WITH d2.ship2 FOR !EMPTY(d2.prod) AND d1.Mp_id != d2.po  

祝好运


1
投票

正如我所说,如果没有一些样本数据和样本输出,你不清楚你要做什么。

您可以使用此单个更新语句替换while ... enddo:

Update d1 ;
    Set ship = d2.ship ;
    from d2 ;
    where d1.Mp_Id == d2.po Or d1.Prod_Code == d2.Prod
© www.soinside.com 2019 - 2024. All rights reserved.