Mehrsprachige Datenbank entwickeln Mehrsprachige Datenbank entwickeln

Sie m÷chten eine Access-Anwendung als deutsche und englische Version entwickeln, dabei aber nicht zwei separate Anwendungen getrennt pflegen. Deshalb soll nur eine einzige Anwendung beide Sprachversionen vereinen.

Die folgende L÷sung arbeitet mit zwei Tabellen und einer VBA-Prozedur. Die Beispiel-Datenbank zum Tipp finden Sie zusammen mit den Listings auf der Heft-CD unter CHIP-Code Tipps.
Die erste Tabelle ╗tblConfig½ enthΣlt nur einen Datensatz mit dem Feld ╗Sprache½. Dort tragen Sie ein, in welcher Sprache die Datenbank arbeiten soll; im Beispiel also ╗Deutsch½ oder ╗Englisch½. Die zweite Tabelle ╗tblTexte½ speichert alle in der Datenbank verwendeten Texte in verschiedenen Sprachversionen. In Formularen und VBA-Listings greifen Sie auf diese Texte zu. Dies geschieht ⁿber einen selbst definierten, eindeutigen Schlⁿssel im Feld ╗KEY½. Den Schlⁿssel des Tipptextes der Kombinationsbox ╗cboKombinationsbox½ (Eigenschaft ╗SteuerelementTip-Text½ auf dem Formular ╗frmDemo½) k÷nnen Sie zum Beispiel aus den Namen von Formular, Steuerelement und Eigenschaft zusammensetzen: ╗FRM_DEMO.CBO_KOMBINATIONSBOX.CONTROLTIPTEXT½. Fⁿr jede Sprachversion enthΣlt die Tabelle ╗tblTexte½ jeweils eine Spalte. Die Namen dieser Spalten mⁿssen mit den EintrΣgen in der Tabelle ╗tblConfig½ identisch sein, in unserem Beispiel also ╗Deutsch½ und ╗Englisch½ lauten.
In Formularen und Quelltexten ermitteln Sie die Textdarstellung in der aktivierten Sprachversion ⁿber ╗getText()½.

Public Function getText strKey As String) As String
    Dim rst As ADODB.Recordset
    Dim strLanguage As String
    Dim strKriterien As String
    æ Sprache ermitteln
    Set rst = New ADODB. Recordset
   strKriterien = ôSELECT  tblConfig.Sprache FROM  tblConfigö
    rst.Open strKriterien,  CurrentProject.Connection
    strLanguage = rst!Sprache
    rst.Close
    Set rst = Nothing
    æ Texte lesen
    Set rst = New ADODB. Recordset
    strKriterien = ôSELECT tblTexte.ö & strLanguage & ô FROM tblTexte WHERE (((tblTexte.KEY)=Æö & strKey & ôæ))ö
    rst.Open strKriterien, CurrentProject.Connection
                 getText = rst.Fields(0).Value rst.Close
    Set rst = Nothing
End Function


Diese Prozedur k÷nnen Sie in einem beliebigen Modul definieren. Sie arbeitet mit einem Recordset und zwei Datenbankzugriffen via SQL. Der erste SQL-Befehl kopiert die in ╗tblConfig½ eingetragene Sprache û zum Beispiel ╗Deutsch½ û in die Variable ╗strLanguage½. Der zweite SQL-Befehl greift auf Basis dieser Variable auf die entsprechende Spalte und ⁿber das Feld ╗KEY½ auf die entsprechende Zeile der Tabelle ╗tblTexte½ zu. Dabei muss der Inhalt von ╗KEY½ dem an ╗getText()½ ⁿbergebenen Parameter ╗strKey½ entsprechen. Mit ╗getText = rst.Fields(0).Value½ liest die Prozedur den Inhalt des Recordsets aus.
Wenn die Datenbank-Anwendung einen Text anzeigen oder ausgeben soll, ⁿbergibt sie den eindeutigen Schlⁿssel des Textes an die Prozedur ╗getText()½. Diese Funktion liefert dann den entsprechenden Text in der aktivierten Sprache zurⁿck. Damit sich Ihre Formulare automatisch anpassen, fⁿllen Sie in der Ereignisprozedur ╗Beim ╓ffnen½ alle enthaltenen Textelemente mit den zugeh÷rigen Inhalten. Der Befehl, der dem Tipp-Text der Kombinationsbox ╗cboKombinationsbox½ in der Ereignisprozedur ╗Beim ╓ffnen½ seinen tatsΣchlichen Text zuweist, sieht folgenderma▀en aus:

Me.cboKombinationsbox.ControlTipText = getText(ôFRM_DEMO.CBO_
KOMBINATIONSBOX.CONTROLTIPTEXTö)


Diese L÷sung ist v÷llig flexibel. Wenn Sie zusΣtzlich noch eine franz÷sische Version bereitstellen m÷chten, mⁿssen Sie nur die Tabelle ╗tblTexte½ um eine Spalte ╗Franz÷sisch½ erweitern, die verschiedenen DatensΣtze der Tabelle entsprechend aktualisieren und in das Feld ╗Sprache½ der Tabelle ╗tblConfig½ den Text ╗Franz÷sisch½ eintragen.
! Achtung: Diese L÷sung hat keinen Einfluss auf Standardobjekte von Windows und Access wie Dialoge zum ╓ffnen und Speichern oder die SchaltflΣchen ╗Ja½ und ╗Nein½ des Befehls ╗MsgBox½.