IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Récupération de l'identifiant généré par un trigger Oracle


Sujet :

VBA Access

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 13
    Points : 8
    Points
    8
    Par défaut Récupération de l'identifiant généré par un trigger Oracle
    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.

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 13
    Points : 8
    Points
    8
    Par défaut
    En cherchant un peu plus et en testant le même princcipe avec une connexion ODBC sur SQL Server, j'ai trouvé une solution.
    Il faut modifier les paramètres de OpenRecordset.
    L'instruction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set rs = CurrentDb.OpenRecordset("select * from table1", dbOpenDynaset, dbConsistent, dbPessimistic)
    devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set rs = CurrentDb.OpenRecordset("select * from table1", dbOpenDynaset, dbSeeChanges + dbConsistent, dbPessimistic)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. ID d'un bean généré par un trigger oracle
    Par libuma dans le forum Hibernate
    Réponses: 0
    Dernier message: 16/03/2011, 15h59
  2. [1.x] récupération d'un flux généré par symfony
    Par nawbacan dans le forum Symfony
    Réponses: 1
    Dernier message: 13/11/2010, 17h35
  3. ID généré par un trigger en DB
    Par crawling5 dans le forum Hibernate
    Réponses: 0
    Dernier message: 25/05/2009, 15h38
  4. [Inno setup/VB6]Récupération d'une clef de registre généré par VB6
    Par marsup54 dans le forum Installation, Déploiement et Sécurité
    Réponses: 3
    Dernier message: 02/09/2006, 00h07
  5. Réponses: 12
    Dernier message: 20/04/2006, 15h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo