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 :

[A-03][oracle/access]transfert de données oracle-->access


Sujet :

VBA Access

  1. #1
    Membre éclairé Avatar de Milyshyn76
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2007
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 440
    Par défaut [A-03][oracle/access]transfert de données oracle-->access
    Coucou tout le monde,

    je voulais savoir si par hasard, vous sauriez quel code vba me permet de récuperer les données d'une table dans Oracle et de lles inserées dans une table access.

    voici mon bout de code...pas fameux du tout

    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
    38
    Public Function transfertOracle_test()
    Dim connect As ADODB.Connection ' connect = crée connection vers base oracle
    Dim Commande As ADODB.Command 'commande = effectue commende sur la base
    Dim rst As DAO.Recordset, rst_test As ADODB.Recordset ' rst_test = recordset pour base Oracle
    ' DAO = Recordset pour access, ADODB = recordset pour Oracle
    Dim code As String, code_precedent As String, code_pgc As String
    Dim code_frais As String, marque As String
    Dim position As Integer, nboccurence As Integer
    Set db = CurrentDb
     
    Set connect = New ADODB.Connection ' créer connection sur oracle
     
    connect.Open "DSI_TEST", "DSI_TEST", "DSI_TEST"
    'ouvre connection
    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 = "delete from TEST_EMILIE"
    ' ordre sql donné
    Commande.Execute
     
    Set rst = db.OpenRecordset("TEST_EMILIE")
     
    Commande.commandetext = "insert into TEST_EMILIE(LIBELLE) values ('" & rst!LIBELLE & "')"
    Commande.Execute
    Commande.commandetext = "update TEST_EMILIE set LIBELLE='aaa' WHERE ID='1'"
    Commande.Execute
    db.Execute "delete * from TEST_EMILIE"
    Commande.commandetext "TEST_EMILIE"
     
    db.Execute = "insert into TEST_EMILIE(LIBELLE) values ('" & Commande!LIBELLE & "')"

    Pour les modérateurs, je ne sais pas si ce post est bien à sa place, dans le cas contraire, déplacez le.

  2. #2
    Membre chevronné
    Inscrit en
    Août 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 360
    Par défaut
    Bonjour,

    Je ne suis pas un expert sous Oracle, mais je peut pi être t'aider...

    Je pense qu'il faut que tu crées une fonction de connexion à ta base Oracle avec ADODB.

    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
     
     
    Dim Cn As New ADODB.Connection
     
    Private Function Init() As Boolean
     
    On Error GoTo Err_Init
     
        Set Cn = New ADODB.Connection
        If (Cn.State <> 1) Then
            Cn.Open "Driver={Microsoft ODBC for Oracle};Server=myServerAddress;Uid=myUsername;Pwd=myPassword;"
             'ou "Driver={Microsoft ODBC Driver for Oracle};ConnectString=OracleServer.world;Uid=myUsername;Pwd=myPassword;"
        End If
        Init = True
     
    Exit_Init:
        Exit Function
     
    Err_Init:
        MsgBox Err.Description
        Init = False
        Resume Exit_Init
     
    End Function
    Ensuite tu peux exécuter ce code pour vérifier si ta connexion est opérationnelle, par exemple sur un l'événement onclick d'un bouton de 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
    17
     
     
    Dim rst as New ADODB.RecordSet
     
    If(Init())Then
            strQuery = "Ta_Requete"
            rst.ActiveConnection = Cn
            rst.CursorLocation = adUseClient
            rst.CursorType = adOpenStatic
            rst.LockType = adLockBatchOptimistic
            rst.Open strQuery
            If Not rst.EOF Then
                   While Not rst.EOF
                          msgbox rst.Fields("UN_DE TES_CHAMPS").Value
                   When
            End If
    End If
    Ensuite, tu te connectes à ACCESS de la même manière (juste en changeant le Connection String) et tu insères tes élements dans ta table avec un Update à la place du MsgBox.

    J'espère t'avoir aidé....

    A+

  3. #3
    Membre éclairé Avatar de Milyshyn76
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2007
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 440
    Par défaut
    merci beaucoup, je vais tester, mais il faut que je comprenne un minimum et là ce n'est pas vraiment le cas, j'aimerais en faite savoir, où, dans ta procédure on peut extraire les données de ma table Oracle et lès inserer dans ma table access

    Parce qu'en ce qui concerne ma connection.. a vrai dire tou ma l'air d'être correcte mais je ne vois pas vraiment OU se trouve le code qui me permet d'extraire mes données.

    Je pensais a la requete SQL...
    Dim rst As New ADODB.Recordset

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    If (Init()) Then
            strQuery = "Ta_Requete"
            rst.ActiveConnection = Cn
            rst.CursorLocation = adUseClient
            rst.CursorType = adOpenStatic
            rst.LockType = adLockBatchOptimistic
            rst.Open strQuery
            If Not rst.EOF Then
                   While Not rst.EOF
                          MsgBox rst.Fields("UN_DE TES_CHAMPS").Value
                   When
            End If
    End If
    strQuery = "Ta_Requete est la requte de ma table access, hors elle est cencée être vide


    merci Beaucoup

  4. #4
    Membre chevronné
    Inscrit en
    Août 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 360
    Par défaut
    Re,

    Il faut à un moment que tu choisisses ce que tu veux prendre dans les tables contenues dans ta base Oracle...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strQuery = "SELECT * FROM Ma_Table WHERE Ta_Condition"
    Ensuite tu insères ce que tu prends de ta table Oracle dans ta table ACCESS

    A+

  5. #5
    Membre éclairé Avatar de Milyshyn76
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2007
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 440
    Par défaut
    merci.. Mais sa bug au niveau du while..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    If Not rst.EOF Then
                   While Not rst.EOF
                          MsgBox rst.Fields("UN_DE TES_CHAMPS").Value
                   when
            End If

    when Erreur de compilation, sub ou fonction non définie ...


    de plus j'ai un petit peu modifier la procédure, je l'ai mise comme ça :

    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
    Private Function Init() As Boolean
     Dim rst As New ADODB.Recordset
     Dim rst1 As New ADODB.Recordset
     Dim Cn As New ADODB.Connection
    On Error GoTo Err_Init
     
        Set Cn = New ADODB.Connection
        If (Cn.State <> 1) Then
            Cn.Open "Driver={Microsoft ODBC for Oracle};Server=DSI_TEST;Uid=DSI_TEST;Pwd=DSI_TEST;"
             'ou "Driver={Microsoft ODBC Driver for Oracle};ConnectString=OracleServer.world;Uid=myUsername;Pwd=myPassword;"
        End If
        Init = True
     
    Exit_Init:
        Exit Function
     
    Err_Init:
        MsgBox Err.Description
        Init = False
        Resume Exit_Init
     
     
    If (Init()) Then
            strQuery = "TEST_EMILIE"
            rst.ActiveConnection = Cn
            rst.CursorLocation = adUseClient
            rst.CursorType = adOpenStatic
            rst.LockType = adLockBatchOptimistic
            rst.Open strQuery
            If Not rst.EOF Then
                   While Not rst.EOF
                          MsgBox rst.Fields("UN_DE TES_CHAMPS").Value
                   when
            End If
    End If
    End Function

  6. #6
    Membre chevronné
    Inscrit en
    Août 2007
    Messages
    360
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 360
    Par défaut
    Re,

    Non, tu ne peux pas modifier la structure comme ça...

    Il faut que appelles ta fonction a un moment ou un autre.

    Il faut que tu crées un formulaire "bateau" avec un bouton, que sur l'évenement onClick() de celui-ci, tu crées une procédure :

    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
    38
    39
    40
    41
    42
    43
     
     
    Public Cn As New ADODB.Connection
    Private Function Init() As Boolean
     
     
    On Error GoTo Err_Init
     
        Set Cn = New ADODB.Connection
        If (Cn.State <> 1) Then
            Cn.Open "Driver={Microsoft ODBC for Oracle};Server=DSI_TEST;Uid=DSI_TEST;Pwd=DSI_TEST;"
             'ou "Driver={Microsoft ODBC Driver for Oracle};ConnectString=OracleServer.world;Uid=myUsername;Pwd=myPassword;"
        End If
        Init = True
     
    Exit_Init:
        Exit Function
     
    Err_Init:
        MsgBox Err.Description
        Init = False
        Resume Exit_Init
    End Function
     
    Private Sub "Nom_du_Bouton"_OnClick()
     
     Dim rst As New ADODB.Recordset
     'Dim rst1 As New ADODB.Recordset 
     
     If (Init()) Then
            strQuery = "SELECT * FROM TEST_EMILE" 'Si ta table TEST_EMILIE existe et contient des enregistrements
            rst.ActiveConnection = Cn
            rst.CursorLocation = adUseClient
            rst.CursorType = adOpenStatic
            rst.LockType = adLockBatchOptimistic
            rst.Open strQuery
            If Not rst.EOF Then
                   While Not rst.EOF
                          MsgBox rst.Fields("Un champ de ta table TEST_EMILIE sur BDD Oracle").Value
                   Wend
            End If
     End If
    End Sub
    A+

  7. #7
    Membre éclairé Avatar de Milyshyn76
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2007
    Messages
    440
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 440
    Par défaut
    Bon j'ai procédé autrement, mais ça fonctionne, du moins maintenant...


    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    Option Compare Database
    '----------------------------------------------------
    'insere données d'une table access vers table oracle
    'insere données d'une oracle vers une table access
    '----------------------------------------------------
    Public Function transfertOracle_test()
    Dim connect As ADODB.Connection ' connect = crée connection vers base oracle
    Dim Commande As ADODB.Command 'commande = effectue commende sur la base
    Dim rst As DAO.Recordset, rst_test As ADODB.Recordset ' rst_test = recordset pour base Oracle
    ' DAO = Recordset pour access, ADODB = recordset pour Oracle
    Dim code As String, code_precedent As String, code_pgc As String
    Dim code_frais As String, marque As String
    Dim position As Integer, nboccurence As Integer
    Set db = CurrentDb
     
    Set connect = New ADODB.Connection ' créer connection sur oracle
     
    connect.Open "DSI_TEST", "DSI_TEST", "DSI_TEST"
    'ouvre connection
    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 = "delete from TEST_EMILIE" ' suppresion des données dans la table oracle
    ' ordre sql donné
    Commande.Execute
     
     
     
    '________________________________________________________
    'insere données d'une table access vers une table oracle I
    '________________________________________________________I
     
    Set rst = db.OpenRecordset("select * FROM TEST_EMILIE")
    ' je selectionne les enregistrements de la table access
    Do While Not rst.EOF ' je fais une boucle sur les enregistrement de la table access
     
    Commande.CommandText = "insert into TEST_EMILIE(ID,LIBELLE) values (" & rst!id & ",'" & rst!LIBELLE & "')"
    'j'insere dans la table oracle
    Commande.Execute
    rst.MoveNext
    Loop
    Set rst = Nothing
     
     
    'Mise à jour dans la table oracle ( facultatif)
    'je supprime dans la table access si mise a jours et dans la oracle puis réinsersion dans la table access
    db.Execute "delete * from TEST_EMILIE"
    Commande.CommandText = "update TEST_EMILIE set LIBELLE='OYE' WHERE ID='1'"
    Commande.Execute
    Commande.CommandText = "insert into TEST_EMILIE(ID,LIBELLE) values ('45','BUENAS')"
    Commande.Execute
     
    '________________________________________________________
    'insere données d'une table oracle vers une table access I
    '________________________________________________________I
     
    'ATTENTION : pour requete oracle : utiliser : commande.comandtext puis commande.Execute
     
     
    Commande.CommandText = "select * from TEST_EMILIE"
    'je selectionne dans la table oracle
    Set rst2 = Commande.Execute
     
     
    Do While Not rst2.EOF ' je fais une boucle sur tout les enregistrements de la table oracle
    db.Execute "insert into TEST_EMILIE(ID,LIBELLE) values (" & rst2!id & ",'" & rst2!LIBELLE & "')"
    'j'insere dans la table access
    rst2.MoveNext
    Loop
    Set rst2 = Nothing
     
     
    End Function
    Voilà, un grand merci à toi mathieu!!!! MERCI BEAUCOUP POUR TON AIDE

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

Discussions similaires

  1. Transfert de données EXCEL Vers Access
    Par Mon_ami dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 29/12/2010, 18h57
  2. Réponses: 4
    Dernier message: 14/12/2008, 03h38
  3. Réponses: 4
    Dernier message: 18/06/2007, 09h11
  4. Transfert de données excel vers access
    Par Isabelle27 dans le forum Access
    Réponses: 3
    Dernier message: 22/03/2007, 07h11

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