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érer une Séquence Oracle en VBA sous Access 2010 [AC-2010]


Sujet :

VBA Access

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2012
    Messages : 2
    Points : 3
    Points
    3
    Par défaut Récupérer une Séquence Oracle en VBA sous Access 2010
    Bonjour,

    En raison d'une migration vers Office 2010 dans mon entreprise, il me faut tester toutes nos applications Access 2002 (et oui ca fait faire un sacré saut) pour s'assurer de leur bon fonctionnement. Sans surprise, pas mal de problèmes sont apparus et parmi eux, la récupération d'une Séquence Oracle.

    Avec la version Access 2002, j'utilisais alors sans problème le code suivant :
    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
     
    Dim conn As Connection
    Dim wrkODBC As Workspace
     
    Function Sequence(lenomseq As String) As Long
     
        Dim rec As Recordset
     
        On Error Resume Next
            Set rec = conn.OpenRecordset("SELECT APP_PP." & lenomseq & ".NEXTVAL as ident FROM dual")
     
            MsgBox rec!ident
     
     
            If err.Number <> 0 Then
                    Call Connexion
                    Set rec = conn.OpenRecordset("SELECT APP_PP." & lenomseq & ".NEXTVAL as ident FROM dual")
     
            End If
     
        On Error GoTo traitement_erreur
     
        Sequence = rec!ident
     
        rec.Close
     
        Exit Function
    traitement_erreur:
        Sequence = 0
    End Function
    Cette fonction fait appel à la fonction connexion qui permet d'accèder aux tables Oracle via le code suivant :
    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
    33
    34
    35
    36
    37
     
    Function Connexion() As Boolean
    	Dim wsk As Workspace
    	Dim dbOP As Database
     
    	Dim nom As String
    	Dim pwd As String
    	Dim laBase As String
     
    	On Error GoTo traitement_erreur
     
    	nom = "XXXX"
    	pwd = "xxx"
    	laBase = leDataSourceName
     
    	Screen.MousePointer = 11
    	Set wsk = DBEngine.Workspaces(0)
     
    	Set wrkODBC = CreateWorkspace("MonWorkspace", "admin", "", dbUseODBC)
    	Workspaces.Append wrkODBC
     
    	'-----OP  connexion
    	Set conn = wrkODBC.OpenConnection("", dbDriverNoPrompt, False, "ODBC;dsn=" & laBase & ";UID=" & nom & ";pwd=" & pwd)
    	Set dbOP = wsk.OpenDatabase(laBase, dbDriverNoPrompt, False, "ODBC;dsn=" & laBase & ";UID=" & nom & ";pwd=" & pwd)
     
     
    	Screen.MousePointer = 0
    	Connexion = True
    	Exit Function
     
    	traitement_erreur:
    	wsk.Close
     
    	MsgBox ("Connexion impossible !!")
    	Connexion = False
    	Screen.MousePointer = 0
    End Function
    tout cela me permettait donc de récupérer rapidement et efficacement ma séquence Oracle (ex : 3758).

    Désormais sous Access 2010, la séquence renvoyée est 0 ?!! D'autre part, il m'est impossible d'effectuer la connexion aux tables Oracle via la fonction connexion (-> erreur qui déclenche le message "Connexion impossible !!").

    Bref, après avoir parcouru le forum de long en large, je ne sais pas si les deux problèmes sont vraiment liés mais j'avoue que je commence à avoir urgemment besoin d'une solution qui continue à m'échapper !

    Merci à tous pour l'aide (et les solutions) que vous pourrez m'apporter


  2. #2
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 107
    Points : 5 230
    Points
    5 230
    Par défaut
    Bonjour,

    J'utilise ADO plutot qu'ODBC pour lire dans Oracle, voici un exemple :
    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 cd_article_AfterUpdate()
    Dim connect As ADODB.Connection ' connect = crée connection vers base oracle
    Dim Commande As ADODB.Command 'commande = effectue commande sur la base
    Dim rso As ADODB.Recordset ' rst_test = recordset pour base Oracle
     
    Set connect = New ADODB.Connection ' créer connection sur oracle
     
    connect.Open "TEST", "monlog", "monpas"
    connect.CursorLocation = adUseClient
    Set Commande = New ADODB.Command ' créer sur access  ce qui permet de faire des commandes sur oracle
    Commande.CommandType = adCmdText ' la commande sera en format texte
    Set Commande.ActiveConnection = connect ' la connection de la commande est la connection connect
     
    Commande.CommandText = "SELECT libelle FROM article where cd_article=" & cd_article
    Set rso = Commande.Execute
    If Not rso.EOF Then designation = rso!libelle
    rso.Close
    Set connect = Nothing
    Peut-être qu'ODBC n'est plus supporté en 2010 ?

  3. #3
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2012
    Messages : 2
    Points : 3
    Points
    3
    Par défaut
    Merci nico84, ca marche !!

    Je remplace ta requête SQL par la mienne et j'obtiens bien (enfin) ma séquence Oracle !

    Il faudra que je me penche, à l'occasion, davantage sur ces histoires de DAO, ADO, ODBC car ca commence à m'embrouiller de plus en plus. J'ai vu d'ailleurs qu'il y avait plusieurs tutos la dessus...

    Merci encore

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2013
    Messages : 1
    Points : 1
    Points
    1
    Par défaut pb similaire
    Bonjour à tous

    j'ai également un souci identique suite au bascullement vers access 2010
    j'ai le message d'erreur suivant" erreur d'exécution 3874 ODBCDirect n'est plus pris en charge.récrivez le code afin d'utiliser ADO au lieu de DAO.

    voici le debogage

    If poBDE Is Nothing Then
    Select Case psSourceMotor
    Case "ACCESS"
    Set poBDE = OpenDatabase(psSourceODBC)
    Case "ORACLE"
    If poWrkODBC Is Nothing Then
    Set poWrkODBC = CreateWorkspac ("NewODBCWorkspace", "admin", vbNullString, dbUseODBC)
    End If
    Set poBDE = poWrkODBC.OpenDatabase("C1", , , psSourceODBC)
    End Select
    End If

    qui pourrait me dire la syntaxe a mettre en place

    Merci pour votre aide

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

Discussions similaires

  1. lire une séquence Oracle sous Access
    Par 18mar dans le forum Access
    Réponses: 3
    Dernier message: 27/12/2007, 13h57
  2. Réponses: 5
    Dernier message: 11/12/2007, 16h19
  3. Reproduire trigger oracle en vba sous access
    Par uptoditime dans le forum VBA Access
    Réponses: 2
    Dernier message: 08/10/2007, 00h33
  4. Réponses: 2
    Dernier message: 14/09/2007, 08h44
  5. execute une macro via vba sous access
    Par nes dans le forum Access
    Réponses: 4
    Dernier message: 28/03/2006, 23h15

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