Problème d'importation de fichier csv dans access avec delphi
cs_kami59
Messages postés24Date d'inscriptiondimanche 9 novembre 2008StatutMembreDernière intervention 5 mai 2009
-
24 avril 2009 à 21:28
cs_jjgone -
12 nov. 2011 à 17:47
Kami.59
Bonjour à tous et à toutes.
J'ai un petit souci et j'espère que quelqu'un sera résoudre mon problème.
J'ai créé un petit programme pour importer un fichier csv dans une base access.
La manip fonctionne bien mais malheureusement je me retrouve avec des champs vides.
Après quelques recherches, j'ai trouvé que c'est lié au texte alphanumérique comme "4B" par exemple.
j'ai essayé d'inclure 10 enregistrements texte dans ma table avant d'importer mais rien n'y fait.
Ce qui est bizarre, c'est que si j'importe manuellement depuis access, je n'ai aucun souci.
Quelqu'un aurait-il une réponse ou une piste sur mon problème car là je séche.
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 202113 30 avril 2009 à 12:53
TWideStringField ?
mais ceci n'apparaît nulle part...
moi, j'ai une forme avec trois composants :
TADOConnection + TADOQuery (avec sql (select * from TImport)
bien sûr par habitude j'ai rentré les champs dans le query)
et un TBUTTON.
cs_cantador
Messages postés4720Date d'inscriptiondimanche 26 février 2006StatutModérateurDernière intervention31 juillet 202113 30 avril 2009 à 22:28
essayant avec les données
de mon fichier csv, j'ai le même souci.
ben tu as trouvé la réponse...
ton fichier n'est pas de la forme .csv
ce n'est pas parce que tes données sont séparées par un point-virgule que ton fichier acquière cette qualité..
il faut faire attention car quelquefois des caractères invisibles (retour chariot, blanc etc par exemple..) viennent polluer le fichier..
Le mieux est de placer tes données dans un tableau EXCEL et d'enregistrer le tout au format .csv. (enregistrer sous..)
cs_kami59
Messages postés24Date d'inscriptiondimanche 9 novembre 2008StatutMembreDernière intervention 5 mai 20091 30 avril 2009 à 23:25
Dans le cas où le csv ne fonctionne pas, serais-tu comment importer directement via delphi de excel vers access les champs code et champs de 1 à 3 par exemple. et celà pour un nombre d'enregistrements indéfini?
car là avec cette histoire de fichier csv je désespère complétement.
rec1982
Messages postés6Date d'inscriptionsamedi 14 avril 2007StatutMembreDernière intervention 5 mai 2009 1 mai 2009 à 21:38
salut cantador et kami59 ,j'ai le meme probleme avec le meme source de kami ; je l'ai télécharger apartir d'un site fronco mais il me sort le meme probleme; sachant que j'ai reussi avec exportation to csv mais avec importation je travail sur ce probleme.
si je reussi je t'envois la solution cordialement
rec1982
Messages postés6Date d'inscriptionsamedi 14 avril 2007StatutMembreDernière intervention 5 mai 2009 3 mai 2009 à 00:14
salut ami.
j'ai trouvé la solution ,dés que j'ai résolus le probléme ,j'ai essayé de vous contacté mais le proxy chaque fois ferme la page acause des images dans le site,
donc je suis à la maison et je peut vous envoyé la solurion:
/////////////////////////////////////////////*********** CODE SOURC***********//////
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> 0then
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>0then
delete(s,1,posdelem);
col :=col+1;
until posdelem=0 ;
t.Post;
showmessage('fin transmission');
end;
////////////////////////////////////************************fin de source*****************
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 rec1982.
en effet j'ai posé le meme probleme dans un autre forum et voici le lien
si vous ne comprener pas quelque chose je suis là ,mais aprés les heure de travail.(si tu veut l'exportation je suis là).
remarque :
j'ai importer que la premiere ligne.je veut donnerais la version final plus tard.
cordialement.<!-- / message --><!-- edit note -->
rec1982
Messages postés6Date d'inscriptionsamedi 14 avril 2007StatutMembreDernière intervention 5 mai 2009 3 mai 2009 à 22:09
salut.
j'ai fini l'importation de touts les lignes ,j'ai pas pu vous contactés acause des images de bla bla dans ce site et mon proxy ferme la page automatiquement.
poour cantador ,c'est vrais que sql et plus rapide ,c'est tu trouve le code avec sql qui permet de faire importation je suis preneur.
pour kami59:
////////////////////////////////////////////////////////////////////:::::::::::::
salut.
voila une petite modification ,pour toutes les lignes:
Code :
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:=0to f.Count-1dobegin
s:=f.strings[i];
t.Insert;
col:=0;
repeat
posdelem:=pos(delem,s);
if posdelem >0then
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 >0then
delete(s,1,posdelem);
col:=col+1until posdelem=0;
t.Post;
end;
f.Free;
end;
et en fait appelle à cette procedure comme ça:
Code :
procedure TForm1.Button2Click(Sender: TObject);
begin
opendialog1.Execute;
importer(t,';',opendialog1.FileName) ;
showmessage('fin transmission');
end;