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 CSV dans une table Access


Sujet :

Bases de données Delphi

  1. #1
    Membre averti Avatar de zemeilleurofgreg
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    515
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 515
    Points : 346
    Points
    346
    Par défaut Importer un fichier CSV dans une table Access
    Bonjour à tous,

    j'ai déja posé cette question dans un sujet résolu mais ...

    pourriez-vous jeter un petit coup d'oeil à ce code qui me parait correct mais me retourne pourtant le message : "CSVFile.csv n'est pas un chemin valide. Assurez-vous que le nom du chemin d'accès est correct et qu'une connexion est établie avec le serveur sur lequel réside le fichier."




    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
    procedure TfrmMain.ImportDirectCVSToBase(PathFichierCSV, NomFichierCSV:TFileName);
    const
    Requete='INSERT INTO [%s] IN "%s" SELECT * FROM %s';
    var
    cstADOCsvConnexion:string;
    begin
      try
      CreerSchemaIni(PathFichierCSV, NomFichierCSV,';');
      cstADOCsvConnexion:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;Extended Properties="text;HDR=YES;Format=Delimited"';
     
      ADOcsv.ConnectionString :=Format(cntString,[NomFichierCSV]);       
     
      ADOcsv.Execute(Format(Requete,['Q_Zmir0678',
                                         IncludeTrailingPathDelimiter(DBPath),
                                         NomFichierCSV]));
      except
      on E:Exception do
      begin
        showmessage(E.Message);
      end;
      end;
    end;
    La variable DBPath contient le chemin + le nom de la base de données.
    La variable NomFichierCSV contient le nom du fichier CSV : à savoir "CSVFile.csv"
    La variable PathFichierCSV contient le chemin du répertoire ou se trouve le fichier csv (sans le nom de fichier).

    ADOcsv est un objet TADOConnection

    voici la requête résultant du ADOcsv.Execute :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO [Q_Zmir0678] IN "D:\Applications\Borland\Delphi7\Projects\DRP BDC\DATA\DRP Prologs OUT 17_11_2006.mdb\" SELECT * FROM CSVFile.csv
    Merci d'avance
    [Il était une fois Delphi ....]


  2. #2
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ADOcsv.Execute(Format(Requete,['Q_Zmir0678',
                                         IncludeTrailingPathDelimiter(DBPath),
                                         NomFichierCSV]));
    La variable DBPath contient le chemin + le nom de la base de données.
    Pourquoi faire un IncludeTrailingPathDelimiter sur DBPath ?

    Tu dois te retrouver un anti-slash parasite à la fin.

    @+ Claudius

  3. #3
    Membre averti Avatar de zemeilleurofgreg
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    515
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 515
    Points : 346
    Points
    346
    Par défaut
    Pourquoi faire un IncludeTrailingPathDelimiter sur DBPath ?
    j'ai trouvé ce code tel quel dans un autre poste !

    j'ai essayé sans le IncludeTrailingPathDelimiter mais ça ne change rien
    [Il était une fois Delphi ....]


  4. #4
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Re,

    Autres remarques:

    il n'y aurait-il pas une confusion en cstADOCsvConnexion et cntString ?
    Tu n'utilises pas PathFichierCSV dans la chaine de connexion ?

  5. #5
    Membre averti Avatar de zemeilleurofgreg
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    515
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 515
    Points : 346
    Points
    346
    Par défaut
    il n'y aurait-il pas une confusion en cstADOCsvConnexion et cntString ?

    oups , erreur de retranscription !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ADOcsv.ConnectionString :=Format(cstADOCsvConnexion,[NomFichierCSV]);
    je n'ai pas delphi devant moi mais je crois que c'est correct dans mon code !

    Tu n'utilises pas PathFichierCSV dans la chaine de connexion ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cstADOCsvConnexion:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;Extended Properties="text;HDR=YES;Format=Delimited"';
    euhhhh ??? tu me fais hésiter !!
    [Il était une fois Delphi ....]


  6. #6
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Citation Envoyé par zemeilleurofgreg Voir le message
    euhhhh ??? tu me fais hésiter !!


    Data Source=%s
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ADOcsv.ConnectionString :=Format(cstADOCsvConnexion,[NomFichierCSV]);
    Je pense qu'il est nécessaire de préciser un chemin d'accès complet vers le csv.
    Effectue ce test et tiens nous au courant.

    @+ Claudius

  7. #7
    Rédacteur
    Avatar de Pedro
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    5 411
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 5 411
    Points : 8 078
    Points
    8 078
    Par défaut
    Citation Envoyé par Cl@udius Voir le message
    Salut
    Pourquoi faire un IncludeTrailingPathDelimiter sur DBPath ?

    Tu dois te retrouver un anti-slash parasite à la fin.
    Justement, l'intérêt de IncludeTrailingPathDelimiter, outre son nom horriblement long, est d'ajouter l'antislash que s'il n'y est pas
    mes 2cts
    Pedro
    Aucune réponse aux sollicitations techniques par MP

    Faut pas attendre d'en avoir besoin pour s'en servir... (Lucien Stéphane)

    Les pages Source C'est bon. Mangez-en!
    Le défi Delphi
    Règles du forum - FAQ Delphi - Pensez au chtit
    Aéroclub Bastia Saint-Exupéry

  8. #8
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Citation Envoyé par Pedro Voir le message
    Justement, l'intérêt de IncludeTrailingPathDelimiter, outre son nom horriblement long, est d'ajouter l'antislash que s'il n'y est pas
    mes 2cts
    Entièrement d'accord avec toi Pedro. , mais...

    Citation Envoyé par zemeilleurofgreg Voir le message
    La variable DBPath contient le chemin + le nom de la base de données.
    ... dans la mesure où DBPath contient également le .mdb je n'en vois pas l'intérêt, au contraire même.

    @+

  9. #9
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    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 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par zemeilleurofgreg Voir le message
    La variable DBPath contient le chemin + le nom de la base de données.
    Citation Envoyé par Cl@udius Voir le message
    Pourquoi faire un IncludeTrailingPathDelimiter sur DBPath ?
    Cl@udius à raison sur ce point, si on a DBPath = c:\toto.mdb alors on se retrouvera avec IncludeTraillingPathDelimiter(DbPath) = c:\toto.mdb\
    Le problème doit surement venir de la (sauf si faute de recopiage :p)

    Le mieux pour savoir et de faire un ShowMessage(DBPath) avant et après l'appel.
    Modérateur Delphi

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

  10. #10
    Membre averti Avatar de zemeilleurofgreg
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    515
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 515
    Points : 346
    Points
    346
    Par défaut
    Le mieux pour savoir et de faire un ShowMessage(DBPath) avant et après l'appel.
    j'ai déja fais le test et il me retourne effectivement un antislash après toto.mdb !

    mais le problème ne vient pas de là car j'ai essayé sans le IncludeTrailingPathDelimiter (c'est vrai qu'il est long ce truc ) ==> merci le CTRL+C / CTRL+V!!
    [Il était une fois Delphi ....]


  11. #11
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Citation Envoyé par zemeilleurofgreg Voir le message
    ...mais me retourne pourtant le message : "CSVFile.csv n'est pas un chemin valide. Assurez-vous que le nom du chemin d'accès est correct et qu'une connexion est établie avec le serveur sur lequel réside le fichier."
    Citation Envoyé par Cl@udius Voir le message
    Je pense qu'il est nécessaire de préciser un chemin d'accès complet vers le csv.
    As-tu essayé d'inclure le path dans la chaîne de connexion ?

  12. #12
    Membre averti Avatar de zemeilleurofgreg
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    515
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 515
    Points : 346
    Points
    346
    Par défaut
    As-tu essayé d'inclure le path dans la chaîne de connexion ?
    non, là ou je suis je n'ai pas delphi à ma disposition !

    dés que je rentre, je teste ça !
    [Il était une fois Delphi ....]


  13. #13
    Membre averti Avatar de zemeilleurofgreg
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    515
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 515
    Points : 346
    Points
    346
    Par défaut
    As-tu essayé d'inclure le path dans la chaîne de connexion ?
    tu parles du path du fichier csv ?
    [Il était une fois Delphi ....]


  14. #14
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Oui c'est ça.

  15. #15
    Membre averti Avatar de zemeilleurofgreg
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    515
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 515
    Points : 346
    Points
    346
    Par défaut
    As-tu essayé d'inclure le path dans la chaîne de connexion ?
    voila, j'ai essayé d'inclure le chemin du fichier csv mais sans résultat (toujours ce message d'erreur) !

    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
     
    Procedure TfrmMain.CreerSchemaIni(APath, ANameOnly: TFileName; const ADelimiteur: ShortString);
    var
    SchemaIni: TIniFile;
    begin
        SchemaIni:=Nil;
      try
        SchemaIni:=TIniFile.Create(IncludeTrailingPathDelimiter(APath)+'Schema.ini');
        SchemaIni.WriteString(ANameOnly, 'Format', 'Delimited('+ADelimiteur+')');
      finally
        SchemaIni.Free;
      end;
    end;
     
     
    procedure TfrmMain.ImportDirectCVSToBase(PathFichierCSV, NomFichierCSV:TFileName);
    const
    Requete='INSERT INTO [%s] IN "%s" SELECT * FROM %s';
    begin
      try
      CreerSchemaIni(PathFichierCSV, NomFichierCSV,';');
     
      cstADOCsvConnexion:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;Extended Properties="text;HDR=YES;Format=Delimited"';
     
      ADOcsv.ConnectionString:=Format(cstADOCsvConnexion,[NomFichierCSV]);
     BDC\DATA\OUTPUT\CSVFile.csv;Extended Properties="text;HDR=YES;Format=Delimited"';
     
      ADOcsv.Execute(Format(Requete,['Q_Zmir0678',DBPath,NomFichierCSV]));
     
      except
      on E:Exception do
      begin
        showmessage(E.Message);
      end;
      end;
    end;
    il faut savoir que le fichier Schema.Ini doit impérativement se trouver dans le même répertoire que le fichier csv.

    Et voici l'appel de la fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ImportDirectCVSToBase(aFileName, 'CSVFile.csv');
    aFileName contient le chemin du répertoire ou se trouve le csv !

    Mes chemins et noms de fichiers ont l'air d'être corrects ! je comprend pas
    [Il était une fois Delphi ....]


  16. #16
    Membre averti Avatar de zemeilleurofgreg
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    515
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 515
    Points : 346
    Points
    346
    Par défaut
    Bon !! il y a du progrès

    j'ai remplacé cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cstADOCsvConnexion:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;Extended Properties="text;HDR=YES;Format=Delimited"';
    par ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ADOcsv.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+PathFichierCSV+';Extended Properties="text;HDR=YES;Format=Delimited"';
    Tout a l'air de se passer normalement sauf que lorsque je vais voir dans ma table elle est toujours aussi vide
    [Il était une fois Delphi ....]


  17. #17
    Membre averti Avatar de zemeilleurofgreg
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    515
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 515
    Points : 346
    Points
    346
    Par défaut
    chose étrange c'est que lorsque je copie ma requete dans un TADOQuery ça fonctionne très bien.

    c'est donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ADOcsv.Execute(Format(Requete,['Q_Zmir0678',DBPath,NomFichierCSV]));
    qui déconne
    [Il était une fois Delphi ....]


  18. #18
    Membre averti Avatar de zemeilleurofgreg
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    515
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 515
    Points : 346
    Points
    346
    Par défaut
    Rectification, ça fonctionne !

    Un grand merci à tous :king

    @+
    [Il était une fois Delphi ....]


+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VB6]Importer un fichier texte dans une table ACCESS
    Par jean-pierre96 dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 26/02/2013, 15h55
  2. [AC-2003] Importer un Fichier Csv dans une table Access
    Par jmde dans le forum VBA Access
    Réponses: 6
    Dernier message: 03/01/2010, 12h35
  3. Importer un fichier csv dans une table mdb
    Par pobrouwers dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 02/12/2007, 14h17
  4. Importer un fichier CSV dans une table mySQL
    Par crazydiver_e2 dans le forum Requêtes
    Réponses: 4
    Dernier message: 16/01/2007, 10h47
  5. Impossible d'importer un fichier csv dans une table sous MySQL
    Par manue85 dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 20/04/2006, 12h06

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