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.

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
Ce code se plante sur les lignes
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
  Debug.Print rs!ID
  Debug.Print rs!LIBEL
avec le code erreur 3167 : l'enregistrement a été supprimé.

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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
 Set rs = CurrentDb.OpenRecordset("select * from table1", dbOpenDynaset, dbConsistent, dbPessimistic)
en :
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).

Quelqu'un a-t-il une explication?

Merci pour votre collaboration.