Problème d'importation de fichier csv dans access avec delphi

cs_kami59 Messages postés 24 Date d'inscription dimanche 9 novembre 2008 Statut Membre Derniè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.

HELP!!!!!!!!!!!!!!!!!!!!!

Merci d'avance.

50 réponses

cs_kami59 Messages postés 24 Date d'inscription dimanche 9 novembre 2008 Statut Membre Dernière intervention 5 mai 2009 1
30 avril 2009 à 12:42
Bonjour cantador,

Le type du champ "CODE" est 'texte', il n'a pas de clé primaire. tous les autres champs sont en texte aussi.

Je pense que le problème pourrait éventuellement venir des TWideStringField car je n'en ai pas déclaré dans mon prog.

Ils sont placés dans quel composant?

Kami.59
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
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.

Utilises le code fourni et tu verras ça marche !

cantador
0
cs_kami59 Messages postés 24 Date d'inscription dimanche 9 novembre 2008 Statut Membre Dernière intervention 5 mai 2009 1
30 avril 2009 à 15:28
Euhhh,

J'ai fait l'essai et ça ne marche pas.
Comment je dois faire pour t'envoyer mon prog avec ta source? 

Kami.59
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
30 avril 2009 à 17:15
Non, je préfère t'envoyer le mien..
envoie ton email par MP.

cantador
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_kami59 Messages postés 24 Date d'inscription dimanche 9 novembre 2008 Statut Membre Dernière intervention 5 mai 2009 1
30 avril 2009 à 18:09
je t'ai envoyé l'adresse.

Kami.59
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
30 avril 2009 à 19:59
ça y est le zip est transmis..


je pense que tu devrais pouvoir comparer les sources et trouver le petit "os" qui ne va pas..


car il faut aussi prendre en compte les paramétrages des composants que l'on ne voit évidemment pas sur le forum..

cantador
0
cs_kami59 Messages postés 24 Date d'inscription dimanche 9 novembre 2008 Statut Membre Dernière intervention 5 mai 2009 1
30 avril 2009 à 21:31
Resultat des courses...
ton prog fonctionne avec ton fichier csv mais en essayant avec les données
de mon fichier csv, j'ai le même souci.

La question reste entière.
Pourquoi ça bug?

P.s: on a quand même avancé. a savoir qu'il y a possibilité que celà fonctionne.

Kami.59
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
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..)

cantador
0
cs_kami59 Messages postés 24 Date d'inscription dimanche 9 novembre 2008 Statut Membre Dernière intervention 5 mai 2009 1
30 avril 2009 à 22:40
Le souci est que mon fichier est un fichier excel converti en .csv directement depuis excel.






Kami.59
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
30 avril 2009 à 22:56
aie !


est ce que c'est toi qui a effectué la conversion ?
sinon, je te conseille de le refaire.

cantador
0
cs_kami59 Messages postés 24 Date d'inscription dimanche 9 novembre 2008 Statut Membre Dernière intervention 5 mai 2009 1
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.

Kami.59
0
cs_kami59 Messages postés 24 Date d'inscription dimanche 9 novembre 2008 Statut Membre Dernière intervention 5 mai 2009 1
30 avril 2009 à 23:28
oui oui, c'est moi qui ai enregistré en csv

j'ai fait enregistré sous (sous format csv avec ;) et refais une fois avec en plus l'option convertir en texte chaque colonne.






Kami.59
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
1 mai 2009 à 18:59
oui oui, c'est moi qui ai enregistré en csv

j'espère que tu as pensé également à renommer les entêtes de champ dans le fichier EXCEL..

moi, j'ai choisi CODE, CHAMP1, CHAMP2 etc..
mais il faut adapter son fichier en fonction des champs de la table..

Si ça ne marche toujours pas, envoie moi ton fichier CSV que je le teste..
([mailto:pulsar3000@wanadoo.fr pulsar3000@wanadoo.fr])

cantador
0
rec1982 Messages postés 6 Date d'inscription samedi 14 avril 2007 Statut Membre Derniè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
0
cs_kami59 Messages postés 24 Date d'inscription dimanche 9 novembre 2008 Statut Membre Dernière intervention 5 mai 2009 1
2 mai 2009 à 22:02
Salut Candator.


Je t'ai envoyé mon fichier csv.

Kami.59
0
cs_kami59 Messages postés 24 Date d'inscription dimanche 9 novembre 2008 Statut Membre Dernière intervention 5 mai 2009 1
2 mai 2009 à 22:08
salut REC1982.

ça fait combien de temps que tu es bloqué avec ce problème sur l'importation?

Moi je galère depuis 1 mois.

Ce qui est bizarre aussi, c'est qu'apparamment personne ne parle de ce problème sur les forums.

Seul cantador et toi maintenant êtes intéressé par ce problème.

Kami.59
0
rec1982 Messages postés 6 Date d'inscription samedi 14 avril 2007 Statut Membre Derniè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

http://www.developpez.net/forums/d733519/environnements-developpement/delphi/bases-donnees/importation-donnees/

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 -->
0
rec1982 Messages postés 6 Date d'inscription samedi 14 avril 2007 Statut Membre Dernière intervention 5 mai 2009
3 mai 2009 à 00:21
salut .
juste des ilustrations:
 mon fichier csv contien le (;) comme delimiteur.
j'ai importer que la premiere ligne de fichier csv
0
cs_cantador Messages postés 4720 Date d'inscription dimanche 26 février 2006 Statut Modérateur Dernière intervention 31 juillet 2021 13
3 mai 2009 à 11:11
@rec1982:


Oui, on peut faire l'importation de cette manière mais ce n'est pas la plus rapide..
Le SQL sera toujours plus performant.

cantador
0
rec1982 Messages postés 6 Date d'inscription samedi 14 avril 2007 Statut Membre Derniè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;




si il ya des suggestions ou modifications je suis preneur et merci .
cordialement
et voila ma discussion dans autre forum:
http://www.developpez.net/forums/d733519/environnements-developpement/delphi/bases-donnees/importation-donnees/
0
Rejoignez-nous