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 :

Remplissage d'une table avec requête ODBC


Sujet :

VBA Access

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    923
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 923
    Points : 760
    Points
    760
    Par défaut Remplissage d'une table avec requête ODBC
    Bonjour,

    voilà un morceau de code que me permets de remplir une table Access avec des donnés provenant d'une base IBM AS400:
    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
    Set Cmd400.ActiveConnection = Con400
    Cmd400.CommandText = UCase(Trim(textSQL))
    Set Rs400 = Nothing
    Set Rs400 = Cmd400.Execute()
     
    While Not Rs400.EOF
        For colCount = 0 To Rs400.Fields.Count - 1
            If Rs400.Fields(colCount).ActualSize = -1 Then
                text400 = Null
            Else
                val400 = Rs400.Fields(colCount).Value
                text400 = val400
            End If
            If colCount = 0 Then
                Set rs = New ADODB.Recordset
                rs.ActiveConnection = CurrentProject.Connection
                rs.Source = "SELECT * FROM [telephones_bis]"
                rs.CursorType = adOpenDynamic
                rs.LockType = adLockOptimistic
                rs.Open
                rs.AddNew
                rs.Fields(colCount).Value = text400
                rs.Update
                rs.Close
                If Not IsNull(text400) Then
                    tit = CLng(text400)
                Else
                    tit = 0
                End If
            Else
                Set rs = New ADODB.Recordset
                rs.ActiveConnection = CurrentProject.Connection
                rs.Source = "SELECT * FROM [telephones_bis] WHERE CLIENTE=" & tit
                rs.CursorType = adOpenDynamic
                rs.LockType = adLockOptimistic
                rs.Open
                If Not rs.EOF Then
                    rs.MoveLast
                    rs.Fields(colCount).Value = text400
                    rs.Update
                End If
                rs.Close
            End If
        Next colCount
        Rs400.MoveNext
    Wend
     
    Set Rs400 = Nothing
    Con400.Close
    Mon problème est-ce qu'il prend trop de temps pour être exécuté (environ 30mn).

    La même requête, si au lieu de remplir la table Access, j'utilise pour remplir un tableau Excel, est faite en environ 1mn.

    Je crois qui ça doit avoir un rapport avec la connexion ADO qui j'utilise pour remplir la table Access.

    Est-ce que quelqu'un connaît une façon un peu plus légére de remplir ma table Access?
    Merci d'avance pour toute aide...

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    923
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 923
    Points : 760
    Points
    760
    Par défaut Nouveau méthode
    J'ai essayé
    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
    Set Cmd400.ActiveConnection = Con400
    Cmd400.CommandText = UCase(Trim(textSQL))
    Set Rs400 = Nothing
    Set Rs400 = Cmd400.Execute()
     
    While Not Rs400.EOF
        For colCount = 0 To Rs400.Fields.Count - 1
            If Rs400.Fields(colCount).ActualSize = -1 Then
                text400 = Null
            Else
                val400 = Rs400.Fields(colCount).Value
                text400 = val400
            End If
            Select Case colCount
                Case 0
                    If Not IsNull(text400) Then
                        tit = CLng(text400)
                    Else
                        tit = 0
                    End If
                Case 1
                    If Not IsNull(text400) Then
                        t1 = text400
                    Else
                        t1 = ""
                    End If
                Case 2
                    If Not IsNull(text400) Then
                        t2 = text400
                    Else
                        t2 = ""
                    End If
                Case 3
                    If Not IsNull(text400) Then
                        autre = text400
                    Else
                        autre = ""
                    End If
                Case 4
                    If Not IsNull(text400) Then
                        fax = text400
                    Else
                        fax = ""
                    End If
            End Select
        Next colCount
        Set rs = New ADODB.Recordset
        rs.ActiveConnection = CurrentProject.Connection
        rs.Source = "SELECT * FROM [telephones_bis] WHERE CLIENTE=" & tit
        rs.CursorType = adOpenDynamic
        rs.LockType = adLockOptimistic
        rs.Open
        rs.AddNew
        rs.Fields(0).Value = tit
        rs.Fields(1).Value = t1
        rs.Fields(2).Value = t2
        rs.Fields(3).Value = autre
        rs.Fields(4).Value = fax
        rs.Update
        rs.Close
        Rs400.MoveNext
    Wend
     
    Set Rs400 = Nothing
    Con400.Close
    Ici j'ai fait une variable pour chaque champ de ma requête, pour les enregistrer tous ensemble après...

    et il marche un peu plus vite (15mn), mais je crois que c'est possible de le faire meilleur...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    357
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 357
    Points : 355
    Points
    355
    Par défaut
    Bonjour,

    Avez-vous essayé de faire une requete sql direct ? (par l'interface access)

    Vous insérez ensuite vos données dans une table access.

    Ne serait-ce pas plus simple ?

    D'autre part vous pouvez aussi modifier les :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                    If Not IsNull(text400) Then
                        t1 = text400
                    Else
                        t1 = ""
                    End If
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
                        t1 = nz(text400,"")

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    923
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 923
    Points : 760
    Points
    760
    Par défaut
    Merci et bonjour Access Newbie.

    Avez-vous essayé de faire une requete sql direct ? (par l'interface access)
    Tu veux dire Requêtes/Nouvelle Rêquete?
    Le probleme c'est que je n'ai pas la table AS400 lié dans ma base Access. Il faut que je passe par une chaine de connexion, etc...

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    357
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 357
    Points : 355
    Points
    355
    Par défaut
    En passant par une requete sql direct ca devrait le faire.

    Un ptetit coup d'oeil par ici sera le bienvenu
    http://access.developpez.com/faq/?pa...etes#ReqOracle

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    923
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2008
    Messages : 923
    Points : 760
    Points
    760
    Par défaut


    Merci beaucoup!


    Il a marché nikel!!!

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

Discussions similaires

  1. [WD10] remplissage d'une table avec une requête
    Par zwina2004 dans le forum WinDev
    Réponses: 2
    Dernier message: 14/08/2008, 09h42
  2. [MySQL] Lecture d'une table avec requête ordonnée et groupée
    Par kabkab dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 24/06/2008, 14h38
  3. Remplir une table avec un requête
    Par curt dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 14/06/2006, 19h17
  4. Alimenter une table avec une requête
    Par cboubou84 dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 12/05/2006, 15h08
  5. Tester l'existence d'une table avec une requête
    Par Oluha dans le forum Access
    Réponses: 6
    Dernier message: 29/08/2005, 09h45

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