[Access] Datasource probleem met Mailmerge

Pagina: 1
Acties:

  • Peetman
  • Registratie: Oktober 2001
  • Laatst online: 21-08 17:18
Ik heb een MS Access applicatie waarvanuit een mailmerge in Word wordt aangemaakt.
De data staat in een aparte backend database waarin ook de juiste query staat voor de mailmerge.

Het probleem is nu dat ik bij het aanmaken van de mailmerge een error 5922 krijg ("Word was unable to open te datasource". Deze error komt alleen voor als ik in de query ook een functie aanroep in een VBA module. Verder werkt het wel als ik vanuit Word de mailmerge opbouw en de query in de access database gebruik.
Ik heb me uiteraard al een ongeluk gezocht naar de oplossingen op usenet e.d. maar nergens heb ik een antwoord kunnen vinden dat het probleem oplost.

De query met code ziet er ongeveer als volgt uit:
code:
1
2
3
4
5
6
7
8
9
10
11
SELECT M.MailingID AS MMMailingID, C.Initialen AS MMInitialen, C.Voornaam AS MMVoornaam, 
C.Tussenvoegsel AS MMTussenvoegsel, C.Achternaam AS MMAchternaam, C.Man, 
GetAdresByContactID(C.ContactID,IIf(IIf(IsNull(MC.Adres),0,MC.Adres)=0,C.StandaardAdres,MC.Adres),1) AS MMAdres, 
GetAdresByContactID(C.ContactID,IIf(IIf(IsNull(MC.Adres),0,MC.Adres)=0,C.StandaardAdres,MC.Adres),2) AS MMPostcode, 
GetAdresByContactID(C.ContactID,IIf(IIf(IsNull(MC.Adres),0,MC.Adres)=0,C.StandaardAdres,MC.Adres),3) AS MMPlaats, 
GetAdresByContactID(C.ContactID,IIf(IIf(IsNull(MC.Adres),0,MC.Adres)=0,C.StandaardAdres,MC.Adres),4) AS MMLand, O.Telefoon AS MMTelefoon, 
GetAdresByContactID(C.ContactID,IIf(IIf(IsNull(MC.Adres),0,MC.Adres)=0,C.StandaardAdres,MC.Adres),5)
AS MMFax, M.MailingID
FROM tblOrganisatie AS O RIGHT JOIN (tblMailing AS M INNER JOIN (tblContact AS C 
INNER JOIN tblMailingContact AS MC ON C.ContactID=MC.ContactID) ON 
M.MailingID=MC.MailingID) ON O.OrganisatieID=C.OrganisatieID;


De code die gebruikt wordt bij het aanmaken van de mailmerge is ongeveer als volgt:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
sBackEnd = BackSlash(GetDbPathFromLink("tblMedewerker", Backend)) & Backend
strAttr = "DBQ=" & sBackEnd
DSNName = "RBSDSN"
DBEngine.RegisterDatabase DSNName, "Microsoft Access Driver (*.mdb)", True, strAttr
sConnection = "DSN=" & DSNName
sConnection = sConnection & ";DBQ=" & sBackEnd
sConnection = sConnection & ";DriverId=25;FIL=MS Access;MaxBufferSize=2048;PageTimeout=5;"

S = "SELECT *"
S = S & " FROM `qryMM`"
S = S & " WHERE MMMailingID = " & GroupID
'Sortering aanbrengen
sOrder = GetField("tblMailing", "MailingSortering", "MailingID", Str(GroupID))
If Len(sOrder) > 0 Then
      S = S & " ORDER BY " & sOrder
End If

.OpenDataSource Name:=sBackEnd, ConfirmConversions:=False, _
                    ReadOnly:=False, LinkToSource:=True, _
                    AddToRecentFiles:=False, PasswordDocument:="", _
                    PasswordTemplate:="", WritePasswordDocument:="", _
                    WritePasswordTemplate:="", Revert:=False, _
                    Format:=wdOpenFormatAuto, _
                    Connection:=sConnection, SQLStatement:= _
                    S, SQLStatement1:=""


Iemand een idee aan wat dit zou kunnen liggen?

[ Voor 6% gewijzigd door Peetman op 14-11-2005 13:46 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Ik geloof dat dit beter in Officesuites past.

p&w->off

https://fgheysels.github.io/


  • Peetman
  • Registratie: Oktober 2001
  • Laatst online: 21-08 17:18
Ik ben weer een stapje verder gekomen.
Het lijkt te liggen aan de references naar de functie/module. Als ik namelijk in word via Microsoft Query probeer om de data op te halen. Krijg ik de volgende error: "Undefined function GetAdresByID in query expression". Nu is de functie in de database als public gedefinieerd dus daar kan het niet aan liggen.
Nogmaals iemand een idee?

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Het probleem ligt idd in het gebruik van een vba functie in de query. Access ondersteunt dit soort functies maar gedeeltelijk; maar in principe zou het moeten kunnen lukken als je query en functie gecompileerd in hetzelfde bestand staan.
Of je gebruikt je query alleen voor het ophalen en de mailmergefunctionaliteiten voor de rest. M.aw. wat doet GetadresByContactid eigenlijk?


code:
1
GetAdresByContactID(C.ContactID,IIf(IIf(IsNull(MC.Adres),0,MC.Adres)=0,C.StandaardAdres,MC.Adres),1)

offtopic:
Die dubbele iif in een argument is wel heel erg lelijk.

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


  • Peetman
  • Registratie: Oktober 2001
  • Laatst online: 21-08 17:18
De query en de code staan wel in dezelfde access database. De GetAdresByContactID functie haalt op basis van wat variabelen/veldwaarden de juiste adressering uit de tabellen. Die wordt dus alleen gebruikt voor de mailmergefunctionaliteit.

Zou er een oplossing zijn die niet veel tijd kost om te implementeren, maar wel werkt?
Ik dacht zelf aan het maken van een tijdelijke tabel met de juiste gegevens erin.

offtopic:
Ik weet dat de code niet de schoonheidsprijs verdient. Het probleem is echter dat de applicatie ooit gebouwd is door een collega en ik nu de boel mag aanpassen. Verder heb ik helaas ook niet erg veel access kennis, dus dat maakt het niet makkelijker.

[ Voor 7% gewijzigd door Peetman op 14-11-2005 15:17 ]


  • Boss
  • Registratie: September 1999
  • Laatst online: 10:17

Boss

+1 Overgewaardeerd

Wat ik meestal doe is dat ik vanuit Access een tekstbestandje laat genereren en daarmee de mailmerge uitvoer in Word. Dan weet je zeker dat je geen problemen krijgt met functies e.d.

Ik denk dat dit in jouw geval ook nog redelijk snel is te implementeren.

Een tijdelijke tabel kan natuurlijk ook, maar let erop dat Access bestanden heel groot worden bij het aanmaken en verwijderen van tijdelijke tabellen. Om dat te voorkomen moet je de database steeds comprimeren.

The process of preparing programs for a digital computer is especially attractive, not only because it can be economically and scientifically rewarding, but also because it is an aesthetic experience much like composing poetry or music.

Pagina: 1