2017-06-05 4 views
1

Je cherche par la présente une solution. J'ai un dbf pour janvier et février chacun. Il y a deux colonnes nommées A et B dans chaque dbf, A est une série de nombres et B est vlookup, et je veux remplacer la colonneB en février par "new" si ses valeurs dans columnA n'apparaissent pas dans la colonne A en janvier et "vieux" pour vice versa. Mon code est le suivant:Foxpro remplacer par "" pas dans

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

Merci.

Répondre

1

Le commentateur ci-dessus était proche.
Utilisation de SQL UPDATE commandes ...

* --- 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) 

NOTE - il y a aussi une approche de commandement VFP

* --- 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) 

Bonne chance

+0

Oui, je l'ai terminé en utilisant la commande @Dhugalma. Merci aux deux. –

+0

Quand vous dites "Le commentateur ci-dessus était proche.", Que vouliez-vous dire exactement? Quelle partie n'a pas fonctionné pour vous? Vous pouvez faire la même chose en utilisant de nombreuses formes différentes dans SQL et aussi dans VFP. @ Angyiwei, ce n'était pas proche mais juste sur la cible. Vous ne devriez pas décider avec des hypothèses et essayez d'abord. Et BTW, ce code "proche" fonctionne même dans 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

Je pense que la commande pourrait être utilisée pour d'autres langages SQL mais pas directement dans FoxPro –

+0

Ce code est également valide pour fox pro. Quand vous dites fox pro, de quelle version parlez-vous? –

+0

Désolé pour la réponse tardive, j'utilise actuellement VFP7.0 –

0

De plus, si vous souhaitez utiliser xBase, il est beaucoup plus simple s'il y a un index sur January.A (disons que son tag est JanA - qui nommerait vraiment les champs A, B ...):

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