Ajout d'un champ a une table [Résolu]

Signaler
Messages postés
6
Date d'inscription
jeudi 14 mars 2013
Statut
Membre
Dernière intervention
23 octobre 2013
-
Messages postés
6
Date d'inscription
jeudi 14 mars 2013
Statut
Membre
Dernière intervention
23 octobre 2013
-
Bonjour,

Je recherche la possibilité d'ajouter des champs dans une table existante
via un script (foxpro) sans modifier les enregistrements.

En vous remerciant par avance pour vos informations.

Cordialement,

skypouap
A voir également:

6 réponses

Messages postés
381
Date d'inscription
vendredi 15 octobre 2004
Statut
Membre
Dernière intervention
24 octobre 2013
2
Tu ne peux pas utiliser un chiffre pour le nom d'une table.
Le nom d'une table est de type caractère. Pourquoi particulierement un chiffre?

USE((C:\d\test)+01000024)
de toute façon il manque la barre oblique
USE((C:\d\test\)+'01000024')


Mike Gagnon
Messages postés
381
Date d'inscription
vendredi 15 octobre 2004
Statut
Membre
Dernière intervention
24 octobre 2013
2
La première ligne, je ne la comprend pas. Customer est-il le nom de la table..


Stictement à titre d'exemple.

Voici un exemple d'une procedure plus generique qui te permet d'utiliser la meme function pour tout tes tables, sans etre oblige d'en ecrire une pour chaque table.



close databases ALL
=AjouterChamp('PERS','C:\CLI\DDO\DBFS\','natcp14','N(4)') &&& Exemple de son utilisation 
Procedure ajouterchamp
   Lparameters tcAlias,tcPath, tcNomDuChamps,tcType
   local lcTable 
   lcTable= tcPath+tcAlias
   use &lcTable exclusive 
   Alter Table &lcTable Add Column &tcNomDuChamps &tcType
   Use In select(lcTable)
Endproc
Mike Gagnon
Messages postés
381
Date d'inscription
vendredi 15 octobre 2004
Statut
Membre
Dernière intervention
24 octobre 2013
2
Il faut avoir accès exclusif à la table.

Use Customer exclusive 
ALTER TABLE Customer ADD COLUMN Fax c(20) NULL




Mike Gagnon
Messages postés
6
Date d'inscription
jeudi 14 mars 2013
Statut
Membre
Dernière intervention
23 octobre 2013

Bonjour

Merci M. Mike Gagnon pour ce code.
Au fait je suis un débutant...
La première ligne, je ne la comprend pas. Customer est-il le nom de la table..
En réalité, je veux écrire un traitement (ajout.prg) permettant d'ajouter un champ a une table dont le nom est '00000030'. Comment faire ?

En vous remerciant par avance pour vos informations.

Cordialement,

skypouap
Messages postés
6
Date d'inscription
jeudi 14 mars 2013
Statut
Membre
Dernière intervention
23 octobre 2013

Bonjour

j'ai essayée ceci mais çà ne marche pas.

Cas 1 :
PARAMETERS 01000024, natcp12, (C:\d\test)

addbs((C:\d\test)+1000024) IN 0 ALIAS 1000024

CLOSE DATABASES all

ALTER TABLE 01000024 ADD COLUMN natcp12 N(4)

USE IN 01000024

*********************************************************
Cas2
PARAMETERS 01000024, natcp12, (C:\d\test)

USE((C:\d\test)+01000024) IN 0 ALIAS 01000024

CLOSE DATABASES all

ALTER TABLE 01000024 ADD COLUMN natcp12 N(4)

USE IN 01000024

**********************************
NB : 01000024 = nom de la table
C:\d\test = le chemin
natcp12 = le nouveau champ
Aidez_mois SVP....
Messages postés
6
Date d'inscription
jeudi 14 mars 2013
Statut
Membre
Dernière intervention
23 octobre 2013

Bonjour

Merci M. Mike Gagnon, Mon code passe maintenant...

*********************************************************
********** Ajout d'un champ dans une table ***********
*
CLOSE DATABASES ALL && Fermer toutes les tables ouvertes....
SET DEFAULT TO C:\Users\DIRECT6\Desktop\ajout_champ\1 && Fixer le chemin par defaut
*
champ=0
*
SELECT 0
USE 'test'
FOR gnCompteur = 1 TO FCOUNT() && Effectue une boucle sur le nombre de champs
IF UPPER(ALLTRIM(FIELD(gnCompteur))) = UPPER(ALLTRIM('Nom1')) && Le champ existe
*WAIT WINDOW "le champs existe"
=MESSAGEBOX("ce champ existe")
champ=gnCompteur && Stocher la valeur gnCompteur du champ existant...
RETURN
ENDIF
ENDFOR
*
IF UPPER(ALLTRIM(FIELD(champ)))<>UPPER(ALLTRIM('Nom1'))
ADDBS(('C:\Users\DIRECT6\Desktop\ajout_champ\1\')+'test') && Le chemin de la table......
ALTER table 'test' ADD COLUMN 'Nom1' C(25) && Effectuer la modification
ENDIF
*
******************** Fin du traitement ************************************

Appréciez SVP...