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 :

Qu'est ce qui est plus rapide (pour assurer la traduction des messages)?


Sujet :

VBA Access

  1. #1
    Membre actif
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 335
    Points : 229
    Points
    229
    Par défaut Qu'est ce qui est plus rapide (pour assurer la traduction des messages)?
    Bonjour,

    Dans ma base de données, je traduit le contenu des contrôles textes, caption des boutons/formulaires, étiquettes (formulaires et ruban) en fonction de la langue choisie par l'utilisateur.

    Je me rends compte que j'ai mis en oeuvre deux méthodes pour effectuer cette traduction.
    La première méthode se base sur une fonction qui va lire l'information dans la table adéquate :
    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
    Public Function TraduitTxt(stDocName As String, txtname As String) As String
    Dim oDb As DAO.Database
    Dim oRst As DAO.Recordset
    Dim sql As String
    Dim Tbl As String
     
        On Error GoTo Error
     
        Set oDb = CurrentDb
     
        Tbl = "tblFrmctrl"
        sql = "SELECT * FROM " & Tbl & " WHERE " & Tbl & ".[FrmName] =" & Chr(34) & stDocName & Chr(34)
        Set oRst = oDb.OpenRecordset(sql)
     
        If oRst.RecordCount >= 1 Then
            oRst.MoveLast
            oRst.MoveFirst
        Else
            GoTo Error
        End If
     
        oRst.MoveFirst
     
        Do Until oRst.EOF
            If oRst.Fields("CtrlName").value = txtname Then
                TraduitTxt = oRst.Fields(1 + IdLangue).value
            Else
            End If
            oRst.MoveNext
        Loop
     
     
    Error:
        If Not oRst Is Nothing Then oRst.Close: Set oRst = Nothing
        If Not oDb Is Nothing Then oDb.Close: Set oDb = Nothing
     
    End Function
    cette fonction est utilisée par ailleurs ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox TraduitTxt(Me.Name, "message1")

    Ma seconde méthode se base sur l'utilisation d'un DLookup qui nécessite d'ouvrir d'abord un recordset sur la table adéquate avant de l'utiliser:
    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
    Dim oDb As DAO.Database
    Dim oRstTrad As DAO.Recordset
    Dim strMsg As String
     
    Set oDb = CurrentDb()
     
    'on ouvre un recordset sur la table qui contient les traduction des controles
    Set oRstTrad = oDb.OpenRecordset("SELECT * FROM tblFrmctrl")
        If oRstTrad.RecordCount >= 1 Then
            oRstTrad.MoveLast
            oRstTrad.MoveFirst
        Else
        End If
    strMsg = "[" & oRstTrad.Fields(1 + IdLangue).Name & "]"
     
     
    'exemple d'utilisation
    Msgbox DLookup(strMsg, "tblFrmctrl", "[FrmName] ='msg' And [CtrlName] ='msg21'")
     
     
    If Not oRstTrad Is Nothing Then oRstTrad.Close: Set oRstTrad = Nothing
    If Not oDb Is Nothing Then oDb.Close: Set oDb = Nothing

    Je me demandais quelle est la méthode la plus rapide en fait :-)
    Je pense que le DLookup est plus lent d'après ce que j'ai lu... et l'utiliser en plus d'un recordset c'est faire plus de boulot, non?

    Merci d'avance pour vos avis

  2. #2
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 087
    Points : 5 203
    Points
    5 203
    Par défaut
    Bonjour,

    Citation Envoyé par Dermochelys Voir le message
    Merci d'avance pour vos avis
    Dans les 2 cas movelast puis movefirst ne servent qu'à perdre du temps, il vaut mieux tester eof pour vérifier qu'il y a au moins une ligne

    Dans le 1er cas pourquoi ne pas mettre txtname dans le where ? Ca éviterait de parcourir toute la table pour trouver le bon...
    Dans le 2e cas il faut 2 requetes puisque le nom du champ n'est pas connu (dépend de la langue) donc c'est forcément plus long !

    Bref c'est bullshit tous les 2
    Utilisez Planet, gestion d'entreprise gratuite pour TPE / PME

  3. #3
    Membre actif
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2006
    Messages : 335
    Points : 229
    Points
    229
    Par défaut
    Bonjour Nico84,

    okèèè

    Je vais déjà revoir les codes à partir de ce que tu as relevé. Ça grappillera déjà quelques millisecondes
    Et réfléchir à d'autres pistes pour faire ce que je souhaite
    En tout cas, ça fonctionne c'est déjà ça

    Belle journée à toi

Discussions similaires

  1. [Généralités] Quel est le moyen le plus facile et le plus rapide pour maîtriser Windev ?
    Par arthur_1569 dans le forum WinDev
    Réponses: 11
    Dernier message: 02/07/2011, 20h31
  2. Réponses: 5
    Dernier message: 20/02/2010, 19h36
  3. Réponses: 0
    Dernier message: 16/03/2009, 20h50
  4. Réponses: 9
    Dernier message: 15/05/2007, 18h01
  5. Réponses: 16
    Dernier message: 19/05/2005, 16h20

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