Max Wanadoo
max.wanadoo at gmail.com
Wed Feb 25 10:41:18 CST 2009
Using Lateral Thinking To solve problems - This time it is DB Properties
As you know, I try to solve problems by thinking Laterally (Outside the box)
Recently I tried to solve the problem of storing various language
translations within the TAG property of the Form.
This worked just fine and give instant ability to swap languages in seconds.
I had also posted code to permanent store this by manipulating the form in
hidden design mode.
This posting is about storing data in the DB user defined properties.
Regretfully there are limits to how much info you can store before Access
goes all wobbly, coughs and posts a message to you (in my case, it gave up
after 222 User Defined Properties storing 7,962 characters).
Anyway I am going to post the code because there may be Listers who would
like to store other stuff in these user defined properties, such as licence
details, expiry details, how many users logged on, how much xyz. Tracking,
recording etc. Just change the code as required.
Max
Option Compare Database
Option Explicit
Public Function pfMaxGetLanguageCaptionsAvailable()
Const conPipe As String = "|"
Const conSeparator As String = ">|<"
Dim rst As DAO.Recordset, sql As String, strLanguages As String
Dim strEnglish As String, strChineseComplex As String, strChineseSimple As
String
Dim strSpanish As String, strFrench As String
Dim str As String
sql = "Select * from [tblLanguage-Controls] ORDER BY
fldLanguageForm,fldLanguageControl"
Set rst = CurrentDb.OpenRecordset(sql)
If Not rst.EOF Then
rst.MoveFirst
Do While Not rst.EOF
str = "English" & conPipe & rst!fldLanguageForm & conPipe &
rst!fldLanguageControl
Call sMaxDBCreateLanguageProperties(str, dbText,
Nz(rst!fldlanguageEnglish, " "))
str = "ChineseComplex" & conPipe & rst!fldLanguageForm & conPipe &
rst!fldLanguageControl
Call sMaxDBCreateLanguageProperties(str, dbText,
Nz(rst!fldLanguageChineseComplex, " "))
str = "ChineseSimple" & conPipe & rst!fldLanguageForm & conPipe &
rst!fldLanguageControl
Call sMaxDBCreateLanguageProperties(str, dbText,
Nz(rst!fldLanguageChineseSimple, " "))
str = "Spanish" & conPipe & rst!fldLanguageForm & conPipe &
rst!fldLanguageControl
Call sMaxDBCreateLanguageProperties(str, dbText,
Nz(rst!fldLanguageSpanish, " "))
str = "French" & conPipe & rst!fldLanguageForm & conPipe &
rst!fldLanguageControl
Call sMaxDBCreateLanguageProperties(str, dbText,
Nz(rst!fldLanguageFrench, " "))
rst.MoveNext
Loop
End If
End Function
Private Sub sMaxDBCreateLanguageProperties(strPrpName As String, varPrpType
As Variant, varPrpValue As Variant)
On Error GoTo errhandler
Dim prpLanguage As Property
Static lngCt As Long
Static lngSize As Long
lngCt = lngCt + 1
lngSize = lngSize + Len(strPrpName)
Debug.Print lngCt, lngSize, strPrpName, varPrpValue
CurrentDb.Properties.Delete strPrpName
Set prpLanguage = CurrentDb.CreateProperty()
prpLanguage.Name = strPrpName: prpLanguage.Type = varPrpType:
prpLanguage.Value = varPrpValue
CurrentDb.Properties.Append prpLanguage
exithere:
Exit Sub
errhandler:
Select Case Err.Number
Case 3265, 3367 ' property doesnt exits or doesnt exits
Resume Next
Case Else
MsgBox "Error in sMaxCreateLanguageProperty(): " & Err.Number & vbCrLf &
Err.Description
End Select
Resume exithere
End Sub
Private Sub sMaxDBEnumerateDatabaseProperties()
' if You needs to see the properties
Dim prp As Property
On Error Resume Next
For Each prp In CurrentDb.Properties
Debug.Print prp.Name, prp.Value
Next prp
End Sub
Private Sub sMaxDeleteDatabaseProperties()
Dim strPrpName As String
Dim prp As Property
On Error Resume Next
For Each prp In CurrentDb.Properties
strPrpName = prp.Name
If Left(strPrpName, 7) = "English" Or Left(strPrpName, 6) = "French" Or
Left(strPrpName, 14) = "ChineseComplex" Or Left(strPrpName, 13) =
"ChineseSimple" Or Left(strPrpName, 7) = "Spanish" Then
CurrentDb.Properties.Delete strPrpName
Debug.Print strPrpName
End If
Next prp
End Sub