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

Bases de données Delphi Discussion :

Importer un fichier dans Access


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    639
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 639
    Par défaut Importer un fichier dans Access
    Bonjour,

    Connaissez vous la méthode la plus simple et la plus rapide pour importer un fichier dans une base Access, sachant que les formats de chaque ligne du fichier et de la table sont exactement les même (mm nombre de champs). Le séparateur de champ dans le fichier est ';'.

    J'utilise Delphi 7 et ADO.

    Merci.

  2. #2
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 236
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    639
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 639
    Par défaut
    Merci, ca m'a permis d'avancer. Mais un soucis est apparu : l'accès à la base est protégé par mot de passe.
    Donc quand j'utilise un Adoconnection classique (sans utiliser de schema.ini)je mets en paramètre le mot de passe et je peux mettre a jour mes données sans problème.

    Ici l'adoconnection se fait sur schema.ini, et on ne peut donc pas specifier de mot de passe pour acceder a la base ACCESS. Donc la requete (cf FAQ) :
    INSERT INTO [Clients] IN "c:\appli\base\base.mdb" SELECT * FROM NouveauxClients.csv
    ne marche pas car je n'ai pas d'autorisation d'acceder a la table Clients.

    Avez vous une solution à mon probleme?

    Merci!

  4. #4
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 236
    Par défaut
    Avec mot de passe je ne sais pas si c'est possible.

    Sinon vu que tu peux utiliser un Dataset avec cette connexion au fichier CSV, tu peux très facilement faire une moulinette qui parcourt le CSV en réalisant des insertion sur une autre source de données. (Ca sera plus long mais tu n'auras pas le problème de mot de passe.
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  5. #5
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    639
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 639
    Par défaut
    Au début je voulais parcourir ligne a ligne le fichier, mais avec un fichier a 100000 lignes je me suis dit que ca prendrait bcp de temps. Donc je voulais voir s'il y avait un moyen plus rapide.

    En utilisant le cache ca pourrait accélérer le traitement au lieu de faire une insertion ligne a ligne?

  6. #6
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Haute Savoie (Rhône Alpes)

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 236
    Par défaut
    Voici un code que j'avais fourni il y a quelques temps a quelqu'un qui voulait insérer des données d'un fichier CSV dans un StringGrid

    Code delphi : 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
     
    var
      lst,lstLigne: TStringList;
      i,j : integer;
      Begintime, endtime,TickPerSec : int64;
    begin
     
      if OpenDialog1.Execute then
      begin
        QueryPerformanceCounter(BeginTime);
        lst := TStringList.Create;
        lstLigne := TStringList.Create;
        try
          lst.LoadFromFile(OpenDialog1.FileName);
          ProgressBar1.Max := lst.Count div 255;
          ProgressBar1.Min := 0;
          ProgressBar1.Step := 1;
          StringGrid1.RowCount := lst.Count + 1;
          StringGrid1.ColCount := 1;
          StringGrid1.Rows[0].BeginUpdate;
          for i := 0 to lst.Count -1 do
          begin
            lstLigne.Text := lst.Strings[i];
            lstLigne.Text := StringReplace(lstLigne.text,';',#13#10,[rfReplaceAll]);
            if lstLigne.Count > StringGrid1.ColCount then
              StringGrid1.ColCount := lstLigne.count -1;
            While Trim(lstLigne.Strings[lstLigne.Count-1]) = '' do
              lstLigne.Delete(lstLigne.Count-1);
            for j := 0 to lstLigne.Count -1 do
                StringGrid1.Cells[j,i+1] := lstLigne.Strings[j];
            if not ByteBool(i) then
              ProgressBar1.stepit();// := i * 100 div (lst.count -1);
    //        Application.ProcessMessages;
          end;
          StringGrid1.Rows[0].EndUpdate;
     
     
          QueryPerformanceCounter(EndTime);
          QueryPerformanceFrequency(TickPerSec);
          Showmessage(IntToStr(Round((EndTime - BeginTime) / TickPerSec * 1000)));
        finally
          lst.free;
          lstligne.free;
        end;
      end;

    Pour 40k enregistrement ca mettais dans les 1 à 2s , il ne te reste plus qu'a transformer l'envoi dans la StringGrid en envoi vers la base de données.
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

Discussions similaires

  1. Réponses: 6
    Dernier message: 30/10/2014, 11h29
  2. [XL-2010] Rechercher tous les fichiers csv d'un repertoire et les importer en table dans Access
    Par Nestea dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 30/11/2011, 14h43
  3. Réponses: 0
    Dernier message: 02/09/2010, 20h38
  4. Importer Feuil Excel dans Access
    Par beurnoir dans le forum Access
    Réponses: 2
    Dernier message: 27/10/2005, 14h13
  5. [3D'S MAX] importer des fichiers dans OpenGL
    Par black is beautiful dans le forum OpenGL
    Réponses: 3
    Dernier message: 30/04/2005, 13h45

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