
Change DAO3.5/3.6 reference while runtime?
Hi,
to let the users of my word97 addin pick some data from access, I referred to DAO3.5. But some of them
might use Access2000 with Unicode entries (and word97 IS able to show them with its userforms!) so that I
have to referr to DAO3.6. I can't referr to DAO3.5 by default because of those who don't have Access2000.
Surely I will not set the either reference while design time because this would force two versions to
deliver.
I tried something like the following (set references to "DAO3.5" and "MS-VBA Extensibility"!)
=====================================
Sub Startme()
DAO_Wechseln
'now do something like
'Dim DB as Database
'Set DB = Opendatabase("MyAccess2000.mdb",false,false)
'MsgBox DB.Name 'this fails with DAO3.5!
End Sub
Function DAO36Installiert() As Boolean
DAO36Installiert = True 'originally testing a registry key
End Function
Sub DAO_Wechseln(wovon As Document)
Dim myRef As Reference
Dim allRefs As References
Dim daoGUID As String
Dim daoMajor As Long, daoMinor As Long
Dim wiegespeichert As Boolean
wiegespeichert = wovon.Saved
daoGUID = "{00025E01-0000-0000-C000-000000000046}"
daoMajor = IIf(VersionDAO = "3.6", 5, 4)
daoMinor = 0
Set allRefs = wovon.VBProject.VBE.ActiveVBProject.References
ReDim Links(allRefs.Count, 2)
For Each myRef In allRefs
MsgBox "vorher Referenz:" & vbCrLf & _
myRef.Name & "/" & myRef.Description & " in " & wovon.Name
If myRef.GUID = daoGUID Then 'erste und einzige Referenz akzeptieren!
If myRef.Major <> daoMajor Then
If daoMajor = 5 Then
If DAO36Installiert() Then
allRefs.Remove myRef
End If
End If
End If
Exit For
End If
Next
On Error Resume Next
If DAO36Installiert() Then
allRefs.AddFromGuid daoGUID, daoMajor, daoMinor
End If
'only to check it
For Each myRef In allRefs
If myRef.GUID = daoGUID Then
MsgBox "hinterher Referenz: " & myRef.Name & "/" & myRef.Description
Exit For
End If
Next
wovon.Saved = wiegespeichert
End Sub
=================================
That looks good and SEEMS to work, BUT: though the reference is said to be changed IT IS NOT! Obviuosly
word keeps the old one in mind especially if it has been used once.
Anyone got an idea how to really change a DAO reference while runtime?
By the way: if I saved the addin after changing the reference with the above code, everything would be
fine with the next start of winword. But you all know that this will let grow the file size immediately
(from 1 MB to about 1.5 MB, and 1.9 MB the next time...)!
Thanx, Lorenz