Here's what I'm using in a similar situation.
I have tables, structured as follows:
Code:
tblForm
fldFormUID
fldFormName
tblFormControl
fldFormControlUID
fldFormUID
fldControlName
tblLanguage
fldLanguageUID
fldLanguage
tblRegional
fldRegionalUID
fldLanguageUID
fldFormControlUID
fldProperty
fldValue
tblForm is populated with the names of all the forms in the database, tblFormControl with the names of all the controls on those forms. tblRegional contains the different values for the control properties, dependent on the value of fldLanguageUID. fldProperty contains the name of the control property you wish to change (e.g the caption) and fldValue holds the new value.
I also have class module which is fired up when the database opens and keeps running until the user closes the database. This module contains the following sub:
Code:
Public Sub SetRegionalFilter(frmToSet As Form, lngLanguageUID As Long)
' Comments :
' Parameters: frmToSet -
' Modified :
'
' --------------------------------------------------
'TVCodeTools ErrorEnablerStart
On Error GoTo PROC_ERR
'TVCodeTools ErrorEnablerEnd
Dim ctlToChange As Control
Dim strSetting As String
Dim rstRegionalControls As ADODB.Recordset
'I'm running an SP on SQL Server - you'll have to write
'your own query to retrieve the relevant records
Set rstRegionalControls = GetRecords("spGetRegional", _
"@intLanguageUID", adInteger, lngLanguageUID, 4, _
"@vcharFormName", adVarChar, frmToSet.Name, 50)
If Not (rstRegionalControls.BOF And rstRegionalControls.EOF) Then
Do While Not rstRegionalControls.EOF
If Nz(rstRegionalControls.Fields("fldControlName"), "") <> "" Then
Set ctlToChange = frmToSet.Controls(rstRegionalControls.Fields("fldControlName"))
End If
strSetting = rstRegionalControls.Fields("fldValue")
If strSetting = "NULL" Then
strSetting = ""
End If
Select Case rstRegionalControls.Fields("fldProperty")
Case "Caption"
If Nz(rstRegionalControls.Fields("fldControlName"), "") <> "" Then
ctlToChange.Caption = strSetting
Else
frmToSet.Caption = strSetting
End If
Case "ControlTipText"
ctlToChange.ControlTipText = strSetting
Case "FormProperty"
frmToSet.Properties(Left$(strSetting, InStr(1, strSetting, ";") - 1)) = Right$(strSetting, InStr(1, strSetting, ";") + 1)
Case "StatusBarText"
ctlToChange.StatusBarText = strSetting
Case "HyperLink"
ctlToChange.Hyperlink = strSetting
Case "MenuBar"
frmToSet.MenuBar = strSetting
Case "ToolBar"
frmToSet.Toolbar = strSetting
Case "ShortcutMenuBar"
If Nz(rstRegionalControls.Fields("fldControlName"), "") <> "" Then
ctlToChange.ShortcutMenuBar = strSetting
Else
frmToSet.ShortcutMenuBar = strSetting
End If
Case "HelpFile"
frmToSet.HelpFile = strSetting
Case "Value"
ctlToChange.Value = strSetting
End Select
rstRegionalControls.MoveNext
Loop
End If
'TVCodeTools ErrorHandlerStart
PROC_EXIT:
On Error Resume Next
Set rstRegionalControls = Nothing
rstRegionalControls.Close
Exit Sub
PROC_ERR:
If Err.Number = 2465 Then
Resume Next
Else
MsgBox Err.Description & " " & "clsFormSecurity" & ":" & "SetRegionalFilter"
End If
Resume PROC_EXIT
'TVCodeTools ErrorHandlerEnd
End Sub
Whenever I open a form I pass it to the sub and everything gets updated!
Brian Skelton
Braxis Computer Services Ltd.