Un pb de requête mise à jour [AC 97]

Le
Dom
Bonsoir,

Dans une table X, j'ai le 5ème enregistrement du champ Toto qui peut prendre
par exemple la valeur "Commune de -Test" (notez l'espace entre de et le
tiret). Cette valeur est aléatoire, mais il y a toujours un espace et un
tiret qui précèdent le dernier mot.

Dans un seul enregistrement suivant de la table X (mais cela peut être
n'importe quel enregistrement), le nom de ma "Commune de -Test" dans le
champ Toto présent dans l'enregistrement 5 devient "Commune de - Test "
(soit un espace en plus entre le tiret et Test). Cela m'est imposé. Et pour
les traitements suivants, cela me pose un problème.

Connaîtriez-vous un moyen (VBA ou autre) de faire en sorte que le champ Toto
en position aléatoire (donc après le 5ème enregistrement) puisse prendre la
valeur de l'enregistrement 5 ? (En clair, que l'espace entre le tiret et
Test soit supprimé).

Cela m'arrangerait bien !

Remerciements anticipés.

Dominique.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
3stone
Le #6345121
Salut,

"Dom"
| Dans une table X, j'ai le 5ème enregistrement du champ Toto qui peut prendre
| par exemple la valeur "Commune de -Test" (notez l'espace entre de et le
| tiret). Cette valeur est aléatoire, mais il y a toujours un espace et un
| tiret qui précèdent le dernier mot.
|
| Dans un seul enregistrement suivant de la table X (mais cela peut être
| n'importe quel enregistrement), le nom de ma "Commune de -Test" dans le
| champ Toto présent dans l'enregistrement 5 devient "Commune de - Test "
| (soit un espace en plus entre le tiret et Test). Cela m'est imposé. Et pour
| les traitements suivants, cela me pose un problème.
|
| Connaîtriez-vous un moyen (VBA ou autre) de faire en sorte que le champ Toto
| en position aléatoire (donc après le 5ème enregistrement) puisse prendre la
| valeur de l'enregistrement 5 ? (En clair, que l'espace entre le tiret et
| Test soit supprimé).


Quelque soit la raison de ta demande, tu as un gros problème de conception
dans ta base de données...

Un enregistrement ne doit jamais être lié à sa position dans la table.
Les tables sont à considérer comme de simple "conteneurs à données"
(quelqu'un avait dit: "comme un sac de billes, où il n'y a ni première, ni dernière" ;-)
et seule une requête possédant un tri sur minimum un champ peut garantir
l'ordre des enregistrements.

Une expression comme "le cinquième enregistrement" indique que la conception
et l'idée que l'on se fait d'une base de données, sont erronés.

De plus, une répétition du style "Commune de - " et quelque soit le nombre d'espaces,
n'a pas non plus réellement sa place dans une table...

Une brève description des tables et des besoins serait indiqué.

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
Dom
Le #6344821
Bonsoir Pierre,

Je partage entièrement ton point de vue, et voici quelques explications :

Je ne maîtrise pas la souce des données...

Au départ, on m'envoie un fichier PDF issu d'une application Web. Ce PDF
contient du texte à l'intérieur de cadres, des logos, des numéros de page,
etc...
L'idée, c'est d'exploiter certaines des données contenus dans ce PDF en les
retraitant différemment pour satisfaire des besoins exprimés par les
utilisateurs finaux.

Donc, mon PDF, je le convertis en un fichier texte grâce à un utilitaire
trouvé sur le Web (pdftotext). Ensuite, je l'importe dans une table AC97
via acLinkDelim. Dans ma table attachée, cela me crée un champ mémo avec n
enregistrements. J'ai une seconde table vierge avec un champ NuméroAuto plus
un champ mémo destinée à accueillir les données importées dans la table
liée. J'ajoute les données de cette table liée à la seconde et c'est sur
cette dernière que s'opèrent les traitements.

Le problème, c'est que je dois récupérer certaines informations et pas
d'autres. Et l'une des informations (Commune de -Test) se trouve toujours
sur le cinquième enregistrement... En revanche, "Commune de - Test" (avec
l'espace) peut se trouver en position 625, 713, 885, etc... selon les
fichiers transmis (mais le nom de la commune, avec ou sans l'espace, n'est
présent que deux fois dans la table)...Imaginons que ce soit sur
l'enregistrement 625 et que j'ai besoin de récupérer la valeur des deux
suivants. Je place la valeur du 5ème enregistrement dans une table
temporaire puis via une requête, je recherche si cette valeur existe à
l'identique (et normalement c'est le cas) dans l'un des enregistrements
suivants : J'en déduis le numéro d'engistrement via le champ numéroAuto, je
récupère les deux suivants (626, 627), puis je supprime tout ce qui se
trouve après et entre le 6 et le 625 (j'ai besoin des enregistrements 1 à
5). Cela fonctionne parfaitement, sauf... dans le cas où l'enregistrement 5
et le 625 (dans mon exemple) n'ont pas la même valeur (ce qui arrive en
fonction des PDF transmis sans que j'en connaisse la raison !), d'où ma
question initiale.

C'est certainement "tiré par les cheveux" ma méthode, mais mes modestes
compétences ne m'ont permis que de trouver cette solution.

Ceci-dit, au vu des fichiers à ma disposition, j'ai fini par trouver une
solution qui ne semble pas générer d'anomalies, grâce à cette fonction :

Function fstrTran(ByVal sInString As String, _
sFindString As String, _
sReplaceString As String) As String
Dim iSpot As Integer, iCtr As Integer
Dim iCount As Integer
iCount = Len(sInString)
For iCtr = 1 To iCount
iSpot = InStr(1, sInString, sFindString)
If iSpot > 0 Then
sInString = Left(sInString, iSpot - 1) & _
sReplaceString & _
Mid(sInString, iSpot + Len(sFindString))
Else
Exit For
End If
Next
fstrTran = sInString
End Function

Et je remplace tout simplement "- " (tiret suivi d'un espace) par "-"
(tiret). Et tout baigne lors de la comparaison des deux enregistrements.

Cordialement,

Dominique (un peu long sur le coup...)







"3stone"
Salut,

"Dom"
| Dans une table X, j'ai le 5ème enregistrement du champ Toto qui peut
prendre
| par exemple la valeur "Commune de -Test" (notez l'espace entre de et le
| tiret). Cette valeur est aléatoire, mais il y a toujours un espace et un
| tiret qui précèdent le dernier mot.
|
| Dans un seul enregistrement suivant de la table X (mais cela peut être
| n'importe quel enregistrement), le nom de ma "Commune de -Test" dans le
| champ Toto présent dans l'enregistrement 5 devient "Commune de - Test "
| (soit un espace en plus entre le tiret et Test). Cela m'est imposé. Et
pour
| les traitements suivants, cela me pose un problème.
|
| Connaîtriez-vous un moyen (VBA ou autre) de faire en sorte que le champ
Toto
| en position aléatoire (donc après le 5ème enregistrement) puisse prendre
la
| valeur de l'enregistrement 5 ? (En clair, que l'espace entre le tiret et
| Test soit supprimé).


Quelque soit la raison de ta demande, tu as un gros problème de conception
dans ta base de données...

Un enregistrement ne doit jamais être lié à sa position dans la table.
Les tables sont à considérer comme de simple "conteneurs à données"
(quelqu'un avait dit: "comme un sac de billes, où il n'y a ni première, ni
dernière" ;-)
et seule une requête possédant un tri sur minimum un champ peut garantir
l'ordre des enregistrements.

Une expression comme "le cinquième enregistrement" indique que la
conception
et l'idée que l'on se fait d'une base de données, sont erronés.

De plus, une répétition du style "Commune de - " et quelque soit le nombre
d'espaces,
n'a pas non plus réellement sa place dans une table...

Une brève description des tables et des besoins serait indiqué.

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)



Publicité
Poster une réponse
Anonyme