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 :
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:
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:
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
Partager