Maintenir connexion ODBC (vba)

Utilisateur anonyme -  
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   -
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 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
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
 
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 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 314
 
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