eric leissler France Membre Simple # 0000002784 enregistré le 06/03/2010 http://www.aumeric.fr 68 ans LEISSLER Eric 85290 MORTAGNE SUR SEVRE de la société AUMERIC LOGICIELS Fiche personnelle
Note des membres pas de note
Contributions > 01 - PRG : Programmation
copier une base de données en renommant le DBC
# 0000000804
ajouté le 15/09/2011 15:44:19 et modifié le 15/09/2011
consulté 8627 fois
Niveau
débutant
J'avais besoin pour un client de faire une copie de toute la base de données et de renommer cette dernière afin que le programme initial puisse accéder soit à une base, soit à l'autre, soit au deux en même temps
Une simple copie n'aurait pas suffit, puisque les deux bases doivent porter un nom différent et ce nom est intégré dans chaque table dans l'entête.
Grace à notre excellent forum, ( Vive atoutfox) Francis m'a fait connaitre ce lien
Le programme ne copie pas la valeur par défaut mise dans un champs
il faut le faire à la main.
Pour ma part, j'ai des champs identifiant, qui sont par défaut le padl(idint,10,"0") (pour des raisons de compatibilité descendentes )
c'est pourquoi j'ai rajouté les lignes
For e=1 To Fcount() If Alltrim(Lower(Field(e)))=="identifiant"
cmd = " ALTER table " + atables(i) + " alter COLUMN identifiant c(10) DEFAULT PADL(idint,10,'0')" &cmd
Endif Endfor
AXE d'amélioration à apporter :
parcourir les champs des tables initiales afin de mettre la valeur par défaut correspondantes dans les champs des tables de destinations.
Bonne journée à toutes et à tous
Eric
Code source :
********************************************** * Programme initial téléchargé sur * http://www.tek-tips.com/faqs.cfm?fid=1671 * * Corrections apportées : Eric LEISSLER - AUMERIC LOGICIELS - 15/09/2011 * *********************************************** Local e,i,tFromDBC,tToDBC SetSafetyOff
tFromDBC= Getfile("dbc","Sélectionnez le dbc à copier","select")
tFromDBC = Left(tFromDBC ,Len(tFromDBC ) -4)
tToDBC = Getdir("","Indiquez le nouveau dosssier ou créez le !","choix du dossier",64,.F.)
tToDBC=tToDBC + Inputbox("nom de la nouvelle base de données", "indiquez le nouveau nom")
tFromDBC = Allt(tFromDBC)
tToDBC = Allt(tToDBC)
CloseDatabasesAll
CreateDatabase (tToDBC) OpenDatabase (tFromDBC) Adbobjects(atables,"TABLE") For i=1 ToAlen(atables,1) SetDatabaseTo (tFromDBC) Use (atables(i)) In 0 Select(atables(i)) CopyTo (Addbs(Justpath(tToDBC))+atables(i)) WithCdxDatabase (tToDBC) Use SetDatabaseTo (tToDBC) Use (atables(i)) In 0 Exclusive
Select(atables(i))
For e=1 ToFcount() IfAlltrim(Lower(Field(e)))=="identifiant"
cmd = " ALTER table " + atables(i) + " alter COLUMN identifiant c(10) DEFAULT PADL(idint,10,'0')"
&cmd
Endif Endfor
Use Next SetDatabaseTo (tFromDBC) Adbobjects(atables,"VIEW")
CloseDatabasesAll
Local lnObjectId, lnNewId, lnParentId, lcFromDBF, lcToDBF
Use (tFromDBC+".dbc") In 0 Alias old Exclusive Use (tToDBC+".DBC") In 0 Alias new Exclusive
Select new Pack GoBottom
lnNewId = Reccount()+1
lnParentId = lnNewId Select old Pack