Que dois je faire pour selectionner une tale, la fermer et en selectionner une a

logifox Messages postés 2 Date d'inscription mercredi 12 juillet 2006 Statut Membre Dernière intervention 14 juillet 2006 - 12 juil. 2006 à 15:41
michelatoutfox Messages postés 828 Date d'inscription mardi 5 octobre 2004 Statut Membre Dernière intervention 7 mai 2013 - 17 juil. 2006 à 17:02
Bonjour à tous,

Je débute en foxpro et je suis completement bloqué , AUSECOURS :'(.
j'ai créé une application qui me permet de remplir une base de donnée .dbf à partir d'un fichier excel.

Dans un premier temps, j'utilise 4 workarea différentes dans lesquelles j'ai ouvert 4 table .dbf différentes.(client, comptes, ...)

Dans un deuxieme temps, j'ai placé le contenu du fichier excel dans un curseur

Ensuite, je parcours le curseur et en fonction des valeurs découvertes dans un certain champ, je teste si la valeur existe deja dans une des tables, si elle n'existe pas , je dois la créer.
Cela fonctionne tres bien , sauf que les champs créés sont créés dans toutes les tables !!???

Voici le code :

    ** Test si le fournisseur ou le client existe dans la table CSF
                ** Si il n'existe pas il est créé
                SELECT csf   ** ouverture de la table OK
                LOCATE FOR ALLTRIM(UPPER(csf.number)) = ALLTRIM(tmpimput)
                IF !FOUND()
                    APPEND BLANK
                    REPLACE csf.number WITH ALLTRIM(tmpImput)
                        IF (tmpType = "F")
                            replace csf.type WITH "2"
                        ELSE
                            IF (tmpType = "C")
                                replace csf.type WITH "1"
                            ENDIF
                        ENDIF
                SELECT csf   ** je voudrais fermer cette table , mais je n'y parviens pas ...
                ENDIF
                
                
                ** Test si le compte general existe dans la table
                SELECT acf
                LOCATE FOR ALLTRIM(UPPER(acf.number)) = ALLTRIM(tmpImput)
                IF !FOUND()
                    APPEND BLANK
                    REPLACE acf.number WITH ALLTRIM(tmpImput)
                    REPLACE acf.debcredflt WITH "0"
                SELECT acf    
                ENDIF

A la fin du compte je mùe retrouve avec des nouveaux clients dans la bonne table mais aussi dans la mauvaise table...
Que dois je faire pour selectionner une tale, la fermer et en selectionner une autre ...

3 réponses

michelatoutfox Messages postés 828 Date d'inscription mardi 5 octobre 2004 Statut Membre Dernière intervention 7 mai 2013 1
13 juil. 2006 à 09:23
Bonjour,

pour fermer une table (en réalité, c'est le curseur qu'on ferme, la table, ce sont des datas sur une unité):
USE IN 'csf'

mais tu n'as pas besoin de la fermer pour travailler sur une autre, SELECT acf devrait suffire pour travailler dans acf.

à la place d'append blank, essaies d'utiliser INSERT INTO, c'est plus propre...

les nouveaux clients dans la mauvaise table ?? que veux-tu dire? peux-tu donner un exemple, et préciser la structure de tes tables? comment ouvres-tu ces curseurs? (le code, s'il te plait)
0
logifox Messages postés 2 Date d'inscription mercredi 12 juillet 2006 Statut Membre Dernière intervention 14 juillet 2006
14 juil. 2006 à 09:40
Bonjour et merci pour cette reponse !
Finalement, je suis parvenu a corriger l'erreur des occurences presentes dans la mauvaise table, en fait, le test que je faisais au niveau de l'occurence du curseur etait mauvais, ... j'ai bien vite corrigé tout cela et tout fonctionne correctement !
Je n'ai donc pas eu besoin d'utiliser un USE, le SELECT a suffit.

Est ce que les ' ' sont obligatoire dans la commande USE IN 'csf' ?

Bonne journée
0
michelatoutfox Messages postés 828 Date d'inscription mardi 5 octobre 2004 Statut Membre Dernière intervention 7 mai 2013 1
17 juil. 2006 à 17:02
Bonjour,

USE IN attend 2 types de paramètres possibles:
- un entier, alors le paramètre désigne le n° de la zone de travail à fermer
- une chaine de carctère, alors le paramètre désigne le nom d'alias à fermer. Si csf est le nom d'alias, il faut l'encadrer de délimiteurs pour que l'instruction soit correcte (simples quotes, doubles quotes, crochets).
0
Rejoignez-nous