Maintenir connexion ODBC (vba)

Fermé
Utilisateur anonyme - Modifié par microoctet le 3/07/2013 à 18:36
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 - 4 juil. 2013 à 14:16
Bonjour,

Je suis un novice en VBA, j'aimerais savoir si on peut maintenir une connexion ODBC (vers un serveur à distance) lorsque le Workbook est ouvert, envoyer des requêtes et a la fermeture seulement (du workbook ou d'Excel), se déconnecter de la base de données.

Je voudrais faire ça car j'ai deux requêtes à la suite à faire, le temps d'exécution doit être inférieur (ou égal) à une seconde (pour des questions de confort).

Celles ci sont très légères mais chaque requête prend en moyenne 4 secondes, l'affichage est donc bien lent.

J'ai par la suite vu que la cause de ce ralentissement résultait du fait qu'on se connectait à la base de données avant chaque requête (puis on se déconnectait).

Si quelqu'un à la réponse, je le remercie d'avance :)


Cordialement,
A voir également:

3 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 312
4 juil. 2013 à 07:18
Bonjour,

Sans voir le code et sans connaitre le contexte (nombre et caractéristiques des données importées, des champs de données, du nombre de lignes...), il parait difficile de formuler une réponse
0
Utilisateur anonyme
4 juil. 2013 à 08:26
Hum, je vous l'accorde.

Sub Macro1()
'
' Macro1 Macro
'
Application.DisplayAlerts = False

    With ActiveSheet.ListObjects.Add(SourceType:=0, Source:= _
        "ODBC;DATABASE=BDD;DSN=TEST;UID=TEST;;", Destination:=Range( _
        "$A$1")).QueryTable
        .CommandText = Array( _
        "SELECT Reference, EnStock, Stockage, Qutite, PieceNo, QteReserve" & Chr(13) & "" & Chr(10) & "FROM STOCK STOCK" & Chr(13) & "" & Chr(10) & "WHERE (Reference='012345" _
        , "0')")
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .PreserveColumnInfo = True
        .ListObject.DisplayName = _
        "Tableau_Lancer_la_requête_à_partir_de_BDD"
        .Refresh BackgroundQuery:=False
    End With

End Sub


Voila, macro générée par Excel, si on ne peut pas parvenir à maintenir la connexion de cette manière, c'est pas grave, je veux juste que le résultat final soit affiché dans un tableau sur une feuille (comme ici)
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 312
Modifié par michel_m le 4/07/2013 à 14:17
cela parait difficile d'améliorer la vitesse
on peut quand m^me ajouter cette ligne en début de macro
Application.screnupdating=False 

mais ce sera minime

Si tu emploies displayalert, il faut fermer à la fin
application.displaualerts=True
bien que je ne vois pas l'utilité de displayalerts dans ce code, non le supprimer


quant à la déconnexion, la base étant sur le serveur, cela permet l'accès à d'autres si la database du type fichier (et non client serveur) comme par exemple Access

Michel
0