Précédent   Forum des professionnels en informatique > Environnements de développement > Autres EDI > 4D
4D Forum d'entraide sur 4D. Avant de poster -> FAQ 4D
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/06/2006, 14h41   #1
Candidat au titre de Membre du Club
 
Inscription : octobre 2004
Messages : 52
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 52
Points : 10
Points : 10
Envoyer un message via ICQ à xilebo Envoyer un message via MSN à xilebo
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
xilebo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2006, 16h44   #2
Membre confirmé
 
Homme Michel Saiz
Développeur informatique
Inscription : juillet 2005
Messages : 185
Détails du profil
Informations personnelles :
Nom : Homme Michel Saiz
Âge : 55
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : juillet 2005
Messages : 185
Points : 254
Points : 254
Envoyer un message via MSN à michelS
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:
$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 uin 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 +
michelS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/06/2006, 17h42   #3
Candidat au titre de Membre du Club
 
Inscription : octobre 2004
Messages : 52
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 52
Points : 10
Points : 10
Envoyer un message via ICQ à xilebo Envoyer un message via MSN à xilebo
Je vais tester ca, je te remercie beaucoup en tout cas pour cette réponse claire et rapide
xilebo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/06/2006, 08h52   #4
Candidat au titre de Membre du Club
 
Inscription : octobre 2004
Messages : 52
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 52
Points : 10
Points : 10
Envoyer un message via ICQ à xilebo Envoyer un message via MSN à xilebo
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
xilebo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/06/2006, 14h40   #5
Candidat au titre de Membre du Club
 
Inscription : octobre 2004
Messages : 52
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 52
Points : 10
Points : 10
Envoyer un message via ICQ à xilebo Envoyer un message via MSN à xilebo
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
xilebo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/06/2006, 15h22   #6
Membre confirmé
 
Homme Michel Saiz
Développeur informatique
Inscription : juillet 2005
Messages : 185
Détails du profil
Informations personnelles :
Nom : Homme Michel Saiz
Âge : 55
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : juillet 2005
Messages : 185
Points : 254
Points : 254
Envoyer un message via MSN à michelS
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.
****************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 ******************
michelS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/06/2006, 15h50   #7
Responsable 4D
 
Inscription : mai 2006
Messages : 356
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : mai 2006
Messages : 356
Points : 452
Points : 452
Citation:
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 :

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
Steph4D est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/06/2006, 00h45   #8
Membre du Club
 
Inscription : juin 2006
Messages : 48
Détails du profil
Informations personnelles :
Âge : 48

Informations forums :
Inscription : juin 2006
Messages : 48
Points : 55
Points : 55
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

`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
Denis Jager est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/06/2006, 10h21   #9
Candidat au titre de Membre du Club
 
Inscription : octobre 2004
Messages : 52
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 52
Points : 10
Points : 10
Envoyer un message via ICQ à xilebo Envoyer un message via MSN à xilebo
Merci beaucoup pour vos réponses, je vais tester ca dès aujourd'hui
xilebo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/06/2006, 10h48   #10
Candidat au titre de Membre du Club
 
Inscription : octobre 2004
Messages : 52
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 52
Points : 10
Points : 10
Envoyer un message via ICQ à xilebo Envoyer un message via MSN à xilebo
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.
xilebo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/06/2006, 16h22   #11
Membre confirmé
 
Homme Michel Saiz
Développeur informatique
Inscription : juillet 2005
Messages : 185
Détails du profil
Informations personnelles :
Nom : Homme Michel Saiz
Âge : 55
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : juillet 2005
Messages : 185
Points : 254
Points : 254
Envoyer un message via MSN à michelS
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é.
michelS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2006, 12h00   #12
Invité de passage
 
Inscription : novembre 2006
Messages : 2
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 2
Points : 1
Points : 1
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
marco99 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 15h27   #13
Membre habitué
 
Avatar de if_zen
 
Homme Olivier
Développeur Java
Inscription : juin 2004
Messages : 252
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Âge : 30
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 : 252
Points : 148
Points : 148
Envoyer un message via MSN à if_zen
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 !
if_zen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 15h33   #14
Membre confirmé
 
Homme Michel Saiz
Développeur informatique
Inscription : juillet 2005
Messages : 185
Détails du profil
Informations personnelles :
Nom : Homme Michel Saiz
Âge : 55
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Industrie

Informations forums :
Inscription : juillet 2005
Messages : 185
Points : 254
Points : 254
Envoyer un message via MSN à michelS
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.
michelS est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h57.


 
 
 
 
Partenaires

Hébergement Web