OVH Cloud OVH Cloud

Index DAO / SQL Server

1 réponse
Avatar
Via
Bonsoir à tous !

Après de multiples essais, j'en arrive à ce code-ci :

Set Cmd = New ADODB.Command
Set Cmd.ActiveConnection = Connection_SQL_Server
Cmd.CommandText = "sp_helpindex"
Cmd.CommandType = adCmdStoredProc
Cmd.Parameters.Append Cmd.CreateParameter("objname",
adVarChar, adParamInput, 776, Table)

RsTableADO.CursorLocation = adUseClient
RsTableADO.Open Cmd.Execute

a = 0

For Each Fld In RsTableADO.Fields
ReDim Preserve TableauIndex(a)
TableauIndex(a).Champs = RsTableADO!index_name
TableauIndex(a).Type = IIf(InStr(1,
RsTableADO!index_description, "unique") <> 0, True, False)

a = a + 1

Next


Or, en exécutant sp_helpindex dans une vue sous SQL Server, j'ai en retour
ceci :

index_name | index_description | index_keys

{4045B1B4-CDEF-4775-B4C6-FA637B04C6EB} | nonclustered located on PRIMARY |
RefTypeSpec
{9732EC7A-4EE6-4A76-8C51-2DFA4EB6FEF7} | nonclustered located on PRIMARY
RefCatTest
aaaaaTabPFTests_PK | nonclustered, unique, primary key located on PRIMARY |
CodeTest
NumTexte | nonclustered located on PRIMARY | NumTexte
TestAm | nonclustered, unique located on PRIMARY | TestAm
TestFr | nonclustered, unique located on PRIMARY | TestFr

Or que retrouvè-je dans mon TableauIndex après mon code ? Les trois
premières lignes de mon RsTableADO !!!! Alors qu'à la fin mon but est
justement d'éviter celles-ci qui ne m'intéressent pas.
Je ne comprends pas... si quelqu'un peut m'aider en plongeant un peu dans
le code (désolé pour l'absence de commentaires), j'en serais heureux parce
que je pète un câble ! :)
Bonne année à tous,

Via :)

1 réponse

Avatar
Via
Une erreur stupide... c'est le For Each Fld In... qui n'est pas bon. Je
veux le nombre d'enregistrements, et non le nombre de champs. Le seul
problème est que je n'ai accès ni au RecordCount ni au BOF (je ne sais pas
pourquoi d'ailleurs, mais bon)
J'ai donc remplacé ça par une boucle Do While 1, et je sors de la boucle
quand j'ai une erreur 3021.

Je récupère donc bien tous les index, y compris ceux définis par le système
(ceux avec des noms entre {} et celui avec aaaa au début) En fait, ils sont
définis sur des relations entre tables, et ils ne m'intéressent pas.
Simplement je ne sais pas, avec les infos dont je dispose (index_name,
index_description, index_keys), définir quels sont les index désignant une
relation et ceux désignant des index définis comme index par moi-même. Or je
veux récupérer juste les index définis comme tels à la création de la table.
Comment les différencier ?
Merci d'avance,

Via :)

"Via" a écrit dans le message de
news:
Bonsoir à tous !

Après de multiples essais, j'en arrive à ce code-ci :

Set Cmd = New ADODB.Command
Set Cmd.ActiveConnection = Connection_SQL_Server
Cmd.CommandText = "sp_helpindex"
Cmd.CommandType = adCmdStoredProc
Cmd.Parameters.Append Cmd.CreateParameter("objname",
adVarChar, adParamInput, 776, Table)

RsTableADO.CursorLocation = adUseClient
RsTableADO.Open Cmd.Execute

a = 0

For Each Fld In RsTableADO.Fields
ReDim Preserve TableauIndex(a)
TableauIndex(a).Champs = RsTableADO!index_name
TableauIndex(a).Type = IIf(InStr(1,
RsTableADO!index_description, "unique") <> 0, True, False)

a = a + 1

Next


Or, en exécutant sp_helpindex dans une vue sous SQL Server, j'ai en


retour
ceci :

index_name | index_description | index_keys

{4045B1B4-CDEF-4775-B4C6-FA637B04C6EB} | nonclustered located on PRIMARY


|
RefTypeSpec
{9732EC7A-4EE6-4A76-8C51-2DFA4EB6FEF7} | nonclustered located on PRIMARY
RefCatTest
aaaaaTabPFTests_PK | nonclustered, unique, primary key located on PRIMARY


|
CodeTest
NumTexte | nonclustered located on PRIMARY | NumTexte
TestAm | nonclustered, unique located on PRIMARY | TestAm
TestFr | nonclustered, unique located on PRIMARY | TestFr

Or que retrouvè-je dans mon TableauIndex après mon code ? Les trois
premières lignes de mon RsTableADO !!!! Alors qu'à la fin mon but est
justement d'éviter celles-ci qui ne m'intéressent pas.
Je ne comprends pas... si quelqu'un peut m'aider en plongeant un peu


dans
le code (désolé pour l'absence de commentaires), j'en serais heureux parce
que je pète un câble ! :)
Bonne année à tous,

Via :)