OVH Cloud OVH Cloud

un index pas comme les autres !!!!

3 réponses
Avatar
thierry
Hello, je me permets de vous faire part d'un cheminement tortueux à
souhait, qui bien sur est le mien.

d'abord, je programme avec le vieux DAO et non pas avec le jeune et
fringuant ADO, et toc !!!

Dans une table, je dois faire des recherches par rapport à une colone.
Je me dis que se serait bien qu'il y est un index dessus, histoire que
cela soit plus rapide.

seulement voila, je ne veux pas que la base de données soit modifiée ne
serait ce que l'instant d'une recherche.

Puisque un recordset peut être considéré comme étant un tableau
contenant des valeurs (origine: table, requête etc..), je me dis que je
vais faire un index dans ce tableau. Stupeur, je ne peux avoir des index
que sur un recordset de type DbTableDef. De plus, si je veux créer des
index à moi, je ne peux pas les mettre sur mon recordset, mais sur la
table qui lui est associée. Puis après j'indique dans le recordset,
l'index que je souhaite utiliser.

comme ma table est liée sur ma base de donnée, l'index que je créer dans
ma table est créer aussi dans ma base de donnée.

Voici le code que j'ai écris dans ce grand moment de délire....

Option Explicit
Dim rc_cp As Dao.Recordset
Dim idx_cp As Dao.Index
Dim table_cp As Dao.TableDef

Dim f As New Dao.Field
f.Name = "CAP_NUM"

Set table_cp = db.TableDefs("CP")

Set idx_cp = table_cp.CreateIndex("Index_Cap_num")
idx_cp.Fields.Append f

table_cp.Indexes.Append idx_cp

Set rc_cp = table_cp.OpenRecordset(dbOpenTable)
rc_cp.Index = "Index_Cap_num"


A priori cela fonctionne et je peux faire des SEEK sur mon recordset
rc_cp.

Toutefois cela me semble assez tordu,
un index est créé dans ma base de données
et au départ je voulais simplement trier un recordset qui soit déconecté
de la base

Si vous aves des exemples de création d'index sur les recordset merci
d'avance :)

3 réponses

Avatar
Himselff
bonjour Thierry,

Par simple hazard n'aurait tu pas creer une clef primaire dans la table de
ta base, ce qui a mon humble avis reviendrais a faire un index de ton
recordset et qui ne modifirait pas ta base parceque elle serait deja dedans
et qui te donnerais une recherche beaucoup plus performante au bout du
compte lors de mise a jour !


Bonne Chance !

Fred
"thierry" wrote in message
news:


Hello, je me permets de vous faire part d'un cheminement tortueux à
souhait, qui bien sur est le mien.

d'abord, je programme avec le vieux DAO et non pas avec le jeune et
fringuant ADO, et toc !!!

Dans une table, je dois faire des recherches par rapport à une colone.
Je me dis que se serait bien qu'il y est un index dessus, histoire que
cela soit plus rapide.

seulement voila, je ne veux pas que la base de données soit modifiée ne
serait ce que l'instant d'une recherche.

Puisque un recordset peut être considéré comme étant un tableau
contenant des valeurs (origine: table, requête etc..), je me dis que je
vais faire un index dans ce tableau. Stupeur, je ne peux avoir des index
que sur un recordset de type DbTableDef. De plus, si je veux créer des
index à moi, je ne peux pas les mettre sur mon recordset, mais sur la
table qui lui est associée. Puis après j'indique dans le recordset,
l'index que je souhaite utiliser.

comme ma table est liée sur ma base de donnée, l'index que je créer dans
ma table est créer aussi dans ma base de donnée.

Voici le code que j'ai écris dans ce grand moment de délire....

Option Explicit
Dim rc_cp As Dao.Recordset
Dim idx_cp As Dao.Index
Dim table_cp As Dao.TableDef

Dim f As New Dao.Field
f.Name = "CAP_NUM"

Set table_cp = db.TableDefs("CP")

Set idx_cp = table_cp.CreateIndex("Index_Cap_num")
idx_cp.Fields.Append f

table_cp.Indexes.Append idx_cp

Set rc_cp = table_cp.OpenRecordset(dbOpenTable)
rc_cp.Index = "Index_Cap_num"


A priori cela fonctionne et je peux faire des SEEK sur mon recordset
rc_cp.

Toutefois cela me semble assez tordu,
un index est créé dans ma base de données
et au départ je voulais simplement trier un recordset qui soit déconecté
de la base

Si vous aves des exemples de création d'index sur les recordset merci
d'avance :)



















Avatar
thierry
In article <%xptc.49829$,
says...
bonjour Thierry,

Par simple hazard n'aurait tu pas creer une clef primaire dans la table de
ta base, ce qui a mon humble avis reviendrais a faire un index de ton
recordset et qui ne modifirait pas ta base parceque elle serait deja dedans
et qui te donnerais une recherche beaucoup plus performante au bout du
compte lors de mise a jour !


Bonne Chance !

Fred
"thierry" wrote in message
news:
>
>
> Hello, je me permets de vous faire part d'un cheminement tortueux à
> souhait, qui bien sur est le mien.
>
> d'abord, je programme avec le vieux DAO et non pas avec le jeune et
> fringuant ADO, et toc !!!
>
> Dans une table, je dois faire des recherches par rapport à une colone.
> Je me dis que se serait bien qu'il y est un index dessus, histoire que
> cela soit plus rapide.
>
> seulement voila, je ne veux pas que la base de données soit modifiée ne
> serait ce que l'instant d'une recherche.


je peux effectivement tablé sur cette opportunité, mais cela ne résouds
pas le problème en général.
en fait, la vrai question c'est comment faire des recherches rapide dans
un recordset qui ne soit pas du type table?
j'ai fait des essais avec un critere, mais cela est assez long, et comme
je fais 5000 recherches de suite...

Cordialement

Thierry


>
> Puisque un recordset peut être considéré comme étant un tableau
> contenant des valeurs (origine: table, requête etc..), je me dis que je
> vais faire un index dans ce tableau. Stupeur, je ne peux avoir des index
> que sur un recordset de type DbTableDef. De plus, si je veux créer des
> index à moi, je ne peux pas les mettre sur mon recordset, mais sur la
> table qui lui est associée. Puis après j'indique dans le recordset,
> l'index que je souhaite utiliser.
>
> comme ma table est liée sur ma base de donnée, l'index que je créer dans
> ma table est créer aussi dans ma base de donnée.
>
> Voici le code que j'ai écris dans ce grand moment de délire....
>
> Option Explicit
> Dim rc_cp As Dao.Recordset
> Dim idx_cp As Dao.Index
> Dim table_cp As Dao.TableDef
>
> Dim f As New Dao.Field
> f.Name = "CAP_NUM"
>


Avatar
Himselff
Pour augmenter la rapiditer des recherches il n y a pas 36 solutions, le but
est de minimiser le record set avec les closes "where" et les triers avec
"order"
le where te sort exactement tout les enregistrements necessaires par exemple
:

select * from clients where sexe=M

qui te sortirais tout les hommes de la table clients, donc tu peux entree
plusieur critere sa depend vraiment de ce que tu as besoins , tu pourrais
avoir qque chose comme :

select sexe,age from clients where sexe=M and age>30

Bonne chance !

Fred

"thierry" wrote in message
news:
In article <%xptc.49829$,
says...
> bonjour Thierry,
>
> Par simple hazard n'aurait tu pas creer une clef primaire dans la table


de
> ta base, ce qui a mon humble avis reviendrais a faire un index de ton
> recordset et qui ne modifirait pas ta base parceque elle serait deja


dedans
> et qui te donnerais une recherche beaucoup plus performante au bout du
> compte lors de mise a jour !
>
>
> Bonne Chance !
>
> Fred
> "thierry" wrote in message
> news:
> >
> >
> > Hello, je me permets de vous faire part d'un cheminement tortueux à
> > souhait, qui bien sur est le mien.
> >
> > d'abord, je programme avec le vieux DAO et non pas avec le jeune et
> > fringuant ADO, et toc !!!
> >
> > Dans une table, je dois faire des recherches par rapport à une colone.
> > Je me dis que se serait bien qu'il y est un index dessus, histoire que
> > cela soit plus rapide.
> >
> > seulement voila, je ne veux pas que la base de données soit modifiée


ne
> > serait ce que l'instant d'une recherche.
je peux effectivement tablé sur cette opportunité, mais cela ne résouds
pas le problème en général.
en fait, la vrai question c'est comment faire des recherches rapide dans
un recordset qui ne soit pas du type table?
j'ai fait des essais avec un critere, mais cela est assez long, et comme
je fais 5000 recherches de suite...

Cordialement

Thierry


> >
> > Puisque un recordset peut être considéré comme étant un tableau
> > contenant des valeurs (origine: table, requête etc..), je me dis que


je
> > vais faire un index dans ce tableau. Stupeur, je ne peux avoir des


index
> > que sur un recordset de type DbTableDef. De plus, si je veux créer des
> > index à moi, je ne peux pas les mettre sur mon recordset, mais sur la
> > table qui lui est associée. Puis après j'indique dans le recordset,
> > l'index que je souhaite utiliser.
> >
> > comme ma table est liée sur ma base de donnée, l'index que je créer


dans
> > ma table est créer aussi dans ma base de donnée.
> >
> > Voici le code que j'ai écris dans ce grand moment de délire....
> >
> > Option Explicit
> > Dim rc_cp As Dao.Recordset
> > Dim idx_cp As Dao.Index
> > Dim table_cp As Dao.TableDef
> >
> > Dim f As New Dao.Field
> > f.Name = "CAP_NUM"
> >