Bonjour,
J'ai un pgm en VBA qui
1°) lit une table Access en séquence,
2°) pour chaque la valeur trouvée lit une table Oracle
3°) si la valeur est trouvée : mise à jour d'une 3ème table
Rien que du classique.
Cela fonctionne très bien en requête Access, ou en utilisant la requête SQL correspondante dans une SUB en VBA.
Le soucis est que cette table Oracle contient près de 2 000 000 enr et donc le temps d'execution est très, très, très long.
J'aimerais pouvoir faire un accès direct sur la table Oracle (liée dans ma base ACCESS).
La table Oracle est la table "CONTENU".
Les 2 autres sont des tables Access.
Mais la commande :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
Contenu.Index = "ValIndex_IDX_002"
génère l'erreur :

"Erreur d'execution 3251
Opération non autorisée pour ce type d'objet"

L'index est crée bien sur et est visible lors de l'ouverture en modif par Access de cette table ORACLE.

Code VBA
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
Sub IMPORT_RCONTENU_TEST()
    Dim DbChoix As Database
 
    Set DbChoix = CurrentDb()
    Set ALire = DbChoix.OpenRecordset("Journal")
    Set AEcrire = DbChoix.OpenRecordset("Total")
    Set Contenu = DbChoix.OpenRecordset("CONTENU")
 
    Contenu.Index = "ValIndex_IDX_002"
 
    ALire.MoveFirst
    Do Until ALire.EOF = True
        Contenu.Seek "=", [ALire]![TRANS]
        Do Until Contenu.EOF = True
 
            If Contenu.NoMatch = False Then
                EcrireAEcrire
            End If
            Contenu.MoveNext
 
            If Contenu!CODETrans > [ALire]![TRANS] Then
                Contenu.MoveLast
            End If
        Loop
        ALire.MoveNext
    Loop
 
    Set ALire = Nothing
    Set AEcrire = Nothing
    Set Contenu = Nothing
 
End Sub
ACCESS est en version 2003
ORACLE est en version 9

Merci de votre assistance pour que je puisse lire cette table en accès direct en utilisant son index.