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 :

Mise à jour d'un champs d'un recordset DAO sur une table Oracle via ODBC


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 Mise à jour d'un champs d'un recordset DAO sur une table Oracle via ODBC
    Bonjour,

    J'ai une table TABLE1 sur un serveur ORCALE connecté via ODBC (client Oracle 10g) dont la structure est :
    id : number(11) alimenté par untrigger, clé primaire
    libel : varchar2(250)
    lib2 : varchar2(250)

    Dans un formulaire Access, j'ai un bouton de commande avec le code ci-après.

    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
    Private Sub Commande0_Click()
    Dim rs As DAO.Recordset
    
    
     Set rs = CurrentDb.OpenRecordset("select * from table1 order by libel  asc", dbOpenDynaset, dbSeeChanges + dbConsistent, dbPessimistic)   'dbConsistent dbSeeChanges
     
      
      rs.AddNew
      rs!LIBEL = CStr(Rnd)
      rs!lib2 = Null 
      rs.Update
      rs.Bookmark = rs.LastModified
      Dim idtemp As Long
      idtemp = rs!ID
      Set rs = Nothing
    
    End Sub
    Ce code provoque une erreur 3167 sur la ligne :
    Si je supprime la ligne
    . le problème ne se produit pas.

    De même si la table est sur la base access locale, avec la ligne
    . le problème ne se produit pas.

    Quelqu'un a-t-il une explication et/ou une solution?

    Merci

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 353
    Points : 23 819
    Points
    23 819
    Par défaut
    Désolo, je n'ai pas d'explication mais une question et un cas vécu.

    Le idtemp contient-il la bonne valeur quand tu n'as pas l'erreur ?

    Lorsque j'ai essayé cela avec Oracle je ne récupérai rien de bon. Il a fallu que je 'bricole' un index unique (Code user + Date en secondes + RND) avant l'insertion pour ensuite pouvoir récpérer mon ID autoincrémenté avec un select classique.

    A+

  3. #3
    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
    Merci pour ta réponse.

    Effectivement quand je n'ai pas d'erreur tout se passe bien (merci lapalice) et je récupère la bonne valeur dans idtemp.
    je pense qu'il s'agit d'un problème lié au driver odbc Oracle (j'ai essayé plusieurs versions avec la même conclusion). En effet les mêmes essais fait sur SQL server (même structure de table, même acces via odbc, même code VBA) fonctionnent correctement dans tous les cas (affectation d'une chaine vide, affectation de NULL, pas de mise à jour du champs du recordset).
    Je continue à chercher. Le code concerné doit fonctionner avec une base Access ou une base Oracle. je n'ai pas envie de gérer du code spécifique pour chaque base (il parait qu'ODBC est fait pour éviter çà justement..).

Discussions similaires

  1. Réponses: 1
    Dernier message: 10/05/2010, 12h58
  2. Réponses: 2
    Dernier message: 22/10/2009, 21h31
  3. Mise à jour d'un champ calculé dans un recordset
    Par pdata dans le forum VB 6 et antérieur
    Réponses: 0
    Dernier message: 21/10/2009, 10h28
  4. Réponses: 1
    Dernier message: 01/08/2008, 13h53
  5. Réponses: 3
    Dernier message: 31/01/2008, 17h48

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