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 :

Importation des données


Sujet :

Bases de données Delphi

  1. #1
    Membre actif
    Inscrit en
    Juin 2008
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 324
    Points : 217
    Points
    217
    Par défaut Importation des données
    salut.
    je récapitule:
    j'ai besoin de savoir comment importer un fichier csv vers access ,sachan que j'ai poursuivre l'exemple de zemeirlog qui j'ai trouvé dans les forum et c'elle de faq , mais il yas un probleme dans la requete insert into voila mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    procedure TForm1.Button1Click(Sender: TObject);
    const
    cstADOCsvConnexion='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s;Extended Properties="text;HDR=YES;Format=Delimited"';
    begin
    adoconnection1.ConnectionString :=Format(cstADOCsvConnexion,['c:\mes\']);
    // jusque ici pas de probleme
    adoconnection1.Execute(' insert into [mesur] in ''c:\mes\mesure.mdb''     select * from  mesure.csv');// ici il yas le probleme 
    end;
    sachant que j'utilise D7 et access 2003,le fichier mesure.csv et un fichier resultant de l'exportation de la table access mesur et que le fichier mesure.csv ne contient pas les entétes des champs et utilise le ';' comme delimiteur.
    ou est le probléme dans la requete?
    cordialement rec82.

  2. #2
    Membre actif
    Inscrit en
    Juin 2008
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 324
    Points : 217
    Points
    217
    Par défaut salut
    salut
    pour etre plus claire 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
    implementation
    
    {$R *.dfm}
    
      Procedure CreerSchemaIni(APath, ANameOnly: TFileName; const ADelimiteur: ShortString);
     {
    [MonFichier.CSV]
    Format = Delimited(;)
     }
     
    var
      SchemaIni: TIniFile;
    begin
    try
      SchemaIni:=Nil;
      SchemaIni:=TIniFile.Create(IncludeTrailingPathDelimiter(APath)+'Schema.ini');
      SchemaIni.WriteString(ANameOnly, 'Format', 'Delimited('+ADelimiteur+')');
     finally
      SchemaIni.Free;
     end;
    end;
    procedure tform1.importercsv(adoobject:tadoconnection;pathcsv,nomcsv,dbpath:tfilename;table:string;delimiteur:char);
     const  Requete='INSERT INTO [%s] IN "%s" SELECT * FROM %s';
    begin
     try
     creerschemaini(pathcsv,nomcsv,delimiteur);
     adoobject.close;
     adoobject.connectionstring:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source='+pathcsv+';Extended Properties="text;HDR=YES;Format=Delimited"';
     adoobject.execute('INSERT INTO mesur IN "c:\mes\mesure.mdb" SELECT * FROM mesure.csv' );
     except
     on e:exception do
     begin
     showmessage(e.message);
     end;
     end;
     end;
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    importercsv(adc1,'c:\mes\','mesure.csv','c:\mes\mesure.mdb','mesur',';');
    showmessage('fin')
    end;
    sachant que adc1 est un adoconnection .
    un message d'ereur aux cour de compliation dans la ligne mensionner en rouge
    me dit:
    ... instruction insert into contien le nom de champs inconnu suivant:'16' .assurez-vous que vous avez correctement saisie le nom puis recommencez
    l'opération...
    qu'elle est l'origine de probleme?
    cordialement rec28.

  3. #3
    Membre actif
    Inscrit en
    Juin 2008
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 324
    Points : 217
    Points
    217
    Par défaut salut
    salut
    pardant la ligne en rouge c'est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     adoobject.execute(Format(Requete,[table, dbpath,NomCSV]) );
    cordialement.

  4. #4
    Membre actif
    Inscrit en
    Juin 2008
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 324
    Points : 217
    Points
    217
    Par défaut salut.
    salut.
    enfin j'ai procédé à une solution déférente de la premiere;avec un seule probléme si le champ et de type numéroauto:

    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
     
    procedure TForm1.Button1Click(Sender: TObject);
    var f:tstringlist;
    s,fie:string;
    col,posdelem:integer;
    vt:variant;
    begin
    f:=tstringlist.Create;
    f.LoadFromFile('c:\mes\mesure.csv');
    showmessage('fin');
    s:=f.Strings[0];
    //edit1.Text:=inttostr(f.Count);
    //listbox1.Items[0]:=s;
    //f.Free;
    t.Insert;
    col:=0;
    repeat
    posdelem:=pos(';',s);// position de dilimiteur dans le string S
        if posdelem> 0 then
            fie:=copy(s,1,posdelem-1)
            else
            fie:=s;
    // :*******************************************************
    vt:=vartype(t.Fields[col].Value);
     
    case vt of vtinteger,vtextended,vtcurrency,vtint64:
       t.fields[col].AsInteger:=strtoint(fie) //traitement principal
       else
        t.fields[col].AsString:=fie;
       end;
    //*********************************************************
       if posdelem>0 then
            delete(s,1,posdelem);
            col :=col+1;
    until posdelem=0 ;
    t.Post;
    showmessage('fin transmission');
    end;
    t:at un adotable.
    delem:et un delimiteur(j'aiutilisé le ; )
    posdelem:position de delimiteur.

    donc voila ma solution ,si quelqun à des remarque ou des ajout je serai trés heureus de votre participation.

    cordialement rec82.

  5. #5
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Si tu utilise cette importation/exportation de données dans d'autres endroits de ton projet alors essai de la rendre une fonction paramétrable.
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  6. #6
    Membre actif
    Inscrit en
    Juin 2008
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 324
    Points : 217
    Points
    217
    Par défaut salut
    salut.
    merci just soft pour la remarque;j'ai posé juste l'idé,j'essai de le rendre paramétrable.
    merci autre fois .
    cordialement rec82

  7. #7
    Membre actif
    Inscrit en
    Juin 2008
    Messages
    324
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 324
    Points : 217
    Points
    217
    Par défaut salut
    salut.
    voila une petite modification suivant la conseil de just soft:
    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
     
    procedure tform1.importer(t:tadotable;delem:char;cheminf:string);
    var f:tstringlist;
        i,col,posdelem:integer;
        vt:variant;
        s,l:string;
    begin
    f:=tstringlist.create;
    f.LoadFromFile(cheminf);
    for i:=0 to f.Count-1 do
        begin
         s:=f.strings[i];
         t.Insert;
         col:=0;
              repeat
               posdelem:=pos(delem,s);
               if posdelem >0 then
               l:=copy(s,1,posdelem-1)
               else
               l:=s;
               vt:=vartype(t.Fields[col].Value);
               case vt of vtinteger,vtextended,vtcurrency,vtint64:
               t.Fields[col].AsInteger:=strtoint(l);
               else
               t.Fields[col].asstring:=l;
               end;
               if posdelem >0 then
               delete(s,1,posdelem);
               col:=col+1
               until  posdelem=0;
               t.Post;
     
        end;
         f.Free;
    end;
    et en fait appelle à cette procedure comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TForm1.Button2Click(Sender: TObject);
    begin
    opendialog1.Execute;
    importer(t,';',opendialog1.FileName)  ;
    showmessage('fin transmission');
    end;
    si il ya des suggestions ou modifications je suis preneur et merci .
    cordialement rec82.

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

Discussions similaires

  1. Importer des données XML
    Par Oberown dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 26/07/2005, 12h59
  2. Importer des données grace a des *.cvs dans MySQL
    Par Mic0001 dans le forum Installation
    Réponses: 3
    Dernier message: 05/01/2005, 19h26
  3. [CR]Importer des données d'une feuille excel
    Par rolan dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 17/12/2004, 22h32
  4. Réponses: 3
    Dernier message: 13/12/2004, 13h54
  5. Importer des données dans sql server avec DELPHI ???
    Par moutanakid dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 11/08/2004, 17h22

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