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

WinDev Discussion :

Importer des données dans HF depuis une DB externe


Sujet :

WinDev

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    69
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 69
    Points : 64
    Points
    64
    Par défaut Importer des données dans HF depuis une DB externe
    Bonjour à tous,

    J'aurais bien besoin de vos lumières pour m'éclaircir les idées...

    L'étape de mon projet qui me cause des soucis est la suivante.

    J'ai un répertoire qui contient des fichiers ACCESS("mdb").
    Je veux lire les infos qu'ils contiennent et les recopier dans une base HyperFile (HF) unique. J'ai isolé les étapes suivantes :
    1. Lister les fichiers "mdb" de mon répertoire
    2. Pour chaque fichier "mdb" lister les tables.
    3. Pour chaque table : si elle n'existe pas, créer un fichier HF et le lier à la base globale. Sinon ne rien créer.
    4. Finalement : transférer chaque donnée de la base access vers la table correspondante en HF


    Et là franchement je m'y perds à partir du point 3...

    Mon embryon de code est le suivant :

    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
     
     
    PROCEDURE ajout_data()
    table, listetable est une chaîne 
    cnxAccess_tmp_db est une Connexion
    test est un booléen
     
    //Ouverture de la DB Access
    HDécritConnexion("cnxAccess_tmp_db","","","C:\DB_globale\DBimport\20ST.mdb","",hOledbAccess2007,hOLectureEcriture )
     
    SI PAS (HOuvreConnexion("cnxAccess_tmp_db")) ALORS
    	Erreur("Erreur HyperFileSQL : " + HErreurInfo())
    FIN
     
    listetable=HListeFichier("","","C:\DB_globale\DBimport\20ST.mdb",hOledbAccess2007, hOLectureEcriture)
     
    //Pour chaque table de la table access, on la crée dans la base HF si elle n'existe pas
    POUR TOUTE CHAINE table DE listetable SEPAREE PAR RC
     
    	SI PAS HCréationSiInexistant(table) ALORS
    		Message ("erreur création d'une table")
    	FIN
    FIN
    J'ai ouvert une connexion que je ne sais pas utiliser. J'ai tenté un Hlitpremier() mais il ne fonctionne pas. Ceci dit sans connaitre le nom de la table et de la rubrique comment remplir un Hlit()?!?

    Je trouve le nom des tables à l'aide de "HListeFichier()" qui n'utilise pas la connexion créée avant et me fait douter de l'utilité de celle-ci...

    Mais là où je bloque complètement c'est que "HCréationSiInexistant" renvoie cette erreur lors de l'exécution :

    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
     
    Erreur à la ligne 34 du traitement Procédure globale ajout_data.
    Vous avez appelé la fonction HCréationSiInexistant.
    Fichier <Avis cardiologique (10434)> inconnu dans l'analyse <G:\Mes Projets\fusion de DB et DB globale\fusion de DB et DB globale.wdd>, ou requête ou vue non initialisée.
    Si il s'agit d'une requête, l'exécution de cette requête a peut-être échoué.
     
    ----- Informations techniques -----
     
    Projet : fusion de DB et DB globale
     
    Appel WL :
    Traitement de 'Procédure globale ajout_data' (COL_ProcéduresGlobales.ajout_data), ligne 34, thread 0
    Fonction 'HCréationSiInexistant', syntaxe 1
     
    Que s'est-il passé ?
    Fichier <Avis cardiologique (10434)> inconnu dans l'analyse <G:\Mes Projets\fusion de DB et DB globale\fusion de DB et DB globale.wdd>, ou requête ou vue non initialisée.
    Si il s'agit d'une requête, l'exécution de cette requête a peut-être échoué.
    Naïvement sans doute je trouve ça logique que mon fichier ne soit pas connu vu que je lui demande de le créer. Windev n'est pas de mon avis!!!!

    Pour synthétiser mes questions :
    • Comment puis-je communiquer avec ma base Access une fois la création de la connexion effectuée?
    • Comment le futur programme va-t-il savoir quelle est la DB concernée par un HLit() ("mdb" ou HF)? HChangeConnexion() que je vois souvent dans les forums (et dont je ne comprends pas le sens) a-t-il un rapport avec ceci?
    • Si je crée une table HF dois je l'ajouter dynamiquement à mon analyse ou l'analyse correspond uniquement au projet avant compilation? A ce sujet, à chaque fin d'exécution il me dit que l'analyse "fusion de DB et DB globale.wdd" a changé et me demande si je veux synchroniser mon projet?!?
    • comment créer les liens entre les différentes tables de façon dynamique (je sais que chaque table aura une clé dont je peux déterminer le nom)... Le "HGèreIntégrité" a-t-il un rapport avec ça?
    • Je vois aussi souvent la référence à HDeclareExterne() pour accéder à des bases access ce qui n'apparait pas dans l'aide ou que je ne pige pas.


    Voilà je suis très loin du bon chemin et franchement c'est pas faute de lire et chercher!

    J'espère qu'une bonne âme voudra bien me mettre sur la voie!

    Merci d'avance et bonne soirée.

  2. #2
    Membre chevronné Avatar de EDM-TAHITI
    Homme Profil pro
    Directeur Service informatique et projet développement
    Inscrit en
    Janvier 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Directeur Service informatique et projet développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 994
    Points : 1 998
    Points
    1 998
    Par défaut
    Hello,
    Je t'invite à regarder l'aide (F1+index+access, c'est magique, comme à spa francorchamps), tu y verras quasiment tout ce qu'il faut faire pour réaliser ce que tu veux...
    Bon dev
    le savoir est dans les livres, 'the magic touch F1'
    Amicalement
    Eric

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    69
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 69
    Points : 64
    Points
    64
    Par défaut
    Bonjour,

    C'est parceque je ne m'y retrouve pas conceptuellement que je demande de l'aide sur ce forum. J'ai cherché dans l'aide et sur divers forums mais c'est le coté dynamique de l'analyse qui ne va pas. Avec une analyse fixe ce serait déjà fait : on importe l'analyse depuis Access et on suit la procédure.

    Je ne demande donc pas l'explication des fonctions que je cite mais leur cadre d'utilisation et le rôle de l'analyse dans un projet...

    Merci pour votre réponse et bonne journée

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    555
    Détails du profil
    Informations personnelles :
    Localisation : Laos

    Informations forums :
    Inscription : Mars 2003
    Messages : 555
    Points : 1 197
    Points
    1 197
    Par défaut
    Bonjour,

    Si j'ai bien compris votre problématique, c'est la création des fichiers HF physiquement sur le disque dur sans passer par une analyse. Essayer le code suivant issu de l'aide de Windev :

    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
     
    MonFichier est une Description de Fichier
    MaRubrique est une Description de Rubrique
    CLIENT est une Source de Données
     
    // Description du fichier "CLIENT"
    MonFichier..Nom = "CLIENT"
    MonFichier..Type = hFichierNormal
    MonFichier..CryptageFic = hCryptageStandard
     
    // Description de la rubrique "NOM"
    MaRubrique..Nom = "NOM"
    MaRubrique..Type = hRubTexte
    MaRubrique..Taille = 40
    MaRubrique..TypeClé = hCléUnique
    HDécritRubrique(MonFichier, MaRubrique)
     
    // Description de la rubrique "PRENOM"
    MaRubrique..Nom = "PRENOM"
    MaRubrique..Type = hRubTexte
    MaRubrique..Taille = 40
    HDécritRubrique(MonFichier, MaRubrique)
     
    // Valide la description du fichier
    HDécritFichier(MonFichier)
    ...
     
    // Création du fichier Client (reconnu car déclaré comme source de données)
    HCreation(CLIENT)
     
    // Création d'un enregistrement
    CLIENT.NOM = "Dupont"
    CLIENT.PRENOM = "André"
    HAjoute(CLIENT)
    Comme vous pouvez le voir, un fichier : client.fic / client.ndx est généré automatiquement.

    La partie "intéressante" pour votre algo c'est qu'il vous faudra balayer en plus des tables Ms-Access, les champs de chaque table puis déterminer leur type afin de créer une réplique HF de la table MS-Access...

    Bon courage.

  5. #5
    Membre régulier
    Homme Profil pro
    developpeur
    Inscrit en
    Mai 2011
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Togo

    Informations professionnelles :
    Activité : developpeur
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2011
    Messages : 77
    Points : 80
    Points
    80
    Par défaut
    Bonjour,

    Je ne suis pas un professionnel , mais j'essais un peu de refléchir à ton problème.

    selon moi , lorsque la connexion est crée, tu dois pouvoir avoir accès aux données de la base externe. c'est ce que je ne comprends pas ?. ta connexion te permet d'avoir accès à la base MDB que tu as précisé, mais quelle table du fichier MDB veut tu manipuler, je crois qu'elle doit être précisé dans la description de la connexion à moins que je me trompe. Comparativement aux étapes de création d'un fichier basé sur un fichier externe, si tu prête attention tu verra , qu'après connexion, l'assistant ouvre le fichier MDB en question et te demande de choisir la table à laquelle tu veux connecter le fichier à créer.

    ta fonction listefichier, liste -t-elle, les bases access trouvées ou bien les tables trouvées ? ceci peut exliquer pourquoi tu n'arrive pas à manipuler les données, tu doit attenidre une table.

    Concernant la fonction Hcréesinexistant (table), Selon toi , la fonction vérifie l'existance de quelle type de fichier , et crée quelle type de fichier ( .fic), le problème peut être là.

    Concernant l'analyse, c'est normal que le rprogramme te demande de la sychronisation à chaque analyse, c'est pour prendere en copmte les nouveaux changements ( nouveau fichier, liaison, modification,) de l'analyse dans le projet .

    analyse un peu

    a plus

  6. #6
    Membre chevronné Avatar de EDM-TAHITI
    Homme Profil pro
    Directeur Service informatique et projet développement
    Inscrit en
    Janvier 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Directeur Service informatique et projet développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2010
    Messages : 994
    Points : 1 998
    Points
    1 998
    Par défaut
    Hello,
    Si la solution de kinansoag est pertinente, il n'est reste pas moins vrai que tu dois décrire dans ton analyse WD la structure des fichiers, au risque pour toi de ne pouvoir lire tes données puisque les table HF sont décrites en dynamiques.
    Importe donc la description de fichier MDB dans ton analyse et tu pourras alors faire l'importation sans aucun soucis et utiliser à volonter les données importées...
    le savoir est dans les livres, 'the magic touch F1'
    Amicalement
    Eric

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    69
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 69
    Points : 64
    Points
    64
    Par défaut
    Bonjour à tous.

    Beaucoup de pistes à analyser... Je vais essayer et vous donnez des nouvelles mais d’ores et déjà un tout grand merci pour votre aide.

Discussions similaires

  1. Réponses: 4
    Dernier message: 11/03/2011, 14h45
  2. Importer des données dans une liste déroulante
    Par slacky dans le forum Microsoft Dynamics CRM
    Réponses: 10
    Dernier message: 23/08/2010, 18h07
  3. problème d'import des données dans une base de donnees oracle 10g
    Par abderrahman86 dans le forum Import/Export
    Réponses: 4
    Dernier message: 14/05/2009, 17h42
  4. comment importer des données dans une table paradox
    Par pierrot67 dans le forum Bases de données
    Réponses: 6
    Dernier message: 02/08/2007, 18h32
  5. Importer des données dans une table.
    Par nodogeid dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 20/06/2007, 12h08

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