Mehrsprachigkeit die 2.
Samstag 13. September 2008 von Andreas Vogt
Im 2. Teil des Artikels befasse ich mich mit Wertelisten in Kombinationsfeldern und Listenfeldern. Außerdem gibt es bei diesem Thema noch ein paar Fallen, die es zu entschärfern gilt.
Wertelisten sind 1 bis n-Spaltig, wobei man nicht zuviel Spalten verwenden sollte. Der Aufbau einer 2-Spaltigen Werteliste mit Spaltenüberschriften ist wie folgt:
‘Überschrift1′;’Überschrift2′;’Wert1_Spalte1′;’Wert1_Spalte2′;’Wert2_Spalte2′; usw.
Der Ablauf ist wie folgt. Man erstellt ein Kombinationsfeld bzw. Listenfeld und gibt im Dialog an selbst Werte einzutragen (Werteliste). Dann trägt man die codierten Textnummern in das Eingabefeld ein. In den Eigenschaften betrachtet sieht das z.B. wie folgt aus:

Um die Werteliste mit den Sprachtexten zu belegen erweitern wir unseren bekannten Code wie folgt:
Private Sub Form_Load()
Dim ctl As Control, var1 As Variant, i As Long
SetLang
Set db = CurrentDb
Set rs = db.OpenRecordset("Select ID, Wert From " & lang & " Order By ID", dbOpenDynaset)
'Form.caption
If Left(Me.Caption, 1) = "[" Then Me.Caption = getText(rs, Me.Caption)
For Each ctl In Me.Controls
If ctl.Tag = "T" Then
Select Case ctl.ControlType
Case 104 'Buttons
If ctl.Picture <> "(keines)" Then
If Left(ctl.ControlTipText, 1) = "[" Then
ctl.ControlTipText = getText(rs, ctl.ControlTipText)
End If
Else
If Left(ctl.Caption, 1) = "[" Then
ctl.Caption = getText(rs, ctl.Caption)
End If
End If
Case 100 'Labels
If Left(ctl.Caption, 1) = "[" Then
ctl.Caption = getText(rs, ctl.Caption)
End If
Case 110, 111 'Listenfelder und Kombinationsfelder
If ctl.RowSourceType = "Value List" Then
var1 = Split(ctl.RowSource, ";")
'Werteliste zurücksetzen
ctl.RowSource = ""
'Werteliste neu zusammensetzen
For i = 0 To UBound(var1)
ctl.RowSource = ctl.RowSource & getText(rs, CStr(var1(i))) & ";"
Next i
ctl.RowSource = Left(ctl.RowSource, Len(ctl.RowSource) - 1)
End If
End Select
End If
Next
rs.Close
Set rs = Nothing
Set db = Nothing
End Sub
Neu ist, dass db und rs nun global deklariert sind, und dass eine globale Funktion setLang, die u.a. das setzen der Sprache übernimmt, in unserem Modul vorhanden ist. Folgender Code im Modul:
Option Compare Database
Option Explicit
Public lang As String
Public db As DAO.Database, rs As DAO.Recordset
Public Sub SetLang()
Set db = CurrentDb
If lang = "" Then
Set rs = db.OpenRecordset("Select Tabellennamen From Sprachen Where Auswahl = true", dbOpenDynaset)
If rs.RecordCount = 0 Then
db.Execute "Update Sprachen set Auswahl = True where Tabellennamen = 'Deutsch'"
lang = "Deutsch"
Else
lang = rs!Tabellennamen
End If
rs.Close
Set rs = Nothing
End If
Set db = Nothing
End Sub
Ein wichtiger Aspekt bei der mehrsprachigen Entwicklung ist, dass der Sprachtext in der Länge nicht über die vorgegebene Grenze gehen darf. Abgeschnittene Texte sehen nicht nur unschön aus, sie sind potential für Fehlbedienungen der Mitarbeiter. Also immer versuchen dass der selbe Text in allen Sprachen ungefär die gleiche Größe hat, notfalls eine andere Textphrase verwenden.
AV 2008
Dieser Beitrag wurde erstellt am Samstag 13. September 2008 um 0:34:28 und abgelegt unter Allgemein, Datenbankdesign, VBA Code. Kommentare zu diesen Eintrag im RSS 2.0 Feed. Sie können einen Kommentar schreiben, oder einen Trackback auf Ihrer Seite einrichten.
PDF Version