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

VB 6 et antérieur Discussion :

[VB6] [BDD] Optimisation de l'accès aux données


Sujet :

VB 6 et antérieur

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 196
    Points : 98
    Points
    98
    Par défaut [VB6] [BDD] Optimisation de l'accès aux données
    Bonjour,

    Je souhaiterais savoir comment optimiser l'accès à une base de données (SQL Server liées dans Access97), notamment en lecture.
    Je n'ai rien trouvé dans la FAQ, ni en recherchant sur le net.
    J'ai une appli VB6, avec plusieurs forms de saisie, dans lesquels il y a des listes déroulantes à remplir au lancement du form, mais où l'on va aussi saisir des nouvelles informations qui seront mises à jour dans la même base.
    J'utilise tantôt des contrôles adobc ou alors des chaînes de connexion avec Requête.open "select * from..."
    Qu'est-ce qu'il est le plus rapide ?
    Dans le cas des contrôles adobc, est-ce préférable de les mettre sur le form qui en a besoin ou de les mettre tous sur un form à part qui est lancé en arrière-plan ?
    J'ai un mal fou à trouver des infos là-dessus.
    Alors merci beaucoup d'avance et coucou à Ze

  2. #2
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 12
    Points : 10
    Points
    10
    Par défaut
    Bonjour,

    Pour ma part, je travaille avec un objet Connexion et un objet table tous les deux définis dans un module général.
    Ensuite, grâce aux requêtes (bien étudiées), j'arrive à avoir des applis assez rapides. Par contre, je m'arrange toujours pour ne faire qu'une seule requête par form affiché et j'évite les filters qui ralentissent l'application car il est nécessaire de les refermer après leur utilisation.
    Écrivez vos messages dans un langage clair parce que c pô cool d'avoir a pi G le sens 2 la phrase avt 2 pouvoir i répondre.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 208
    Points : 136
    Points
    136
    Par défaut
    moi je teconseille de créé toi meme tes recordset et commandes ADO et de laisser tomber le control ADOBC (les control liés ça pose toujours un problème au bout d'un momoent)
    Crée une connexion globale que t'initialise au chargement de l'appli et que tu fermes et détruit à la fermeture de l'appli.
    Ensuite tu ouvres des recordsets quand tu en as besoin et biensur tu les fermes dès que tu n'en as plus besoin....

    Maintenant en terme de performance entre les deux méthodes, je sais pas si y'a une réelle différence...

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 196
    Points : 98
    Points
    98
    Par défaut
    Citation Envoyé par Troopers
    Crée une connexion globale que t'initialise au chargement de l'appli et que tu fermes et détruit à la fermeture de l'appli.
    OK, tu utilises quoi comme chaîne de connexion ?
    On m'a déconseillé de mettre "DSN=MaBase"...

    Je bosse avec unebase Access, mais on va transférer ça sur SQLServer, et les données seront utilisées par ASP pour l'Intranet + tard. J'ai pas trop envie de d'avoir de surprises à ce moment-là !
    C'est Jet qu'il faut utiliser ?

    La bonne syntaxe pour la connexion serait laquelle ?

    Je continue a chercher sur le net si je trouve des infos.
    Merci pour ton aide

  5. #5
    J M
    J M est déconnecté
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2002
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 10
    Points : 12
    Points
    12
    Par défaut
    Salut,

    Au niveau rapidité, j'ai pu vérifier (comme l'indique Troopers) que la persistance de la connexion tout au long de l'appli est bien plus performante.

    Au niveau de la chaine de connexion, il est préférable d'utiliser OLE DB plutôt que ODBC (DSN=...), car je crois qu'ODBC est un intermédiaire entre OLE DB et l'utilisateur. Mais paramétrer une chaine de connexion OLE DB dans VB est particulièrement difficile....
    Une astuce : créer un fichier TXT vide dans le répertoire de l'application, le renommer avec l'extension UDL, l'enregistrer , le fermer et le réouvrir. Miracle, on a maintenant une interface pour configurer sa connexion !!!
    La chaine de connexion en VB est alors trés simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      maChaineDeConnexion = "File Name=" & App.Path & "\" & "MonFichier.udl"
    Un autre avantage de la méthode est que le chemin de la BDD n'est plus inscrit en dur dans l'application.

    En terme de rapidité, il faut aussi songer à utiliser les requêtes sous Access (Vues et Procédures stockées sous SQL Server). J'ai gagné quelques poignées de ms comme cela.

    On peut aussi optimiser ses requêtes SQL, notamment en sélectionnant uniquement les colonnes voulues.

    A+

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 196
    Points : 98
    Points
    98
    Par défaut
    J'ai essayé ta méthode avec udl, mais il me met que c'est impossible dès la permière requête : connexion fermée ou non valide dans ce contexte.

    Voici ce que j'utilise pour la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Requete.Open "T_CATEGORIES", Menu.Conn, adOpenStatic, adLockOptimistic
    C'est là-dessus qu'il bloque

    et j'ai vérifié, je ne ferme la connexion que lorsque je quitte l'application.

    Alors je sais pas, je ne sais pas trop comment paramétrer le fichier udl, je lui ai mis MicrosoftJet 4.0, et j'ai testé la connexion, ça a réussi... et pourtant avec l'appli il ne veut pas !

    et dans Menu.Conn j'ai ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Menu.Conn = "File Name=" & App.Path & "\" & "SIA.udl"
    Tu as une idée ?

    Par contre si je laisse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Public Conn As New ADODB.Connection
    puis dans Menu_Load :
    Conn.ConnectionString = "DSN=SIA"
    Conn.Open
    là ça tourne sans pb !

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 208
    Points : 136
    Points
    136
    Par défaut
    exemple de Connexion Access:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Set oConnection = New ADODB.Connection
        oConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sPathFile
    Exemple de connexion SQL:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Set oConnection = New ADODB.Connection
        oConnection.Open "Provider=SQLOLEDB.1;Persist Security Info=False;User ID=" & sLogin &";Initial Catalog="& sDataBase &";Data Source="& sServeur

  8. #8
    J M
    J M est déconnecté
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2002
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 10
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par LadyArwen
    J'ai essayé ta méthode avec udl, mais il me met que c'est impossible dès la permière requête : connexion fermée ou non valide dans ce contexte.

    Voici ce que j'utilise pour la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Requete.Open "T_CATEGORIES", Menu.Conn, adOpenStatic, adLockOptimistic
    C'est là-dessus qu'il bloque
    et j'ai vérifié, je ne ferme la connexion que lorsque je quitte l'application.

    et dans Menu.Conn j'ai ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Menu.Conn = "File Name=" & App.Path & "\" & "SIA.udl"
    Si tu ouvres une connexion persistante dans ton appli pour améliorer la rapidité, il faut l'utiliser !
    Là, je vois que tu passes une chaine de connexion à ton Recordset au lieu de l'objet ADODB.Connection actif.
    Pour cela, il faut définir une variable globale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    'CONNEXION BDD
    'Connexion permanente
    Public cnn As New ADODB.Connection
    Puis l'ouvir en début d'appli. :
    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
    'Ouverture de la connexion permanente
    Public Sub cnnOpen()
      On Error GoTo GestionErreur
     
      If cnn.State = adStateOpen Then Exit Sub
     
      cnn.CursorLocation = adUseClient 'Mieux avec BDD distante
      'cnn.CursorLocation = adUseServer 'Plus rapide et plus de fonctionnalités
     
      cnn.ConnectionString = cnnString
     
      cnn.Open
     
      Exit Sub
     
    GestionErreur:
      sourisNormale
      If Err.Number <> 0 Then
        MsgBox ("Erreur n° " & Err.Number & vbCrLf & Err.Description)
        If cnn.State = adStateOpen Then
          cnn.Close
        End If
      End If
     
    End Sub
    Ensuite tu l'utilises avec tes RecordSets :
    Cela devrait marcher.

    Alors je sais pas, je ne sais pas trop comment paramétrer le fichier udl, je lui ai mis MicrosoftJet 4.0, et j'ai testé la connexion, ça a réussi... et pourtant avec l'appli il ne veut pas !
    Donc le fichier UDL est bon !

    Essaye d'ouvrir la connexion permanente comme je t'ai indiqué plus haut.
    Si cela ne marche pas, vérifie que le chemin indiqué dans cnnString est correct après évaluation de App.Path.

    A+

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    196
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 196
    Points : 98
    Points
    98
    Par défaut
    Merci beaucoup JM !
    Ca tourne impec !

    Merci à tous même

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

Discussions similaires

  1. [VB6] Accès aux données
    Par snaxisnake dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 16/05/2006, 19h26
  2. Optimisation temps d'accès Bdd des composants ADO
    Par Creenshaw dans le forum Bases de données
    Réponses: 14
    Dernier message: 07/06/2005, 17h09
  3. [Hibernate]Accès aux données BDD via Hibernate
    Par LESOLEIL dans le forum Hibernate
    Réponses: 8
    Dernier message: 17/05/2005, 20h39
  4. [SGBD]Optimiser le temps d'accès aux données (schéma BD)
    Par vsavoir dans le forum Décisions SGBD
    Réponses: 5
    Dernier message: 08/10/2004, 18h33
  5. [VB6] [BDD] Recordset et champ égal à Null
    Par Gr|ppen dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 07/03/2003, 10h00

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