Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

enregistrer liste de fichiers dans une table

10 réponses
Avatar
JP
Salut,

En utilisant la fonction de 3Stone pour lister les fichiers d'un
répertoire dnas un champ liste (avec un coup de pouce d'Eric), j'ai la
question subsidiaire.
Comment enregistrer cette liste dans un champ de table??
merci d'avance
Joyeux Noël à toutes et à tous. Un merci particulier aux 'cracs' de ce
groupe pour leur formidable travail.
Jean-Pierre

10 réponses

Avatar
Eric
Bonsoir Jean-Pierre,

Est-ce vraiment raisonnable car si tu as entre 2 instants, t et t+dt,
plus (ou moins) de fichiers dans le répertoire, ton champ de la table ne
sera jamais à jour (on peut l'assimiler à un champ calculé).

Nonobstant cette remarque, tu peux toujours insérer via une commande SQL
Dim strSQL as String
strSQL = "Insert into LaTable(LeChampRecevantListe) VALUES('" &
fListFiles("C:") & "');"
CurrentDb.Execute strSQL

Salut,

En utilisant la fonction de 3Stone pour lister les fichiers d'un
répertoire dnas un champ liste (avec un coup de pouce d'Eric), j'ai la
question subsidiaire.
Comment enregistrer cette liste dans un champ de table??
merci d'avance
Joyeux Noël à toutes et à tous. Un merci particulier aux 'cracs' de ce
groupe pour leur formidable travail.
Jean-Pierre


--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

Avatar
JP
Merci Eric,

Je suis assez d'accord avec ta remarque mais c'est und situation
particulière.
JP

Bonsoir Jean-Pierre,

Est-ce vraiment raisonnable car si tu as entre 2 instants, t et t+dt,
plus (ou moins) de fichiers dans le répertoire, ton champ de la table ne
sera jamais à jour (on peut l'assimiler à un champ calculé).

Nonobstant cette remarque, tu peux toujours insérer via une commande SQL
Dim strSQL as String
strSQL = "Insert into LaTable(LeChampRecevantListe) VALUES('" &
fListFiles("C:") & "');"
CurrentDb.Execute strSQL


Salut,

En utilisant la fonction de 3Stone pour lister les fichiers d'un
répertoire dnas un champ liste (avec un coup de pouce d'Eric), j'ai la
question subsidiaire.
Comment enregistrer cette liste dans un champ de table??
merci d'avance
Joyeux Noël à toutes et à tous. Un merci particulier aux 'cracs' de ce
groupe pour leur formidable travail.
Jean-Pierre






Avatar
Gloops
Salut,

J'ai essayé ce que tu dis, comme ça par curiosité, et je me suis fait
jeter : le nombre de valeurs de la requête doit coïncider avec le nombre
de champs destination.

Ce qui signifie que si il y a un seul fichier sous la racine, ça marche.

Ce qui laisserait entendre qu'avec plus de fichiers on devrait pouvoir
s'en sortir avec quelque chose du style

Public Sub ListeFichiers(Chemin As String)
Dim Fic As String
Fic = Dir(Chemin)
While Not Fic = ""
CurrentDb.Execute _
"INSERT INTO LaTable(LeChampRecevantListe) VALUES(" _
+ Chr$(34) + Fic + Chr$(34) + ")"
Fic = Dir()
Wend
End Sub



Comme je n'avais pas suivi la conversation précédente, j'ai fait le test
avec ceci :
Public Function fListFiles(Chemin As String) As String
Dim Fic As String
Fic = Dir(Chemin)
fListFiles = ""
While Not Fic = ""
fListFiles = fListFiles + IIf(fListFiles = "", "", ", ") _
+ """" + Fic + """"
Fic = Dir()
Wend
End Function

à noter que les noms de fichiers apparaissent sans les caractères
accentués (en tout cas sous Windows XP et avec Access 95).
___________________________________
Eric a écrit, le 23/12/2005 22:29 :

Bonsoir Jean-Pierre,

Est-ce vraiment raisonnable car si tu as entre 2 instants, t et t+dt,
plus (ou moins) de fichiers dans le répertoire, ton champ de la table ne
sera jamais à jour (on peut l'assimiler à un champ calculé).

Nonobstant cette remarque, tu peux toujours insérer via une commande SQL
Dim strSQL as String
strSQL = "Insert into LaTable(LeChampRecevantListe) VALUES('" &
fListFiles("C:") & "');"
CurrentDb.Execute strSQL


Salut,

En utilisant la fonction de 3Stone pour lister les fichiers d'un
répertoire dnas un champ liste (avec un coup de pouce d'Eric), j'ai la
question subsidiaire.
Comment enregistrer cette liste dans un champ de table??
merci d'avance
Joyeux Noël à toutes et à tous. Un merci particulier aux 'cracs' de ce
groupe pour leur formidable travail.
Jean-Pierre






Avatar
Eric
Bonjour Gloops,

La fonction fListiles() de Pierre(3Stone - voir ici :
http://www.3stone.be/access/articles.php?lng=fr&pg5 ) construit une
chaine composée de tous les fichiers du répertoire passé en argument
séparé par un point virgule ou une chaine vide si le répertoire est vide
ou inexistant. Donc je ne vois pas ce qui peut bloquer sauf si le champ
de la table interdit les chaines de longueur nulle.

En SQL, je ne renseigne qu'un seul champ de table. L'erreur que tu
signales peut apparaitre si le nom de fichier contient une virgule mais
il est vrai que je n'avais pas imaginé ce cas-là.

Salut,

J'ai essayé ce que tu dis, comme ça par curiosité, et je me suis fait
jeter : le nombre de valeurs de la requête doit coïncider avec le nombre
de champs destination.

Ce qui signifie que si il y a un seul fichier sous la racine, ça marche.

Ce qui laisserait entendre qu'avec plus de fichiers on devrait pouvoir
s'en sortir avec quelque chose du style
[...]
à noter que les noms de fichiers apparaissent sans les caractères
accentués (en tout cas sous Windows XP et avec Access 95).


--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

Avatar
Gloops
Non non, l'erreur est au niveau de la syntaxe SQL : INSERT INTO ne crée
qu'un seul enregistrement, et peut renseigner plusieurs champs, dont les
noms sont fournis entre les parenthèses.

En cherchant bien peut-être qu'on trouve une autre syntaxe, mais
celle-là c'est pour un enregistrement.
___________________________________
Eric a écrit, le 26/12/2005 07:47 :
Bonjour Gloops,

La fonction fListiles() de Pierre(3Stone - voir ici :
http://www.3stone.be/access/articles.php?lng=fr&pg5 ) construit une
chaine composée de tous les fichiers du répertoire passé en argument
séparé par un point virgule ou une chaine vide si le répertoire est vide
ou inexistant. Donc je ne vois pas ce qui peut bloquer sauf si le champ
de la table interdit les chaines de longueur nulle.

En SQL, je ne renseigne qu'un seul champ de table. L'erreur que tu
signales peut apparaitre si le nom de fichier contient une virgule mais
il est vrai que je n'avais pas imaginé ce cas-là.


Avatar
Eric
je comrends pas pourquoi tu veux ajouter plusieurs enregistrements.
La fonction retourne une chaine constituée de tous les fichiers d'un rep
du genre: C:1.xls;C:2.doc;...;C:tata.mdb;C:titi.mdb;C:toto.mdb. Il
n'y a donc qu'un seul enregistrement à ajouter pour un répertoire donné
et la commande SQL marche très bien.
Non non, l'erreur est au niveau de la syntaxe SQL : INSERT INTO ne crée
qu'un seul enregistrement, et peut renseigner plusieurs champs, dont les
noms sont fournis entre les parenthèses.

En cherchant bien peut-être qu'on trouve une autre syntaxe, mais
celle-là c'est pour un enregistrement.


--
A+
Eric
http://www.mpfa.info/
Archives : http://groups.google.fr/group/microsoft.public.fr.access?hl=fr

Avatar
Gloops
Ah, tu veux mettre toute la liste dans un seul champ, sur le même
enregistrement ?
J'avoue que l'idée ne m'avait pas effleuré ne serait-ce qu'un instant.

Il peut y avoir deux difficultés :
- savoir à quelle longueur le dimensionner
- savoir quoi faire avec

Une fois ces deux questions réglées, effectivement, avec un seul INSERT
INTO on s'en sort très bien.
___________________________________
Eric a écrit, le 27/12/2005 09:30 :
je comrends pas pourquoi tu veux ajouter plusieurs enregistrements.
La fonction retourne une chaine constituée de tous les fichiers d'un rep
du genre: C:1.xls;C:2.doc;...;C:tata.mdb;C:titi.mdb;C:toto.mdb. Il
n'y a donc qu'un seul enregistrement à ajouter pour un répertoire donné
et la commande SQL marche très bien.

Non non, l'erreur est au niveau de la syntaxe SQL : INSERT INTO ne
crée qu'un seul enregistrement, et peut renseigner plusieurs champs,
dont les noms sont fournis entre les parenthèses.

En cherchant bien peut-être qu'on trouve une autre syntaxe, mais
celle-là c'est pour un enregistrement.






Avatar
Gloops
Salut,

A noter au passage une autre façon d'enregistrer la liste des fichiers
dans un fichier, bien adaptée quand on a un poil dans la main :)

Shell "DIR " + Rep + " /B >DIR.TXT"
(testé sous Windows XP)

C'est vrai que c'est à la lecture que le poil dans la main va gêner, car
là il faudra se farcir :

Open "DIR.TXT" For Input As #1
While Not EOF(1)
Input #1, Fic
Wend
Close #1

Un peu de paresse c'est bien pour chercher des solutions créatives, mais
attention quand même de ne pas se gameller sur le répertoire où on met
le fichier de liste. Si on compte sur le répertoire par défaut, se
méfier qu'il peut changer.

Si le fichier de liste se met dans le répertoire listé, attention aux
problèmes qui peuvent en découler.

On peut aussi importer un fichier texte dans une base Access, mais là on
dépasse peut-être la question ...
_________________________________
JP a écrit, le 23/12/2005 22:15 :

Salut,

En utilisant la fonction de 3Stone pour lister les fichiers d'un
répertoire dnas un champ liste (avec un coup de pouce d'Eric), j'ai la
question subsidiaire.
Comment enregistrer cette liste dans un champ de table??
merci d'avance
Joyeux Noël à toutes et à tous. Un merci particulier aux 'cracs' de ce
groupe pour leur formidable travail.
Jean-Pierre


Avatar
Gloops
Gloops a écrit, le 27/12/2005 13:01 :
Shell "DIR " + Rep + " /B >DIR.TXT"
(testé sous Windows XP)


Pardon pour la publicité mensongère.
C'est la commande DIR que j'avais testée.
L'appel depuis Access s'écrit comme ça :
Shell "CMD /C" + Chr$(34) + "DIR C: /B >DIR.TXT" + Chr$(34)
en remplaçant C: par " + Rep + "
ce que je n'ai pas testé mais là j'ai confiance, ...
Attention on peut avoir à mettre des guillemets autour du chemin du
répertoire dans le cas où on utilise un nom long, comme "C:Documents
and Settings", sinon les espaces vont poser problème.
"DIR " + Chr$(34) + Rep + Chr$(34) + " /B" ...

CMD est aussi le résultat de
Environ$("COMSPEC")
qui peut s'avérer plus souple pour s'adapter à d'autres configurations.
Sur d'autres versions de Windows il peut falloir adapter.

Moui. Paresse si on veut, mais à condition de ne pas trop changer de
système en route ...

Avatar
Gloops
Gloops a écrit, le 27/12/2005 13:14 :
Shell "CMD /C" + Chr$(34) + "DIR C: /B >DIR.TXT" + Chr$(34)

"DIR " + Chr$(34) + Rep + Chr$(34) + " /B" ...


Bon, vous avez compris que j'ai testé une étape, puis élucubré sur une
autre.
Bien entendu, si on met deux jeux de guillemets sur une même ligne de
commande, ça va donner quelque chose de bizarre.
Alors l'un des deux sera à remplacer par des apostrophes, et à chacun de
tester et adapter, en n'oubliant pas le cas où un nom de fichier
contient une apostrophe si jamais le système accepte ça.
J'ai annoncé une solution pour paresseux ?
Peut-être que j'aurais aussi bien fait de m'abstenir, tiens ...