2017-06-05 1 views
1

Ich suche hiermit nach einer Lösung. Ich habe jeweils einen DBF für Januar und Februar. Es gibt zwei Spalten namens A und B in jedem dbf, A ist eine Reihe von Zahlen und B ist vlookup, und ich möchte die SpalteB im Februar durch "neu" ersetzen, wenn ihre Werte in SpalteA nicht in der Spalte A im Januar erscheinen und "alt" für umgekehrt. Mein Code ist folgender:Foxpro ersetzen mit "" nicht in

REPLACE ALL B WITH "Old" 
REPLACE ALL B WITH "New" FOR A NOT IN (sele A FROM &filejanuary) 

Danke.

Antwort

1

Der obige Kommentator war in der Nähe.
Verwenden von SQL UPDATE-Befehle ...

* --- Replace ALL Feb.B with "Old" --- 
UPDATE February SET February.B = 'Old' 

* --- Now change Feb.B to "New" for Applicable Conditions --- 
UPDATE February SET February.B = 'New' ; 
    WHERE February.A NOT IN (SELECT A FROM January) 

HINWEIS - es gibt auch einen VFP-Befehl Ansatz

* --- Replace ALL Feb.B with "Old" --- 
SELECT February 
REPLACE ALL February.B WITH "Old" 

* --- Relate table January to table February through Field A --- 
SELECT January 
SET ORDER TO A && Assumes Index built on Jan with Expression = A 

SELECT February 
SET RELATION TO A INTO January 
* --- Replace ALL Feb.B with "New" for No Related A in Jan --- 
REPLACE ALL B WITH "New" FOR EMPTY(January.A) 

Good Luck

+0

Ja, ich habe es mit dem Befehl von @Dhugalma abgeschlossen. Danke an beide. –

+0

Wenn du sagst "Der obige Kommentator war nah dran.", Was meintest du genau? Welcher Teil hat nicht für dich funktioniert? Sie können dasselbe mit vielen verschiedenen Formularen in SQL und auch in VFP tun. @AngYiwei, Es war nicht nah, aber direkt am Ziel. Sie sollten sich nicht mit Annahmen entscheiden und es zuerst versuchen. UND BTW, das "Schließen" Code funktioniert sogar in VFP5. –

0
update February set February.B = 'Old' 
update February set February.B = 'New' ; 
    where not exists (select * from January where January.A = February.A) 
+0

Ich denke, der Befehl könnte für andere SQL-Sprache verwendet werden, aber nicht direkt in FoxPro –

+0

Dieser Code gilt auch für Fox Pro. Wenn du Fox Pro sagst, über welche Version sprichst du? –

+0

Entschuldigung für die späte Antwort, ich verwende derzeit VFP7.0 –

0

Außerdem, wenn Sie xBase verwenden möchten, dann ist viel einfacher, wenn es einen Index auf Januar gibt. A (sagen wir mal, sein Tag ist JanA - wer würde wirklich die Felder A, B ... benennen):

select February 
replace all B with iif(seek(February.A, 'January', 'JanA'), 'Old', 'New')