Lire un fichier CSV de 170Mo avec Access

Fermé
mmmxtina Messages postés 67 Date d'inscription mardi 26 mai 2009 Statut Membre Dernière intervention 9 avril 2013 - 6 juil. 2009 à 10:39
ZMEX Messages postés 47 Date d'inscription dimanche 19 avril 2009 Statut Membre Dernière intervention 27 septembre 2010 - 15 juil. 2009 à 14:42
Bonjour à tous!!

J'ai un petit soucis, j'ai besoin de récupérer des données de plusieurs fichier CSV dans ma base de données access. Le truc c'est que ces fichiers sont très lours, don 1 qui fais exctement 173Mo (je sais mm pas il comporte de ligne, mais en tout cas Excel ne peut pas l'ouvrir!)
Donc le problème c'est que quand je lance mon appli pour lire le fichier elle plante! (enfin jje la lance le matin à 10h, à 17h ça n'a toujours pas finis de tourner, donc je suppose qu'elle à planter, non??
Donc je me demandais si c'étais possible de découper le fichiercsv, ou de lme lire en partie et de reprendre la lecture une heure plustard, enfin de faire en sorte que ça ne plante pas!
voici mon code (mon code fonctionne sur des fichier de 5Mo, mais je pense qu'il est pas assez performant pour 175Mo) :

--------------------------------------------------------------------------------

Set myFSO = CreateObject("Scripting.FileSystemObject")
    RecupNomFich TabTypeFichiers(2), TabTypeInterv(5)

    Set csvFile = myFSO.OpenTextFile(cheminCSV & fichierCSV)  'c'est des variables globales
    
    'tant qu'on est pas à la fin du fichier CSV (boucle sur chaque ligne)
    While Not csvFile.AtEndOfStream
         'lire la ligne suivante
        csvLine = csvFile.ReadLine
           '"spliter" la ligne
           tabStr = Split(csvLine, csvDelimiter)
              'actions sur le fichier
    Wend
    csvFile.Close

    Set csvFile = Nothing: Set myFSO = Nothing

--------------------------------------------------------------------------------
Merci beaucoup à tous!!
A voir également:

8 réponses

dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
6 juil. 2009 à 12:11
hello
il y a un utilitaire Unix pour Windows qui permet de couper un fichier par lignes:
$ split --help
Usage: split [OPTION] [INPUT [PREFIX]]
...
-l, --lines=NUMBER put NUMBER lines per output file
et il va créer autant de petits fichiers que nécessaires
rien à installer, il suffit d'extraire bin\split.exe du .zip
http://gnuwin32.sourceforge.net/packages/coreutils.htm
0
mmmxtina Messages postés 67 Date d'inscription mardi 26 mai 2009 Statut Membre Dernière intervention 9 avril 2013 1
6 juil. 2009 à 15:06
merci pour ta réponse!
mais à mon travail on ne peut rien installer c'est trop a galere, ya un délai d'à peu près un mois pour l'autoristaion d'installer un programme, j'aurai finis mon stage d'ici là!!
mais merci pour l'info!
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
6 juil. 2009 à 15:15
si le séparateur du csv est ; tu peux compter les lignes
find /c ";" fichier.csv
0
mmmxtina Messages postés 67 Date d'inscription mardi 26 mai 2009 Statut Membre Dernière intervention 9 avril 2013 1
9 juil. 2009 à 17:46
bonjour à tous!!!

bon suite à mon problème de temps avec mon fameux fichier csv de 170mo, j'ai eu (la bonne) idée d'exporter directement mon fichier dans une autre base de données access, il semblerai que les accès à une autre base de données access soit plus rapide que els accès à un fichier csv (je me trompe,)
en plus ce qui est pratique, c'est que je peux chercher plus précisément ce que je veux, pour insérer les informations dans ma 1e base.

donc petit soucis, la table de ma 2e page (celle qui contient le fichier de 170mo) fais 1 800 000 lignes comme le fichier, et en fait pour récupérer els infos de cette base dans ma base 1, je fais une requete où je demande de sélectionné certaine colonne de cette selon certain critère, et afin de récupérer els données ligne par ligne, j'ai mis un compteur (c'est un integer) appellé ligne.

Le soucis c'est que a environ 35000 lignes (le compteur = 35000) le compteur déclenche une erreur de type 6 "Dépassement de capacité"!
Comment y remédier, une idée? merci beaucoup!!!

j'utilise mon compteur comme ceci :

ligne =ligne +1


ce compteur est dans une boucle.
et c'est sur cette ligne que access se stoppe.
0

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

Posez votre question
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
10 juil. 2009 à 09:02
déclarer ligne en double ou entier long
c'est du code Access ?
0
mmmxtina Messages postés 67 Date d'inscription mardi 26 mai 2009 Statut Membre Dernière intervention 9 avril 2013 1
10 juil. 2009 à 10:01
bonjour dubcek!

c'est du vba sur access 2003 oui.
j'avais déclarer ligne en integer, c'est peut être ça le soucis.
je vais tester avec Long, je te dis ce que ça donne!!
meric pour l'info.
0
Bonjour à tous!!!

Je profite de vos nombreuses connaissances pour vous poser d'autres questions sur Access, peut-être que vous pourrez m'aider!

1_ Je souhaiterai créer un bouton qui me propose de sauvegarder ma base de donnée en état ouvert, (c'est-à-dire qu'elle n'enregistrera pas les dernières modifications), et lui indiquée où je veus l'enregistrer et préciser son nom.
Car j'ai vu sur internet qu'il fallait faire DoCmd.Save, mais il me semble que ça enregistre la base de données ouverte au mm endroit et c'est tout.

2_ Comment gérer les erreurs sous access, c'est-à-dire au lieu qu'il y ai la pop up qui propose de débugger, créer une pop up qui dise à l'utilisateur qu'il y a tel soucis.

Merci à tous!
jespere avoir été claire.
0
ZMEX Messages postés 47 Date d'inscription dimanche 19 avril 2009 Statut Membre Dernière intervention 27 septembre 2010 16
15 juil. 2009 à 14:42
Bonjour,

je suis en stage et à peu près dans les même situations :

1- pour enregistrer la base, je pense qu'il suffit de déclarer des variables (chemin et nom)
ce sera à travers un formulaire où il y aura des boutons de controle.

2- c'est à toi d'anticiper les erreurs et de créer des MsgBox avec des messages explicites pour l'utilisateur.
0