Bonjour,
J'ai une application access connectée à une base Oracle 10g via un lien ODBC.
J'ai une table dans Oracle dont la clé primaire est aliementée par un trigger sur INSERT.
Voici le script de création d la table:
Code sql : 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 drop table Table1; Create table Table1 ( id number(11), libel varchar2(250)); ALTER TABLE Table1 ADD PRIMARY KEY (id); DROP SEQUENCE SEQ_Table1; CREATE SEQUENCE SEQ_Table1 START WITH 1; CREATE OR REPLACE TRIGGER TR_Table1 before insert on Table1 for each row begin select SEQ_Table1.nextval into :new.id FROM DUAL; END; /
Dans l'appli ACCESS, j'utilise un recordset DAO pour insérer une ligne dans la table Oracle. Ce code est déclenché par un click sur un bouton d'un formulaire.
Ce code se plante sur les lignes
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 Private Sub Commande0_Click() Dim rs As DAO.Recordset Set rs = CurrentDb.OpenRecordset("select * from table1", dbOpenDynaset, dbConsistent, dbPessimistic) rs.AddNew rs!LIBEL = CStr(Now) rs.Update rs.Bookmark = rs.LastModified Debug.Print rs!ID Debug.Print rs!LIBEL Set rs = Nothing End Sub
avec le code erreur 3167 : l'enregistrement a été supprimé.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Debug.Print rs!ID Debug.Print rs!LIBEL
La même procédure événementielle fonctionne parfaitement lorsque la table TABLE1 est une table access avec le champs ID déclaré clé primaire avec un type NuméroAuto (je peux récupérer la valeur du champs ID générée).
J'ai fait un autre essai: j'ai associé la table "Table1" au formulaire et j'ai changé la ligne :
en :
Code : Sélectionner tout - Visualiser dans une fenêtre à part Set rs = CurrentDb.OpenRecordset("select * from table1", dbOpenDynaset, dbConsistent, dbPessimistic)
Dans ce cas le code s'exécute correctement que la table "Table1" soit une table Access locale où qu'elle soit une table Oracle attachée (je peux récupérer la valeur du champs ID générée dans les 2 cas).
Code : Sélectionner tout - Visualiser dans une fenêtre à part Set rs = Me.Recordset
Quelqu'un a-t-il une explication?
Merci pour votre collaboration.
Partager