Als u een Access-database krijgt die niet met de Nederlandse

advertisement
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.’
Download