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

Accès aux données Discussion :

importation des fichier dbf a une base oracle 9i


Sujet :

Accès aux données

  1. #1
    Membre du Club Avatar de sws2008
    Inscrit en
    Avril 2008
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 108
    Points : 64
    Points
    64
    Par défaut importation des fichier dbf a une base oracle 9i
    bonjour tout le monde
    je sois en train de réaliser une application avec c# et oracle 9i et l'une des phase que suis entrain de faire et d'importer des fichier avec une extension dbf à ma base oracle mais je ne sais pas comment faire aidez moi svp

  2. #2
    Rédacteur
    Avatar de Paul Musso
    Profil pro
    Inscrit en
    Août 2008
    Messages
    368
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2008
    Messages : 368
    Points : 443
    Points
    443
    Par défaut
    Bonjour,

    Une solution serait de passer par un format intermédiaire que peut exporter FoxPro et peut importer Oracle. Le format CSV devrait fonctionner, mais si la volumétrie des données est trop importante, faut passer par un outil de migration.

    Je crois que Oracle en fournit un ... Mais je ne me rappelle plus du nom.

    EDIT :
    Oracle Migration Workbench

  3. #3
    Membre du Club Avatar de sws2008
    Inscrit en
    Avril 2008
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 108
    Points : 64
    Points
    64
    Par défaut
    Svp connais-tu un tutorial consernant l'utilisation de oracle migration workbench ?
    merci

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Essaie d'exporter les données dBase vers le format SQL*Loader, et de les importer dans Oracle avec SQL*Loader

    Ou encore, tu peux passer par un DataSet et 2 DataAdapters :
    - un 1er DataAdapter (OdbcDataAdapter par exemple) charge dans le DataSet les données de la base d'origine
    - un second DataAdapter (OracleDataAdapter) qui insère les lignes dans la base de destination
    Code C# : 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
     
    // DataAdapter "origine"
    DbDataAdapter sourceAdapter = new OdbcDataAdapter();
    sourceAdapter.SelectCommand = sourceConnection.CreateCommand();
    sourceAdapter.SelectCommand.CommandText = "SELECT * FROM uneTable";
    sourceAdapter.AcceptChangesDuringFill = false; // nécessaire pour que les lignes chargées soient prises en compte par Update
     
    // DataAdapter "destination"
    DbDataAdapter targetAdapter = new OracleDataAdapter();
    targetAdapter.SelectCommand = targetConnection.CreateCommand();
    targetAdapter.SelectCommand = "SELECT * FROM uneTable";
    // On utilise un CommandBuilder pour générer automatiquement les commandes UPDATE/INSERT/DELETE
    DbCommandBuilder targetCommandBuilder = new OracleCommandBuilder();
    targetCommandBuilder.DataAdapter = targetAdapter;
     
    // On charge dans un DataSet les données de la base d'origine :
    DataSet ds = new DataSet();
    sourceAdapter.Fill(ds);
     
    // On insère les données dans la base de destination :
    targetAdapter.Update(ds);

    (ça suppose d'avoir d'abord créé la structure des tables dans Oracle)

    Cette dernière méthode fonctionne bien dans le cas que j'ai testé, mais je ne sais pas si ce sera toujours le cas... de plus, si le volume de données est important, il faudra envisager un transfert des données par blocs pour ne pas saturer la mémoire.

  5. #5
    Membre du Club Avatar de sws2008
    Inscrit en
    Avril 2008
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 108
    Points : 64
    Points
    64
    Par défaut
    merci tomlev pour ta réponse et je m'excuse pour pour ma faute de poster deux fois le méme sujet ;
    je vais l'essayer maintenant
    a+++

  6. #6
    Membre du Club Avatar de sws2008
    Inscrit en
    Avril 2008
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 108
    Points : 64
    Points
    64
    Par défaut
    j'ai essaye la premiere methode de sql loader ça marché avec un fichier txt,csv,dat mais avec un fichier dbf non

    et la methode il faut que je converti les fichier dbf en fichier dbf pour foxpro

    mais j'ai choisit de travailler avec sql loader et je voudrais savoir est ce qu'il y a une solution pour les extension dbf
    thanks

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    SQL*Loader n'acceptera pas directement un fichier dbf
    Comme je te l'ai dit dans le précédent message, il faut d'abord extraire les données de la base DBF pour les mettre sous forme de fichier texte lisible par SQL*Loader.

  8. #8
    Membre du Club Avatar de sws2008
    Inscrit en
    Avril 2008
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 108
    Points : 64
    Points
    64
    Par défaut
    j' ai fais l'extraction des fichier dbf dans un fichier txt a l'aide d'un fichier .bat mais les donné sont mis dans ce fichier txt n'importe comment .
    alors j'ai refais l'extraction sur un fichier.csv ,ici les données son bien classer mais rien ne se passe lorque j'excute sqlldr voici mon code du fichier control:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    LOAD DATA INFILE 'E:\dbf\icxcf.csv'
    TRUNCATE
    INTO TABLE ICXCF
    FIELDS TERMINATED BY ';'
    (  Msize ,    
     Psize        
    )

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    il ressemble à quoi ton fichier CSV ?

  10. #10
    Membre du Club Avatar de sws2008
    Inscrit en
    Avril 2008
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 108
    Points : 64
    Points
    64
    Par défaut
    il rassemble a un fichier xls
    j'ai trouver l'astuce pour le fichier csv alors j'ai crée un csv avec un séparateur ";" mais mon problème maintenant et dans le fichier .bat c'est comment ne pas copier la premiere ligne de mon fichier .dbf
    voici le contenu du fichier .bat::
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    @echo
    pause
    xcopy e:\dbf\icxrd.dbf  e:\dbf\icxrd.csv
    car je copier avec cette commande il va génerer dans le .csv le nom du colone se qui empeche l'alimentation de ma table oracle avec sqlldr.
    extrait du fichier .csv:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    REGISTER;LIGNE;DF;DT;VAL;QTY;QTY2;TEXT------>je voudrais enlevé cette ligne
    6458;1;20060525;06/01/2006;78,000;7;1;SCHMIDT
    7365;1;20060531;06/01/2006;80,000;1;2;JOMMA

  11. #11
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Le format dbf c'est du texte ??? je pensais que c'était un format binaire...

    Pour sauter la première ligne tu peux ajouter SKIP=1 dans le fichier de contrôle (ou un truc comme ça)

  12. #12
    Expert éminent sénior

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    19 647
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 19 647
    Points : 32 889
    Points
    32 889
    Par défaut
    Les bases de données dBase sont bien en format texte, avec un header descriptif, qui est différent selon la version dBase évidemment

  13. #13
    Membre du Club Avatar de sws2008
    Inscrit en
    Avril 2008
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 108
    Points : 64
    Points
    64
    Par défaut
    les base dbase ne sont pas sous format text il ont 'lextension dbf mais vu que je peux pas imoprter directement du format txt il fallait que je copier le contenu de dbf vers un fichier text ou csv pour pouvoir l'utiser avec sqlldr mais le pb persiste encore car j'ai pas trouver une solution pour copier le contenu d'un dbf dans txt ou csv avec un separateur resultat voulu un fichier comme ça sous cette forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    6458;1;20060525;06/01/2006;78,000;7;1;SCHMIDT
    7365;1;20060531;06/01/2006;80,000;1;2;JOMMA
    mais ce que j'obtient c'est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      "M                    REGISTER ÂQCw| êŒÂ" LIGNE ER ÂQNw| êŒÂ" DF NE ER ÂQDw| êŒÂ" DT NE ER ÂQDw| êŒÂ" VAL E ER ÂQNw|Â
    êŒÂ" QTY E ER ÂQNw| êŒÂ" QTY2  ER ÂQNw| êŒÂ" TEXT  ER ÂQCw| êŒÂ" 
          6458   12006052520060601    78.000   7   1SCHMIDT                            7365   12006053120060601    80.000   1   2JOMMA                              2673   12006052520060601   313.600   1   2DELEFOSSE                          2674   12006052520060601   313.600   1   2DELAMARRE                          7366   12006053120060601    85.000   1   1ASAKRI                             2675   12006052520060601   425.600   1   1JLAIEL                             2626   12006051820060601   627.200   1   2BRANLANT                           2627   12006051820060601     0.000  14   0BRANLANT                           7467   12006060120060601     0.000   0   0chef cuisine italien               7469   12006060120060601     0.000
    alors il fallait que j'ouvre le fichier csv et je le ré-enregistre sous le format csv(séparateur:point virgule) comme ça je peut le loader avec sqlldr ....

  14. #14
    Expert éminent sénior

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    19 647
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 19 647
    Points : 32 889
    Points
    32 889
    Par défaut
    Citation Envoyé par sws2008 Voir le message
    les base dbase ne sont pas sous format text il ont l'extension dbf
    Et alors ?
    Il s'agit bien de format texte.
    un .csv est aussi un format texte.

    Ce qu'il te faut c'est utiliser un logiciel qui peut lire une base de données DBase pour experter tes données.
    Tes tentatives via un .bat et des copies de fichiers ou des changements d'extension sont vouées à l'échec.

    (inutile d'ouvrir plusieurs discussions, ton problème est d'importer une base dBase dans Oracle pas de savoir comment copier un fichier via un .bat)

  15. #15
    Membre du Club Avatar de sws2008
    Inscrit en
    Avril 2008
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 108
    Points : 64
    Points
    64
    Par défaut
    connais tu un logiciel free qui fait ça??

  16. #16
    Membre du Club Avatar de sws2008
    Inscrit en
    Avril 2008
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 108
    Points : 64
    Points
    64
    Par défaut
    Re-Bonjour
    vu que j'ai pas trouvée de solution efficace avec sqlldr j'ai essayé de travailler avec la deuxièmme méthode proposé par tomlev .
    j'ai realiser une nouvelle connection odbc et la connection effectuer voici mon code:
    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
     
                string chaine1 = "Dsn=db_debiteur;uid=iw;pwd=iw";
                string chaine2 = "Data Source=rapport;User Id=user_rp;Password=rapport;Unicode=true";
     
     
                try
                {
     
     
                    OdbcConnection con1 = new OdbcConnection(chaine1);
                    con1.Open();
                    string req="select * from icxrm";
                    //data adapter pour la source de donnée odbc(origine)
                   OdbcDataAdapter sourceAdapter = new OdbcDataAdapter(req,con1);
                    dts_rm_importation dts_source=new dts_rm_importation();
                    sourceAdapter.Fill(dts_source, "icxrm");
     
     
                    //partie pour dataadapter pour la source de déstination oracle
     
                    OracleConnection con2 = new OracleConnection(chaine2);
                    con2.Open();
                    DataRow[] dr = dts_source.Tables["icxrm"].Select();
     
                    string req2="select * from icxrd";
                    dts_destination dts_cible=new dts_destination();
                    OracleDataAdapter cible_adap = new OracleDataAdapter(req2, con2);
                    cible_adap.Fill(dts_cible, "icxrm");
                    DataRow dest = dts_cible.Tables["icxrm"].NewRow();
                   for (int i = 0; i < dr.Length; i++)
                   {
                    dest["REGISTER"] = dr[i]["REGISTER"].ToString();
                    dest["ARR"] = dr[i]["ARR"].ToString();
                    dest["DEP"] = dr[i]["DEP"].ToString();
                    dest["NAME"] = dr[i]["NAME"].ToString();
                    dest["ROOM"] = dr[i]["ROOM"].ToString();
                    dest["RKAT"] = dr[i]["RKAT"].ToString();
                    dest["GONE"] = dr[i]["GONE"].ToString();
                    dest["RFIXE"] = dr[i]["RFIXE"].ToString();
                    dest["REXTRA"] =dr[i]["REXTRA"].ToString();
                    dest["RPAYM"] = dr[i]["RPAYM"].ToString();
                    dest["IMPORTED"] = dr[i]["IMPORTED"].ToString();
                    dts_cible.Tables["icxrd"].Rows.Add(dest);
                    OracleCommandBuilder cmd3 = new OracleCommandBuilder(cible_adap);
                    cible_adap.InsertCommand = cmd3.GetInsertCommand();
                    cible_adap.Update(dts_cible, "icxrm");
                    MessageBox.Show("bien fait");
     
                   }
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }
    mail lors de l'exécution du prg le message suivant s'affiche
    Images attachées Images attachées  

  17. #17
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    ben ça semble assez clair... tu n'as pas le droit d'accéder au fichier en question

  18. #18
    Membre du Club Avatar de sws2008
    Inscrit en
    Avril 2008
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 108
    Points : 64
    Points
    64
    Par défaut
    mais le pb lorsque j'effectue une requête de sélection avec le graphique ça marche pour la première fois et après de terminer la phase du graphique et je fais preview data du odbcdatadapter ne fonctionne pas
    voici le résultat de la première fois:
    Images attachées Images attachées  

Discussions similaires

  1. [MySQL] Importer des fichiers XML dans une base de données (Easyphp)
    Par Boujoute dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 01/12/2011, 00h13
  2. Importer un fichier excel dans une base Oracle
    Par miketidy dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 16/07/2008, 15h33
  3. Insertion des fichiers pdf dans une base oracle
    Par arezki76 dans le forum SQL
    Réponses: 2
    Dernier message: 20/07/2007, 16h39
  4. importer des données XML dans une base Oracle 9
    Par lanfeustdetroll dans le forum JDBC
    Réponses: 3
    Dernier message: 19/07/2007, 00h09
  5. [Stratégie] Afficher des fichiers PDF depuis une base Oracle
    Par tetram51 dans le forum Développement Web en Java
    Réponses: 3
    Dernier message: 20/12/2005, 09h15

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