Als u een Access-database krijgt die niet met de Nederlandse Access-versie is gebouwd, dan kunnen er een aantal problemen optreden: 1. Formulier ‘None’ niet gevonden 2. ‘Object (Default) niet gevonden’ 3. Aantal(*) (Engels Count(*)) werkt niet 4. Formulierveld met datum werkt niet in een query 5. De query in een SQL-string vraagt bij het uitvoeren om een Parameter 6. Functie Date werkt niet in een SQL-tekenreeks 7. Tabelvalidatieregel geeft ‘Syntax error’ bij het wijzigen. 8. Koppelingsbeheer werkt niet en geeft mogelijk een fout met het oude pad voor een tabel Probleem 1: Formulier ‘None’ niet gevonden U krijgt de foutmelding ‘Formulier (None) niet gevonden’ bij het opstarten. Oorzaak De Access-database is met een Engelse versie gemaakt. Oplossing 1) Druk op de Office-knop. 2) Druk rechtsonder op de knop Opties voor Access. 3) Kies het onderdeel Huidige database en selecteer Geen achter Formulier weergeven. Probleem 2: ‘Object (Default) niet gevonden’ Bij het opstarten van een database verschijnt de melding ‘Object (Default) niet gevonden’. Oorzaak De Access-database is met een Engelse versie gemaakt en kan een standaardobject niet vinden. Oplossing 1) Maak een nieuwe (blanco) database. 2) Kies Externe gegevens>Importeren>Access en importeer alle objecten. 3) Controleer of er geen referenties vergeten zijn door in de VBA-code de menukeuze Extra>verwijzingen uit te voeren in de originele database en de nieuwe database. 4) Als er verwijzingen ontbreken, kunt u de volgende code in een nieuwe module in de sectie modules van de ‘oude’ database maken en deze code kopiëren: ***Begin code Function fncToonReferenties() '----------------------------------------------------------' InVoer : Geen ' Doel : Maakt een functie om referenties in een andere database te maken ' Gemaakt door : Nico Altink 28/okt/2007 ' Laatst gewijzigd: Nico Altink 28/okt/2007 '----------------------------------------------------------Dim ref As Reference Debug.Print "Function fncMaakReferenties()" Debug.Print "' Sla de fouten over van beschikbare referenties" Debug.Print "On Error resume next" For Each ref In Application.References ' Sla de "builtin" referenties over If Not ref.BuiltIn Then Debug.Print "Application.References.AddFromFile (""" & ref.FullPath & """)" End If Next Debug.Print "End Function" End Function ***Eind code Door deze code uit te voeren (druk bijvoorbeeld op F5 als de cursor in de functie staat) wordt in het venster ‘Direct’ een nieuwe module gemaakt die u in de nieuwe database kunt plaatsen om de verwijzingen over te nemen. Probleem 3: Aantal(*) (Engels Count(*)) werkt niet Het commando Aantal(*) lijkt niet te werken in een vergelijking zoals deze: =IIf(Aantal(*)=1,"detail record","detail records") Oorzaak Het lijkt erop dat deze functie geen nummer maar een tekst teruggeeft. Oplossing Wijzig het nummer in de vergelijking in een tekenreeks. =IIf(Aantal(*)='1',"detail record","detail records") Probleem 4: Formulierveld met datum werkt niet in een query In een query kunt u refereren aan een formulierveld op de volgende wijze: Formulieren("frmTestformulier")!datumveldnaam Er komen echter geen records of verkeerde. Oorzaak Een query verwacht een datum in het US formaat “mm/dd/jjjj” en bij een Europese datuminstelling (“dd/mm/jjjj”) zijn de resultaten onvoorspelbaar. Oplossing Gebruik voor het formulierveld met de datum voor de eigenschap Notatie de waarde "Middellange datumnotatie" ("dd/mmm/jjjj") Probleem 5: De query in een SQL tekenreeks vraagt om een Parameter Het gebruik van ‘Waar’ of ‘Onwaar’ geeft een waarschuwing dat Access een parameter verwacht. Voorbeeld: Set rs = CurrentDb.OpenRecordset("select * from tblAfspraak where AfspraakVervolg = Waar;") Geeft de fout ‘Er zijn te weinig parameters. Het verwachte aantal is: 1’ Oorzaak De SQL-tekenreeks wordt hier ‘rechtstreeks’ aan de databasemachine (Jet-engine) aangeboden, terwijl een query eerst door Access ‘vertaald’ wordt. Oplossing Gebruik geen Nederlandse vertalingen, maar “True” c.q. “False” voor de test zoals in: Set rs = CurrentDb.OpenRecordset("select * from tblAfspraak where AfspraakVervolg = True;") Probleem 6: Functie Date werkt niet in een SQL-tekenreeks Bij het maken van een SELECT statement met een "WHERE datumveld = #" & Date + 30 & "#" gaat fout. Oorzaak Een query verwacht een datum in het US formaat "mm/dd/jjjj" en bij een Europese datuminstelling ("dd/mm/jjjj") zijn de resultaten onvoorspelbaar. Oplossing 1) Gebruik geen strings maar zet de functie in de string: "where datumveld = Date() + 30" Of: 2) Gebruik een Format statement: "WHERE datumveld = #" & Format(Date + 30,"jjjj/mm/dd") & "#" Probleem 7: Tabelvalidatieregel geeft ‘Syntax error’ bij het wijzigen Als de naam van een veld in een tabel wordt aangepast, dan zal ook een daarbij bijbehorende tabelvalidatieregel aangepast moeten worden. Als u dit probeert voor een bestaande regel met een oude veldnaam, dan kan de melding ‘De syntax van de expressie die u hebt opgegeven, is ongeldig’ verschijnen. Oorzaak Een interne fout van Access. Oplossing De originele tabelvalidatieregel: IIf([TrialVersion]=Waar,[TrialExpire]>=30,[TrialExpire]=0) Geeft bij het vervangen van de veldnamen een syntax-error: IIf([ProefVersie]=Waar,[ProefVerloopDagen]>=30,[ProefVerloopDagen]=0) Door de numerieke waarden (ProefVerloopDagen IS numeriek!) met enkelvoudige aanhalingstekens te omringen is dit probleem opgelost: IIf([ProefVersie]=Waar,[ProefVerloopDagen]>='30',[ProefVerloopDagen]='0') Maar het opslaan van de tabel geeft een ‘Deze expressie is niet correct ...’-fout tijdens de validatie. Door een VAL()-functie te gebruiken zal de tabelvalidatieregel ook opgeslagen kunnen worden: IIf([ProefVersie]=Waar,Val([ProefVerloopDagen])>='30',Val([ProefVerloopDagen])='0') Probleem 8: Koppelingsbeheer werkt niet en geeft mogelijk een fout met het oude pad voor een tabel De toepassing Hulpmiddelen voor databases>Hulpmiddelen voor databases>Koppelingsbeheer werkt niet voor tabellen met een veld van het gegevenstype ‘Bijlage’. Oorzaak Access houdt in de systeemtabel MSysObject bij welke tabellen een bijlage veld bevatten. Het pad voor deze velden wordt zelfs bij het verwijderen van een tabel niet verwijderd. Oplossing Om de tabelkoppeling te herstellen zijn er twee opties: 1) Verwijder het veld met het gegevenstype ‘Bijlage’, koppel de tabel opnieuw en voeg het veld weer toe. 2) Maak een nieuwe database om een lege MSysObjects-tabel te krijgen, koppel eerst de gekoppelde tabellen met een ‘Bijlage’-gegevenstype en vervolgens alle objecten (met uitzondering van de ‘MSys’-tabellen en de reeds gekoppelde tabellen. Stap voor stap: 1. Plaats alle bestanden (front-end en back-end) in de nieuwe folder. 2. Wijzig de naam van de front-end-database door bijvoorbeeld ‘Oud’ voor de ‘.accdb’ te plaatsen. 3. Start MS Access 2007 en maak een nieuwe database met de originele naam in de nieuwe folder. 4. Open de nieuwe database en sluit de standaard Tabel1. 5. Druk op Alle tabellen in het Navigatiedeelvenster en kies Naar Categorie navigeren>Objecttype. 6. Selecteer Externe gegevens > Importeren > Access en kies de optie Koppelen... 7. Navigeer met de knop Bladeren naar de back-end-database en druk op Openen. 8. Druk op OK en selecteer alleen de tabellen met een ‘Bijlage’-gegevenstype en druk weer op OK. 9. Kies opnieuw Externe gegevens>Importeren>Access. 10. Navigeer naar de ‘Oud’-database en selecteer Tabellen ... importeren... 11. Druk op OK. 12. Selecteer op het formulier Objecten importeren op ieder van de zes tabbladen Alles selecteren. Pas op: Sla de reeds gekoppelde ‘Bijlage’-tabel(len) en de MSys…-tabellen over door erop te klikken (geeft witte achtergrond). 13. Sluit het formulier Objecten importeren en ga naar Hulpmiddelen voor databases>Hulpmiddelen voor databases>Koppelingsbeheer 14. Druk op Alles selecteren en verwijder de vinkjes voor de tabellen die niet in de backend staan. 15. Vink Altijd om nieuwe locatie vragen aan en druk op OK. 16. Selecteer de back-end-database en druk op OK. 17. Sluit Koppelingsbeheer. 18. De database is nu gereed voor gebruik. Als de database tevens referenties bevat, gebruik dan de code uit Probleem 2: ‘Object (Default) niet gevonden.’