1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
| `méthode d'export de la base (structure) au format SQL
`ATTENTION à l'ordre de création des liens, car s'ils pointent vers une table non
`encore créée Insider (ou autre) risque de générer une erreur.
C_ENTIER LONG($I;$J;$last;$TableDest;$ChampDest) `compteur de "tables; Champs"
C_TEXTE($ligne;$Index_Primaire;$Liens;$Autre_Index)
`C_BOOLEEN($creation)
$message:="Créer un fichier SQL de description de la base ?"+(2**cr)
CONFIRMER($message;"Créer le fichier SQL";"Ne pas le créer")
Si (OK=1) `si on a confirmé la création
V_Doc:=Creer document("";"TEXT")
Creer fenetre(100;100;400;500;4;"suivi")
Boucle ($i;1;Nombre de tables) `pour chaque table ($I = n° table)
$nomfic:=Nom de la table($i) `nom de la table
$nomfic:=Remplacer chaine($nomfic;" ";"_") `Nettoyage du nom de la table
$ligne:=(2**cr)+"CREATE TABLE "+$nomfic+*cr+"("+*cr `ligne de création de table
$liens:="" `remise à "zéro" de la variable de liens
$Autre_Index:="" `remise à "zéro" de la variable des autres index
Boucle ($j;1;Nombre de champs($i)) `pour chaque champ de la table courante
LIRE PROPRIETES CHAMP($i;$j;$type;$long;$index) `etat du champ
$nomchamp:=Majusc(Nom du champ($i;$j)) `recupération de son nom
`"Nettoyage" des noms de champs en fonction de la norme SQL
$nomchamp:=Remplacer chaine($nomchamp;" ";"_")
$nomchamp:=Remplacer chaine($nomchamp;"/";"_")
$nomchamp:=Remplacer chaine($nomchamp;"-";"_")
$nomchamp:=Remplacer chaine($nomchamp;".";"_")
$nomchamp:=Remplacer chaine($nomchamp;";";"_")
$nomchamp:=Remplacer chaine($nomchamp;",";"_")
`typage du champ en fonction des correspondances avec SQL
Au cas ou
: ($type=0) `ALPHA
$TypeSQL:="CHAR("+Chaine($long)+")"
: ($type=2) `TEXTE
$TypeSQL:="LONG VARCHAR"
: ($type=1) `NUMERIQUE
$TypeSQL:="NUMERIC"
: ($type=8) `ENTIER
$TypeSQL:="SMALLINT"
: ($type=9) `ENTIER LONG
$TypeSQL:="INTEGER"
: ($type=6) `BOOLEEN
$TypeSQL:="BIT"
: ($type=4) `DATE
$TypeSQL:="DATE"
: ($type=11) `HEURE
$TypeSQL:="TIME"
: ($type=30) `BLOB
$TypeSQL:="LONG VARBINARY"
: ($type=7) `Sous-table
$TypeSQL:="SOUS_TABLE_NON_GEREE"
: ($type=3) `Image
$TypeSQL:="IMAGE_NON_GEREE"
Fin de cas
$ligne:=$ligne+$nomchamp+" "+$TypeSQL+","+*cr `Ligne de création de champ
`test sur l'existence d'un lien "partant"
LIRE PROPRIETES LIEN($i;$j;$TableDest;$ChampDest)
Si ($TableDest#0) `il existe un lien
$liens:=$liens+"FOREIGN KEY ("+$nomchamp+") REFERENCES "+Nom de la table($TableDest)+" ("+Nom du champ($TableDest;$ChampDest)+"),"+*cr
Fin de si
Si ($index) `Le champ est indexé => ligne de commande correspondante
$Autre_Index:=$Autre_Index+"CREATE INDEX "+$nomchamp+" ON "+$nomfic+" ("+$nomchamp+");"+*cr
Fin de si
Fin de boucle
`création de l'index primaire
`on a a priori pas la possibilité de savoir qu'un champ est indexé et UNIQUE
$ligne:=$ligne+$Index_Primaire
`création des liens (Foreign key)
$ligne:=$ligne+$Liens
$last:=Longueur($ligne) `longueur de la chaine $ligne
Si ($ligne[[$last-1]]=",") `si l'avant dernier caractère est une virgule
` attention, le dernier est un RETOUR CHARIOT
$ligne[[$last-1]]:=" " `suppression de la dernière virgule
Fin de si
`voir s'il est nécessaire de refaire le test une fois de plus ?
$ligne:=$ligne+");"+*cr `fin de définition de table
`création des autres index
$ligne:=$ligne+$Autre_Index
ENVOYER PAQUET(V_DOC;$ligne)
Fin de boucle
EFFACER FENETRE
FERMER DOCUMENT(V_DOC)
Fin de si |
Partager