OVH Cloud OVH Cloud

champ mémo indexé sans doublons

1 réponse
Avatar
Christophe
Bonjour,

Voici rapidement ma question :

J'ai une table avec un champ mémo car contenant des chaines de
caractères longues (>255car).

- La requete suivante ne fonctionne que si le champ est défini comme non
indéxé
- Si le champ est défini comme indéxé sans doublons (il doit l'être dans
mon cas), la requête ne renvoie rien !!!

SELECT Table1.*
FROM Table1
WHERE
Table1.abc='abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijkl
mnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghij
klmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefgh
ijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdef
ghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcd
efghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzab
cdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz
';

Plateforme : Access 2002 sous Win XP.

Merci pour votre aide.

1 réponse

Avatar
Daniel Carollo
Bonjour Christophe!

C'est en effet tellement incroyable que j'ai du essayer votre exemple.

Au depart, j'aurais jure que les champs memo ne peuvent pas etre indexes,
mais en effet, l'option existe. A mon avis, le fait que l'option existe est
un bug.
Les index sont fait pour deux raisons: mettre les donnees dans un certain
ordre, et permettre une recherche plus rapide des resultats (ce qui, en
fait, est la meme raison que ci-dessus). Or, il faut savoir que les champs
memo sont stockes sur une page qui est separee des pages "normales" des
donnees d'une table. Ce qui est stocke dans la table, c'est le pointeur qui
designe la page contenant les donnees du champ memo. Je parierai que ce qui
est indexe, c'est en fait la premiere partie des champs, et non pas les
champs eux-meme. En effet, si on fait une recherche sur une portion du champ
(a l'aide de la fonction left() ou right() par exemple, on arrive a le
retrouver. C'est certainement parcequ'on empeche l'indexage de faire son
boulot. On n'en saura pas plus tant qu'un programmeur ayant connaissance de
la facon dont ca se fait "sous le capot" ne nous le dira pas de facon
certaine...

Pour ce qui est de votre question, je trouve plutot inhabituel tout d'abord
de mettre un index sur un champ memo, ensuite de faire des recherches en les
utilisant comme critere. Meme si rien ne l'interdit dans la syntaxe, ca ne
veut pas dire pour autant que c'est une bonne idee...

Qu'essayez-vous de faire au juste? N'y aurait-il pas moyen de rechercher vos
enregistrements sur d'autres criteres?

A suivre...

--
Daniel :-)

Computing Technologies International - www.computing-tech.com - We
provide solutions...

"Christophe" wrote in message
news:un$p%
Bonjour,

Voici rapidement ma question :

J'ai une table avec un champ mémo car contenant des chaines de
caractères longues (>255car).

- La requete suivante ne fonctionne que si le champ est défini comme
non

indéxé
- Si le champ est défini comme indéxé sans doublons (il doit l'être
dans

mon cas), la requête ne renvoie rien !!!

SELECT Table1.*
FROM Table1
WHERE

Table1.abc='abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijkl


mnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghij


klmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefgh


ijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdef


ghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcd


efghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzab


cdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz

';

Plateforme : Access 2002 sous Win XP.

Merci pour votre aide.