IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

4D Discussion :

[4D] Exportation de données


Sujet :

4D

  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2004
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 59
    Par défaut [4D] Exportation de données
    Bonjour,

    Je cherche a exporter des données d'une base 4D afin de les importer dans un nouveau logiciel.

    J'ai reussi a exporter les tables en utilisant la commande EXPORTER DONNEES de 4D , et le resultat est satisfaisant.

    Seulement en fouillant d'un peu plus pres la structure de la base, je me suis apercu que certaines tables n'apparaissaient pas dans la liste des tables de la fenetre EXPORTER DONNEES. Ce sont des tables qui sont reliées à d'autres par "un trait grisé" (dont on ne peut pas editer les propriétés) alors que les liaisons habituelles entre tables sont avec "un trait noir" (dont on peut editer les propriétés). Les tables reliées ainsi n'apparaissent pas dans la liste des tables en utilisant l explorateur de table, mais en cherchant un peu plus, je me suis apercu que ce sont en fait des sous tables (je ne vois pas bien l'interet).
    Comment puis-je simplement exporter les données de ces sous-tables ? dois je ecrire des lignes de code, je ne connais pas du tout 4D, je n'ai meme pas trouvé comment faire pour ecrire dans un fichier texte.

    Si quelqu'un connait la solution, d'avance merci

  2. #2
    Membre expérimenté
    Homme Profil pro
    Bientôt retraité
    Inscrit en
    Juillet 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Bientôt retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 312
    Par défaut
    A priori, les sous table sont restées dans 4D pour assurer une compatibilité entre les versions. Pour ma part, je ne les utilise plus.
    je pense que c'était un moyen facile de faire une table liée sans se casser la tête.
    Pour l'export, à ma connaissance, il n'existe que le code 4D.
    Le code vite fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    $mondoc:=creer document("";"TXT")
    Si(ok=1)
    $tab:=caractere(9)
    $Fin:=caractere(13)
    TOUT SELECTIONNER([Table])
    Boucle ($i;1;Enregistrements trouves([Table]))
     $Toto:=[Table]identifiant
     TOUS LES SOUS ENREGISTREMENTS([Table]Type_Materiel)
     
     Boucle ($j;1;Sous enregistrements trouves([Table]SousTable)
     $Texte:=$Toto+$tab+[Table]SousTable'Champ1+$tab+[Table]SousTable'Champ2+$fin
     ENVOYER PAQUET($Mondoc;Mac vers Windows($Texte))
     SOUS ENREGISTREMENT SUIVANT([Table]SousTable)
    fin de boucle
     LIBERER ENREGISTREMENT([Table])
     ENREGISTREMENT SUIVANT([Table])
    Fin de boucle 
     
    FERMER DOCUMENT($Mondoc)
     
    fin de si
    Voila un truc rapide qui marche. Attention, si les informations exportées sont du type numérique, il faut penser à ajouter (chaine([Table]SousTable'Champ1))

    Voilà en espérant que cela t'aideras.

    A +

  3. #3
    Membre confirmé
    Inscrit en
    Octobre 2004
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 59
    Par défaut
    Je vais tester ca, je te remercie beaucoup en tout cas pour cette réponse claire et rapide

  4. #4
    Membre confirmé
    Inscrit en
    Octobre 2004
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 59
    Par défaut
    Effectivement, ca marche. La seule difficulté est de devoir créer la variable texte avec tous les champs de cette sous table, et il y en a beaucoup :p


    Merci encore

  5. #5
    Membre confirmé
    Inscrit en
    Octobre 2004
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 59
    Par défaut
    Bonjour,

    j'ai à nouveau une question.

    Afin de rendre le processus un peu plus automatique, et pour eviter d'écrire du code statique pour exporter les données de 2 bases de données 4D de 60 tables avec une 30aine de champ chacune, j'aimerai pouvoir effectuer la chose suivante :

    Lister toutes les tables.
    Pour chaque table, lister tous les champs afin d exporter chaque ligne avec tous les champs.
    Pour chaque table lister les sous tables.
    Pour chaque sous-table , lister tous les champs.


    Il ne me manque que les fonctions Lister les tables, lister les sous-tables, et lister les champs.

    Est ce que de telles fonctions existent ?


    Dans ce cas, ca me permettrait d'écrire un code assez générique qui me permettrait d exporter l'ensemble de la base.

    Merci d'avance

  6. #6
    Membre expérimenté
    Homme Profil pro
    Bientôt retraité
    Inscrit en
    Juillet 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Bientôt retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 312
    Par défaut
    Si cela peut t'aider, voici un exemple pour exporter au format 'Excel' la structure. Je n'ai rien trouvé concernant les sous table. Si je trouve quelque chose, je le posterais ici.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    ****************Début méthode ******************
    **` Description : Permet de mettre sous forme XLS
    **`  le descriptif de la structure
    **` Num Table - Nom Table - Num Champ - Nom Champ
    **` ----------------------------------------------------
    C_HEURE($mondoc)
    C_TEXTE($tab;$fin;$texte;$NumTable;$NomTable;$Type;$Long)
    C_ENTIER LONG($i;$j;$champType;$champLong)
    $mondoc:=Creer document("";"XLS")
    $tab:=Caractere(9)
    $fin:=Caractere(13)
    $texte:="Num Table"+$tab+"Nom Table"+$tab+"Num Champ"+$tab+"Nom Champ"+$tab+"Type"+$tab+"Val"+$fin
    ENVOYER PAQUET($mondoc;$texte)
     
    Boucle ($i;1;Nombre de tables)
    	$NumTable:=Chaine($i)
    	$NomTable:=Nom de la table($i)
     
    	Boucle ($j;1;Nombre de champs($i))
    		LIRE PROPRIETES CHAMP($i;$j;$champType;$champLong)
    		Au cas ou 
    			: ($champType=Est un champ alpha )
    				$Type:="Alpha"
    				$Long:=Chaine($champLong)
    			: ($champType=Est un texte )
    				$Type:="Texte"
    				$Long:=""
    			: ($champType=Est un numérique )
    				$Type:="Réel"
    				$Long:=""
    			: (($champType=Est un entier )*|*($champType=Est un entier long ))
    				$Type:="Entier"
    				$Long:=""
    			: ($champType=Est une date )
    				$Type:="Date"
    				$Long:=""
    			: ($champType=Est une heure )
    				$Type:="Heure"
    				$Long:=""
    			: ($champType=Est un booléen )
    				$Type:="Booleen"
    				$Long:=""
    			: ($champType=Est une image )
    				$Type:="Image"
    				$Long:=""
    			: ($champType=Est une sous table )
    				$Type:="Sous table"
    				$Long:=""
    			: ($champType=Est un BLOB )
    				$Type:="Blob"
    				$Long:=""
    		Fin de cas 
    		$texte:=$NumTable+$tab+$NomTable+$tab+Chaine($j)+$tab+Nom du champ($i;$j)+$tab+$Type+$tab+$Long+$fin
    		ENVOYER PAQUET($mondoc;$texte)
     
    	Fin de boucle 
    Fin de boucle 
     
    FERMER DOCUMENT($mondoc)
    ALERTE("fin")
    ****************Fin  méthode ******************

  7. #7
    Membre chevronné

    Profil pro
    Inscrit en
    Mai 2006
    Messages
    359
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 359
    Par défaut
    j'aimerai pouvoir effectuer la chose suivante:
    Lister toutes les tables.
    Pour chaque table, lister tous les champs ...
    Bonjour,

    voir également la doc des commandes Nombre de tables et Nombre de champs qui permettent de parser tous les champs de toutes les tables dans une boucle telle que par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Boucle ($table;1;Nombre de tables)
    	Boucle ($champ;1;Nombre de champs($table))
    		$p_champ:=Champ($table;$champ)
                      `insérer traitement
    	Fin de boucle 
    Fin de boucle

  8. #8
    Membre éprouvé
    Inscrit en
    Juin 2006
    Messages
    74
    Détails du profil
    Informations personnelles :
    Âge : 61

    Informations forums :
    Inscription : Juin 2006
    Messages : 74
    Par défaut Méthode export noms de tables et champs
    Bonjour,

    j'ai écrit il y a quelques années pour mes propres besoins une méthode qui exporte la structure d'une base 4D au format SQL.

    N'utilisant pas les sous-tables, je n'ai pas pris en compte leur gestion. Avec une petite adaptation, tu pourras facilement t'en sortir.

    Voici le bout de code :

    Bon courage Denis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  9. #9
    Membre confirmé
    Inscrit en
    Octobre 2004
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 59
    Par défaut
    Merci beaucoup pour vos réponses, je vais tester ca dès aujourd'hui

  10. #10
    Membre confirmé
    Inscrit en
    Octobre 2004
    Messages
    59
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 59
    Par défaut
    Je viens de tester les différents codes que vous m'avez donnés.

    Ca marche très bien, mais je suis bloqué sur un point supplémentaire.

    En effet, pour acceder a un champ de table il suffit d'écrire dans lecode :

    [Table]Champ , ou [Table]Sous table'champ

    Mais comment faire ca en dynamique ? par exemple , j'essaie de faire :

    [nom de la table($table)]nom du champ($table;$champ)

    Mais ca ne fonctionne pas.

  11. #11
    Membre expérimenté
    Homme Profil pro
    Bientôt retraité
    Inscrit en
    Juillet 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Bientôt retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 312
    Par défaut
    Comme les sous table sont appelées un jour ou l'autre à disparaitre, je ne crois pas que l'on puisse dynamiquement récupérer le nom (comme cela est faisable pour les tables et les champs).
    A mon avis, on est obligé de se les taper toutes à la main.
    Donc, je réitère mon conseil. Si vous faites des nouvelles structures, n'utilisez surtout pas les sous table.

    Désolé.

  12. #12
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2
    Par défaut problème d'export
    bonjour, je débute sous 4D et j'ai un problème d'exportation de données.
    j'ai 2 tables liées et je cherche à récupérer les données de ces 2 tables sur un même document au format SLK.
    quand j'ouvre la base et que je lance le programme d'export depuis le menu créé ça marche, mais dès que je commence à faire des actions de recherche (toujours dans le menu créé) et que je souhaite exporter une partie des données, seules les données d'une des 2 tables sont exportées.
    Dès lors que je quitte le menu créé et que je reviens en mode utilisation, ça remarche.
    quelqu'un peut -il m'expliquer ce qui se passe et comment résoudre ce problème ?
    d'avance merci

  13. #13
    Membre très actif
    Avatar de if_zen
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juin 2004
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 275
    Par défaut
    Citation Envoyé par xilebo Voir le message
    Afin de rendre le processus un peu plus automatique, et pour eviter d'écrire du code statique pour exporter les données de 2 bases de données 4D de 60 tables avec une 30aine de champ chacune,
    Tu peux créer une "méthode" et appeler la fonction permettant d'exporter le contenu de ta base en requête "SQL" :
    Documentation complète : http://doc.4d.com/4D-Langage-12.2/SQ...643433.fr.html

    Si ça peut aider !

  14. #14
    Membre expérimenté
    Homme Profil pro
    Bientôt retraité
    Inscrit en
    Juillet 2005
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Bientôt retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 312
    Par défaut
    Salut,

    Si il y a des sous tables, je pense qu'il n'est ni en V12, ni en V11. Donc, il va avoir du mal avec les commandes SQL..
    Par contre si pas de sous table et V11 ou V12, c'est bien ces commandes qu'il faut priviligier.

Discussions similaires

  1. Export de données vers Excel
    Par psykot63 dans le forum Access
    Réponses: 2
    Dernier message: 03/01/2005, 12h04
  2. importer et exporter des données
    Par denza1 dans le forum Bases de données
    Réponses: 3
    Dernier message: 13/12/2004, 16h34
  3. Exporter des données sous forme de requetes
    Par Pasiphae dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 06/10/2004, 17h27
  4. Exportation de données depuis une base
    Par david71 dans le forum JBuilder
    Réponses: 2
    Dernier message: 22/06/2004, 10h31
  5. Est-il possible d'exporter les données?
    Par frutix dans le forum Débuter
    Réponses: 8
    Dernier message: 21/06/2004, 10h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo