| | Help en ondersteuning Koop Office 2007 Training Sjablonen Ondersteuning en feedback Technische bronnen Aanvullende bronnen | Waarschuwing: u wilt deze pagina weergeven met een niet-ondersteunde browser. Deze website wordt het best bekeken met Microsoft Internet Explorer 6.0 of hoger, Firefox 1.5 of Netscape Navigator 8.0 of hoger. Meer informatie over ondersteunde browsers.
Problemen met query's oplossen (MDB)
Alle query's Er verschijnt onverwachts een bericht
Er verschijnt een bericht met een melding over een SQL-syntaxisfout
- U hebt mogelijk een onjuiste syntaxis gebruikt in de SQL-weergave (SQL-weergave: een venster waarin de SQL-instructie voor de huidige query wordt weergegeven of waarmee een SQL-query (samenvoegquery, Pass Through-query of definitiequery) wordt gemaakt. Als u een query maakt in de ontwerpweergave, wordt in de SQL-weergave van Access de corresponderende SQL-instructie gemaakt.).
- U hebt uw query (query: een vraag over de gegevens die in tabellen zijn opgeslagen of een verzoek om een actie uit te voeren op de gegevens. Met een query kunt u gegevens uit verschillende tabellen combineren tot een gegevensbron voor een formulier, rapport of Data Access-pagina.) gemaakt in een andere ANSI SQL-querymodus (ANSI SQL-querymodus: een van de twee typen SQL-syntaxis: ANSI-89 SQL, de traditionele Jet SQL-syntaxis (ook wel Microsoft Jet SQL en ANSI SQL genoemd), en ANSI-92 SQL, dat beschikt over nieuwe en andere gereserveerde woorden, syntaxisregels en jokertekens.) dan de huidige modus van uw Microsoft Access-database (Microsoft Access-database: een verzameling gegevens en objecten (zoals tabellen, query's of formulieren) die betrekking heeft op een bepaald onderwerp of doel. De gegevens worden beheerd door Microsoft Jet Database Engine.).
Waarom u moet vermijden query's te combineren die zijn gemaakt in verschillende ANSI SQL-querymodi
De twee ANSI SQL-querymodi (ANSI SQL-querymodus: een van de twee typen SQL-syntaxis: ANSI-89 SQL, de traditionele Jet SQL-syntaxis (ook wel Microsoft Jet SQL en ANSI SQL genoemd), en ANSI-92 SQL, dat beschikt over nieuwe en andere gereserveerde woorden, syntaxisregels en jokertekens.), ANSI-89 en ANSI-92, zijn niet compatibel. Als u een Microsoft Access-database (Microsoft Access-database: een verzameling gegevens en objecten (zoals tabellen, query's of formulieren) die betrekking heeft op een bepaald onderwerp of doel. De gegevens worden beheerd door Microsoft Jet Database Engine.) maakt, moet u bepalen welke querymodus u wilt gebruiken omdat er runtime-fouten of onverwachte resultaten kunnen optreden wanneer u query's (query: een vraag over de gegevens die in tabellen zijn opgeslagen of een verzoek om een actie uit te voeren op de gegevens. Met een query kunt u gegevens uit verschillende tabellen combineren tot een gegevensbron voor een formulier, rapport of Data Access-pagina.) die in beide querymodi zijn gemaakt door elkaar gebruikt. Het bereik van gegevenstypen, de gereserveerde waarden en de jokertekens verschillen in de querymodi.
Voorbeeld van een query met jokertekens
Een query waarin jokertekens worden gebruikt in een criteriumexpressie kan verschillende resultaten hebben in beide querymodi. Zie de volgende voorbeelden:
- Stel dat u een ANSI-89 SQL-query uitvoert in een database die is ingesteld op de ANSI-92-querymodus, zoals:
SELECT * FROM Customers WHERE Country Like 'U*'
Deze query geeft alle klanten uit een land of regio genaamd 'U*' als resultaat en niet uit al de landen/regio's die beginnen met de letter 'U', omdat het sterretje (*) geen jokerteken is in ANSI-92 SQL.
- Stel dat u een ANSI-92 SQL-query uitvoert in een database die is ingesteld op de ANSI-89-querymodus, zoals:
SELECT * FROM Customers WHERE Country Like 'U%'
Deze query geeft al de klanten uit een land of regio genaamd 'U%' als resultaat en niet uit al de landen/regio's die beginnen met de letter 'U', omdat het procentteken (%) geen jokerteken is in ANSI-89 SQL.
Voorbeeld van een query met een veldnaam die overeenkomt met de aliasnaam
Als een query een alias gebruikt die overeenkomt met de naam van de basiskolom en u vervolgens een berekend veld maakt waarin deze dubbelzinnige naam wordt gebruikt, heeft de query verschillende resultaten in beide querymodi. Zie bijvoorbeeld de volgende query:
SELECT Orders.[Order-id] AS Vrachtkosten, Orders.Vrachtkosten, [Vrachtkosten]*1.1 AS [Nieuwe vrachtkosten] FROM Orders;
Bij gebruik van ANSI-92 SQL wordt de waarde voor Nieuwe vrachtkosten berekend met het veld Vrachtkosten en daarom wordt Vrachtkosten verhoogd met 10%. Bij gebruik van ANSI-89 SQL wordt de waarde voor Nieuwe vrachtkosten berekend met de alias voor Vrachtkosten en daarom wordt elke waarde voor Order-id verhoogd met 10%.
Problemen voorkomen die worden veroorzaakt door het gebruik van verschillende ANSI SQL-querymodi in een database
In het algemeen moet u de volgende handelingen vermijden om te voorkomen dat er problemen optreden door het gebruik van query's die in verschillende ANSI SQL-querymodi zijn gemaakt:
- Een Access-database die is ingesteld op de ANSI-92 SQL-querymodus van de bestandsindeling van 2002 - 2003 naar de 2000- of 97-bestandsindeling converteren. De ANSI-92 SQL-querymodus wordt alleen ondersteund in de bestandsindeling van 2002 - 2003.
- De ANSI SQL-querymodus voor de huidige database wijzigen nadat u een of meer query's hebt gemaakt. Als u dit doet, moet u de bestaande query's opnieuw testen om te controleren of deze nog werken en de gewenste resultaten leveren. Zo nodig moet u de query's herschrijven.
- Query's die in een bepaalde ANSI SQL-querymodus zijn gemaakt importeren in een Access-database die op een andere modus is ingesteld of query's die met een bepaalde ANSI SQL-querymodus zijn gemaakt exporteren naar een Access-database die op een andere modus is ingesteld.
- De ANSI SQL-querymodus in een bestaande toepassing wijzigen. Hierdoor kan de toepassing beschadigd raken zodat u deze opnieuw moet schrijven.
In Access 2000 kon u de ANSI SQL-querymodus alleen via programmacode wijzigen en query's die met de ANSI-92-modus waren gemaakt, werden verborgen in het databasevenster (databasevenster: het venster dat verschijnt als u een Access-database of een Access-project opent. Het bevat snelkoppelingen voor het maken van nieuwe databaseobjecten en het openen van bestaande objecten.). In Access 2002 of hoger kunt u of een gebruiker de ANSI SQL-querymodus wijzigen via de gebruikersinterface en worden ANSI-92-query's niet meer verborgen in het databasevenster, zodat u onbedoelde of opzettelijke wijzigingen aan de ANSI SQL-querymodus van de toepassing kunt helpen voorkomen door de programmacode te beschermen. U kunt bovendien voorkomen dat de querymodus wordt gewijzigd via de gebruikersinterface van de toepassing.
-
Dubbelzinnige aliassen en kolomnamen gebruiken. Zorg ervoor dat aliassen en kolomnamen altijd uniek zijn in een SQL-instructie om verwarring te voorkomen.
Het bericht 'Kan de naam naam niet verbinden' verschijnt
Dit bericht kan verschijnen als u in het dialoogvenster Queryparameters niet expliciet de parameters hebt gedefinieerd die worden gebruikt voor een kruistabelquery (kruistabelquery: een query waarmee de som, het gemiddelde, het aantal of een ander type totaal van records wordt berekend, waarna het resultaat wordt gegroepeerd op grond van twee typen informatie: de informatie links van het gegevensblad en de informatie boven aan het gegevensblad.) of een query waarop een kruistabelquery of grafiek gebaseerd is. U kunt dit probleem als volgt oplossen:
- Geef in de query met de parameter in kwestie de juiste parameter en het bijbehorende gegevenstype op in het dialoogvenster Queryparameters.
Werkwijze
-
Klik op Parameters in het menu Query.
-
Typ in de eerste parametercel de eerste aanwijzing die u in het queryraster (ontwerpraster: het raster waarmee u een query of filter ontwerpt in de ontwerpweergave van de query of in het venster Geavanceerde filter-/sorteeropties. Voorheen werd het ontwerpraster voor query's het QBE-raster genoemd.) hebt ingevoerd.
-
Klik rechts van de cel Gegevenstype op het gewenste gegevenstype (gegevenstype: het kenmerk van een veld dat bepaalt welk type gegevens daarin kunnen worden opgeslagen. Gegevenstypen zijn onder andere Booleaans, Integer, Lang, Valuta, Enkel, Dubbel, Datum, Reeks en Variant (standaardtype).).
| Gegevenstype van het parameterveld: |
Mogelijke gegevenstypen voor de cel Gegevenstype: |
| Valuta, Datum/tijd, Memo, OLE-object, Tekst en Ja/nee |
Valuta, Datum/tijd, Memo, OLE-object, Tekst en Ja/nee |
| Numeriek |
Byte, Enkel, Dubbel, Integer, Lange integer en Replicatie-id. Deze gegevenstypen komen overeen met de vijf instellingen van de eigenschap Veldlengte van het gegevenstype Numeriek. |
| Onbekend |
Waarde. Dit is een algemeen gegevenstype waarbij elk gegevenstype kan worden gebruikt. |
| Binair |
Binaire waarde. Wordt gebruikt bij parameterquery's die gericht zijn op gekoppelde tabellen (gekoppelde tabel: een tabel die is opgeslagen in een bestand buiten de geopende database vanwaar Access toegang tot records kan krijgen. U kunt records in een gekoppelde tabel bewerken, toevoegen en verwijderen, maar u kunt niet de structuur van de tabel wijzigen.) waarin dit gegevenstype wordt herkend (in Microsoft Access wordt dit gegevenstype niet herkend). |
-
Herhaal de stappen 2 en 3 voor elke parameter waarvoor u een gegevenstype wilt instellen.
- Stel vervolgens in dezelfde query de eigenschap Kolomkoptekst in.
Werkwijze
U kunt van kolomkoppen in een kruistabelquery (kruistabelquery: een query waarmee de som, het gemiddelde, het aantal of een ander type totaal van records wordt berekend, waarna het resultaat wordt gegroepeerd op grond van twee typen informatie: de informatie links van het gegevensblad en de informatie boven aan het gegevensblad.) de volgorde wijzigen of het aantal beperken. Zo kunt u in kolomkoppen die de maanden van het jaar bevatten de maanden in chronologische volgorde weergeven, in plaats van op alfabet. Bovendien kunt u de weergegeven kolomkoppen beperken tot de maanden januari tot en met juni.
- Open de kruistabelquery in de ontwerpweergave (ontwerpweergave: een venster waarin het ontwerp wordt weergegeven van de volgende databaseobjecten: tabellen, query's, formulieren, rapporten, macro's en Data Access-pagina's. In de ontwerpweergave kunt u nieuwe databaseobjecten maken en het ontwerp van bestaande databaseobjecten wijzigen.).
- Klik op de achtergrond van de ontwerpweergave van de query buiten het ontwerpraster (ontwerpraster: het raster waarmee u een query of filter ontwerpt in de ontwerpweergave van de query of in het venster Geavanceerde filter-/sorteeropties. Voorheen werd het ontwerpraster voor query's het QBE-raster genoemd.) en de lijsten met velden (lijst met velden: een venster dat alle velden bevat uit de onderliggende recordbron of het onderliggende databaseobject. Alleen in de ontwerpweergave van een Data Access-pagina bevat de lijst met velden alle recordbronnen en bijbehorende velden uit de onderliggende database.).
- Klik op Eigenschappen
op de werkbalk om het eigenschappenvenster van de query weer te geven.
- Typ in het vak van de eigenschap Kolomkoptekst de kolomkoppen die u wilt weergeven in de volgorde waarin u deze wilt weergeven. Typ tussen de kolomkoppen een komma of het lijstscheidingsteken dat bij de instellingen voor uw land of regio hoort. (Zie Landinstellingen in het Configuratiescherm van Microsoft Windows als u wilt weten wat het lijstscheidingsteken is voor uw land.)
De kolomkopteksten die u invoert, moeten exact gelijk zijn aan de kolomkopteksten in het gegevensblad van de query. Als een kolomkoptekst in het gegevensblad bijvoorbeeld `USA' is, moet u als kolomkop `USA' invoeren, niet `VS' (als u op ENTER drukt of de aanwijzer verplaatst, worden de kopteksten tussen dubbele aanhalingstekens geplaatst).
- Klik op Beeld
op de werkbalk om het queryresultaat te bekijken.
Opmerkingen
Er verschijnt een bericht met de melding dat inbreuk wordt gemaakt op een sleutel
In de volgende gevallen is sprake van een sleutelconflict:
Als u een dergelijke query start, worden de records die het sleutelconflict hebben veroorzaakt, niet bijgewerkt.
Als u records wilt wijzigen die inbreuk maken op de referentiële integriteit, kunt u de relatie tussen de desbetreffende tabellen verbreken. U kunt ook de referentiële integriteit uitschakelen en vervolgens de tabellen een voor een wijzigen. In dat geval is het echter mogelijk dat de resulterende gegevens in de twee tabellen strijdig zijn met elkaar.
Er verschijnt een bericht met de melding dat er minder parameters zijn opgegeven dan verwacht
Dit bericht kan verschijnen als u in het dialoogvenster Queryparameters geen gegevenstypen hebt opgegeven voor een parameterquery (parameterquery: een query waarin u op interactieve wijze een of meer criteriawaarden opgeeft. Een parameterquery is geen afzonderlijk type query, maar is wel flexibeler dan een gewone query.) die wordt geëxporteerd naar een IDC (IDC-/HTX-bestanden: op de Microsoft Internet Information Server wordt een IDC-bestand en een HTX-bestand gebruikt om gegevens op te halen uit een ODBC-gegevensbron en deze te formatteren als HTML-document.)-bestand.
- Klik in het databasevenster (databasevenster: het venster dat verschijnt als u een Access-database of een Access-project opent. Het bevat snelkoppelingen voor het maken van nieuwe databaseobjecten en het openen van bestaande objecten.) op Query's
onder Objecten.
- Klik op de naam van de parameterquery die u wilt wijzigen en klik op Ontwerpen op de werkbalk van het databasevenster.
- Geef een gegevenstype op voor de parameter.
Werkwijze
-
Klik op Parameters in het menu Query.
-
Typ in de eerste parametercel de eerste aanwijzing die u in het queryraster (ontwerpraster: het raster waarmee u een query of filter ontwerpt in de ontwerpweergave van de query of in het venster Geavanceerde filter-/sorteeropties. Voorheen werd het ontwerpraster voor query's het QBE-raster genoemd.) hebt ingevoerd.
-
Klik rechts van de cel Gegevenstype op het gewenste gegevenstype (gegevenstype: het kenmerk van een veld dat bepaalt welk type gegevens daarin kunnen worden opgeslagen. Gegevenstypen zijn onder andere Booleaans, Integer, Lang, Valuta, Enkel, Dubbel, Datum, Reeks en Variant (standaardtype).).
| Gegevenstype van het parameterveld: |
Mogelijke gegevenstypen voor de cel Gegevenstype: |
| Valuta, Datum/tijd, Memo, OLE-object, Tekst en Ja/nee |
Valuta, Datum/tijd, Memo, OLE-object, Tekst en Ja/nee |
| Numeriek |
Byte, Enkel, Dubbel, Integer, Lange integer en Replicatie-id. Deze gegevenstypen komen overeen met de vijf instellingen van de eigenschap Veldlengte van het gegevenstype Numeriek. |
| Onbekend |
Waarde. Dit is een algemeen gegevenstype waarbij elk gegevenstype kan worden gebruikt. |
| Binair |
Binaire waarde. Wordt gebruikt bij parameterquery's die gericht zijn op gekoppelde tabellen (gekoppelde tabel: een tabel die is opgeslagen in een bestand buiten de geopende database vanwaar Access toegang tot records kan krijgen. U kunt records in een gekoppelde tabel bewerken, toevoegen en verwijderen, maar u kunt niet de structuur van de tabel wijzigen.) waarin dit gegevenstype wordt herkend (in Microsoft Access wordt dit gegevenstype niet herkend). |
-
Herhaal de stappen 2 en 3 voor elke parameter waarvoor u een gegevenstype wilt instellen.
-
Sla de query op en voer deze uit.
Het bericht 'De bewerking moet worden uitgevoerd op een query die kan worden bijgewerkt' verschijnt
Dit foutbericht verschijnt als de rij Wijzigen in van de huidige query een veld bevat van een kruistabelquery of een selectiequery, waarin een statistische functie (statistische functie: een functie, zoals Som, Aantal, Gem of Var, waarmee u totalen kunt berekenen.) is gebruikt voor het berekenen van een totaal (ofwel met de rij Totaal of met een domeinfunctie (statistische domeinfunctie: een functie zoals DAvg of DMax, die wordt gebruikt bij de berekening van statistische gegevens voor een bepaalde set records (een domein).) in de rij Veld). Als u een veld wilt bijwerken waarin het totaal van een ander veld wordt gebruikt, moet u het totaal in de bijwerkquery zelf berekenen en niet in een andere query.
- Verwijder in de ontwerpweergave van de actieve query (ontwerpweergave: een venster waarin het ontwerp wordt weergegeven van de volgende databaseobjecten: tabellen, query's, formulieren, rapporten, macro's en Data Access-pagina's. In de ontwerpweergave kunt u nieuwe databaseobjecten maken en het ontwerp van bestaande databaseobjecten wijzigen.) het veld dat u hebt toegevoegd uit de kruistabel- of selectiequery (waarin een totaal voor het veld is berekend).
- Geef in de cel Wijzigen in van het veld dat u wilt bijwerken een domeinfunctie op waarmee voor dat veld hetzelfde totaal wordt berekend als in de selectie- of kruistabelquery.
Als de tabel Products bijvoorbeeld een berekend veld (berekend veld: een veld dat is opgegeven in een query en dat het resultaat van een expressie weergeeft in plaats van opgeslagen gegevens. Als een waarde in de expressie wordt gewijzigd, wordt de waarde van het veld opnieuw berekend.) Sales So Far bevat, kunt u dit veld bijwerken met het product van het veld Quantity en het veld UnitPrice in de tabel Order Details. Dit doet u door het veld toe te voegen aan het ontwerpraster in de bijwerkquery en vervolgens de volgende domeinfunctie op te geven in de cel Wijzigen in:
DSum("[Quantity] * [UnitPrice]", "Order Details", "[ProductID]=" & [ProductID])
- Als u de query wilt uitvoeren, klikt u op Uitvoeren
op de werkbalk.
- Open de tabel door in het databasevenster onder Objecten op Tabellen
en vervolgens op Openen op de werkbalk van het databasevenster te klikken als u de resultaten wilt bekijken.
Het gebruik van een jokerteken in mijn query levert een onverwacht resultaat op
De twee ANSI SQL-querymodi (ANSI SQL-querymodus: een van de twee typen SQL-syntaxis: ANSI-89 SQL, de traditionele Jet SQL-syntaxis (ook wel Microsoft Jet SQL en ANSI SQL genoemd), en ANSI-92 SQL, dat beschikt over nieuwe en andere gereserveerde woorden, syntaxisregels en jokertekens.), ANSI-89 en ANSI-92, zijn niet compatibel en maken gebruik van verschillende jokertekens. Hierdoor kan het volgende gebeuren:
Wanneer u een Microsoft Access-database (Microsoft Access-database: een verzameling gegevens en objecten (zoals tabellen, query's of formulieren) die betrekking heeft op een bepaald onderwerp of doel. De gegevens worden beheerd door Microsoft Jet Database Engine.) maakt, moet u beslissen welke querymodus u wilt gebruiken. Als u later een query maakt in een andere ANSI SQL-querymodus dan de ingestelde modus in uw Access-database, kan de query runtime-fouten of onverwachte resultaten genereren.
Jokertekens gebruiken om naar gedeeltelijk of geheel overeenkomende waarden te zoeken
U kunt in een zoekreeks jokertekens als tijdelijke aanduiding voor andere tekens gebruiken wanneer u een waarde zoekt en:
- u slechts een gedeelte van de waarde kent;
- u alle waarden wilt zoeken die met een bepaalde letter beginnen of die met een bepaald patroon overeenkomen.
Jokertekens worden in principe gebruikt voor velden met het gegevenstype Tekst. U kunt jokertekens soms ook gebruiken voor gegevens van een ander type, zoals datums, op voorwaarde dat u de landinstellingen voor deze gegevenstypen niet hebt gewijzigd in het Configuratiescherm van Microsoft Windows.
Als u werkt met Microsoft Jet Database Engine SQL in een Microsoft Access-database (Microsoft Access-database: een verzameling gegevens en objecten (zoals tabellen, query's of formulieren) die betrekking heeft op een bepaald onderwerp of doel. De gegevens worden beheerd door Microsoft Jet Database Engine.), kunt u de volgende jokertekens gebruiken in query's (query: een vraag over de gegevens die in tabellen zijn opgeslagen of een verzoek om een actie uit te voeren op de gegevens. Met een query kunt u gegevens uit verschillende tabellen combineren tot een gegevensbron voor een formulier, rapport of Data Access-pagina.) en expressies (expressie: elke mogelijke combinatie van wiskundige of logische operatoren, constanten, functies en namen van velden, besturingselementen en eigenschappen, die resulteert in één enkele waarde. Met expressies kunt u berekeningen uitvoeren, tekens bewerken of gegevens testen.) om te zoeken naar veldwaarden, records of bestandsnamen. U kunt deze jokertekens ook gebruiken in de dialoogvensters Zoeken en Vervangen in een Access-database of een Access-project (Microsoft Access-project: een Access-bestand dat is verbonden met een Microsoft SQL Server-database en wordt gebruikt voor het maken van client/server-toepassingen. Een Access-project bevat geen objecten met gegevens of objecten die zijn gebaseerd op definities, zoals tabellen en weergaven.).
| Teken |
Beschrijving |
Voorbeeld |
| * |
Komt overeen met een willekeurig aantal tekens. Kan worden gebruikt als eerste of laatste teken in de tekenreeks. |
Met we* vindt u 'wel', 'wereld' en 'weten'. |
| ? |
Komt overeen met één willekeurig teken. |
Met b?l vindt u 'bal', 'bel', 'bil', 'bol' en 'bul'. |
| [ ] |
Komt overeen met elk van de afzonderlijke tekens tussen de vierkante haakjes. |
Met b[ae]l vindt u 'bal' en 'bel', maar niet 'bil', 'bol' of 'bul'. |
| ! |
Komt overeen met elk teken dat niet tussen de vierkante haakjes staat. |
Met b[!ae]l vindt u 'bil', 'bol' en 'bul', maar niet 'bal' of 'bel'. |
| - |
Komt overeen met elk van de tekens binnen een bereik van tekens. U moet een bereik in oplopende volgorde opgeven (dus van A tot Z, niet van Z tot A). |
Met b[a-c]d vindt u 'bad', 'bbd', en 'bcd'. |
| # |
Komt overeen met één cijfer. |
Met 1#3 vindt u 103, 113, 123. |
Als u zoekt naar veldwaarden, records of bestandsnamen in een Microsoft Access-project, of in een Microsoft Access-database waarin SQL Server-compatibele syntaxis is gebruikt, kunt u de volgende ANSI-92-jokertekens gebruiken.
Opmerking Als u de dialoogvensters Zoeken en Vervangen gebruikt in een Access-project of in een Access-database waarin Microsoft SQL Server-compatibele syntaxis wordt gebruikt, moet u de jokertekens van Microsoft Jet SQL gebruiken.
| Teken |
Beschrijving |
Voorbeeld |
| % |
Komt overeen met een willekeurig aantal tekens. Kan worden gebruikt als eerste of laatste teken in de tekenreeks. |
Met we% vindt u 'wel', 'wereld' en 'weten'. |
| _ |
Komt overeen met één willekeurig teken. |
Met b_l vindt u 'bal', 'bel', 'bil', 'bol' en 'bul'. |
| [ ] |
Komt overeen met elk van de afzonderlijke tekens tussen de vierkante haakjes. |
Met b[ae]l vindt u 'bal' en 'bel', maar niet 'bil', 'bol' of 'bul'. |
| ^ |
Komt overeen met elk teken dat niet tussen de vierkante haakjes staat. |
Met b[^ae]l vindt u 'bil', 'bol' en 'bul', maar niet 'bal' of 'bel'. |
| - |
Komt overeen met elk van de tekens binnen een bereik van tekens. U moet een bereik in oplopende volgorde opgeven (dus van A tot Z, niet van Z tot A). |
Met b[a-c]d vindt u 'bad', 'bbd', en 'bcd'. |
Opmerkingen
Dezelfde onderliggende query geeft een ander resultaat in een Data Access-pagina en een formulier
De onderliggende query (query: een vraag over de gegevens die in tabellen zijn opgeslagen of een verzoek om een actie uit te voeren op de gegevens. Met een query kunt u gegevens uit verschillende tabellen combineren tot een gegevensbron voor een formulier, rapport of Data Access-pagina.) van een formulier (formulier: een databaseobject van Access waarin u besturingselementen plaatst voor het uitvoeren van acties of het invoeren, weergeven en bewerken van gegevens in velden.) wordt uitgevoerd in de ANSI SQL-querymodus (ANSI SQL-querymodus: een van de twee typen SQL-syntaxis: ANSI-89 SQL, de traditionele Jet SQL-syntaxis (ook wel Microsoft Jet SQL en ANSI SQL genoemd), en ANSI-92 SQL, dat beschikt over nieuwe en andere gereserveerde woorden, syntaxisregels en jokertekens.) die momenteel is ingesteld in de Microsoft Access-database (Microsoft Access-database: een verzameling gegevens en objecten (zoals tabellen, query's of formulieren) die betrekking heeft op een bepaald onderwerp of doel. De gegevens worden beheerd door Microsoft Jet Database Engine.). De onderliggende query van een Data Access-pagina (Data Access-pagina: een webpagina die vanuit Access wordt gepubliceerd en die een koppeling naar een database bevat. Op een Data Access-pagina kunt u gegevens die zijn opgeslagen in de database bekijken, toevoegen, wijzigen en anderszins bewerken. Een Data Access-pagina kan ook gegevens bevatten uit andere bronnen, bijvoorbeeld Excel.) wordt echter altijd uitgevoerd in de ANSI-92 SQL-querymodus omdat de pagina wordt verbonden met de Access-database via ADO (ActiveX Data Objects (ADO): een interface voor gegevenstoegang die communiceert met OLE DB-gegevensbronnen om gegevens te kunnen koppelen, ophalen, bewerken en bijwerken.) en de Microsoft Jet OLE DB-provider, die beide uitsluitend functioneren met ANSI-92 SQL. Als voor uw Access-database de ANSI-89 SQL-querymodus is ingesteld, wordt de onderliggende query van het formulier uitgevoerd in de ANSI-89-modus, terwijl de onderliggende query van een pagina altijd in de ANSI-92-modus wordt uitgevoerd, ongeacht de instelling van de Access-database. U kunt dit probleem voorkomen door een andere query voor het formulier te gebruiken en door de query voor het formulier te herschrijven zodat deze hetzelfde resultaat genereert als de onderliggende query voor de pagina. Ik krijg niet de records die ik wil hebben
Er worden te weinig records opgehaald
- Als het door u gebruikte jointype alleen overeenkomende records uit de twee gekoppelde tabellen ophaalt, worden de records waarin het gekoppelde veld een Null (Null: een waarde die kan worden ingevoerd in een veld of worden gebruikt in expressies en query's om ontbrekende of onbekende gegevens aan te duiden. In Visual Basic verwijst het sleutelwoord Null naar een Null-waarde. Sommige velden, zoals velden waarvoor een primaire sleutel is ingesteld, kunnen geen Null-waarden bevatten.)-waarde bevat niet opgenomen in het queryresultaat. U kunt de functie Nz gebruiken om Null-waarden te converteren naar een nul, een tekenreeks met lengte nul of een andere waarde, zodat deze records worden opgenomen in het resultaat van de query.
- Als u criteria (criteria: voorwaarden die u opgeeft als u alleen bepaalde records wilt opnemen in het resultaat van een query of filter.) hebt opgegeven, beperken deze het resultaat van de query mogelijk te veel. Als u bijvoorbeeld criteria hebt opgegeven in de rij Criteria voor twee verschillende velden, wordt een record pas opgehaald wanneer deze aan beide criteria voldoet. Mogelijk levert de query pas meer records op wanneer u enkele of alle criteria verwijdert.
- Als u criteria hebt opgegeven waarin twee of meer expressies (expressie: elke mogelijke combinatie van wiskundige of logische operatoren, constanten, functies en namen van velden, besturingselementen en eigenschappen, die resulteert in één enkele waarde. Met expressies kunt u berekeningen uitvoeren, tekens bewerken of gegevens testen.) met de operator OR worden gecombineerd in meer dan een criteriumrij, moet u andere expressies herhalen in andere velden voor elke criteriumrij die u hebt gebruikt om deze andere expressies toe te passen op alle criteria. Als u bijvoorbeeld de criteria 'Canada' OR 'UK' combineert in het veld voor het veld ShipCountry en u het veld ExtendedPrice voor beide landen wilt beperken tot 10000, voert u alle criteria in op één criteriumrij of herhaalt u de expressie 10000 voor elke criteriumrij die u gebruikt.
- Controleer of de bestaande criteria op de juiste wijze zijn ingevoerd en of deze geen schrijffouten, onnodige spaties of extra tekens bevatten. Controleer of u de criteria bij het juiste veld hebt opgegeven en of het wel de criteria zijn waaraan de records moeten voldoen.
- Als een veldnaam een dubbele punt bevat, moet u de veldnaam tussen vierkante haken plaatsen als u er in een expressie naar verwijst. Anders ziet Microsoft Access de veldnaam als een letterlijke tekstwaarde en worden niet de gewenste records opgehaald.
- Gebruik jokertekens in de criteria als u niet zeker weet wat de exacte veldwaarden zijn of als u deze niet wilt opgeven. Als u al jokertekens gebruikt en toch niet de gewenste records krijgt, gebruikt u de jokertekens mogelijk niet voor het juiste gegevenstype.
- Voeg alternatieve criteria toe om de records te selecteren waarmee u wilt werken. Dit kunt u doen in het ontwerpraster (ontwerpraster: het raster waarmee u een query of filter ontwerpt in de ontwerpweergave van de query of in het venster Geavanceerde filter-/sorteeropties. Voorheen werd het ontwerpraster voor query's het QBE-raster genoemd.) van de query in de rij Of of in de rij Criteria, waarbij u expressies gebruikt die de operator Or bevatten.
- Als u criteria gebruikt om records te selecteren die bepaalde waarden bevatten in een of meer velden, worden records met een Null-waarde in die velden niet opgenomen in het queryresultaat, aangezien een Null-waarde niet overeenkomt met de door u opgegeven waarde(n). Als u ook records met een Null-waarde in het queryresultaat wilt opnemen, typt u Is Null in de rij Of.
De query wordt uitgevoerd in een andere ANSI SQL-querymodus
U hebt uw query (query: een vraag over de gegevens die in tabellen zijn opgeslagen of een verzoek om een actie uit te voeren op de gegevens. Met een query kunt u gegevens uit verschillende tabellen combineren tot een gegevensbron voor een formulier, rapport of Data Access-pagina.) gemaakt in een andere ANSI SQL-querymodus (ANSI SQL-querymodus: een van de twee typen SQL-syntaxis: ANSI-89 SQL, de traditionele Jet SQL-syntaxis (ook wel Microsoft Jet SQL en ANSI SQL genoemd), en ANSI-92 SQL, dat beschikt over nieuwe en andere gereserveerde woorden, syntaxisregels en jokertekens.) dan de huidige modus van uw Microsoft Access-database (Microsoft Access-database: een verzameling gegevens en objecten (zoals tabellen, query's of formulieren) die betrekking heeft op een bepaald onderwerp of doel. De gegevens worden beheerd door Microsoft Jet Database Engine.).
Waarom u moet vermijden query's te combineren die zijn gemaakt in verschillende ANSI SQL-querymodi
De twee ANSI SQL-querymodi (ANSI SQL-querymodus: een van de twee typen SQL-syntaxis: ANSI-89 SQL, de traditionele Jet SQL-syntaxis (ook wel Microsoft Jet SQL en ANSI SQL genoemd), en ANSI-92 SQL, dat beschikt over nieuwe en andere gereserveerde woorden, syntaxisregels en jokertekens.), ANSI-89 en ANSI-92, zijn niet compatibel. Als u een Microsoft Access-database (Microsoft Access-database: een verzameling gegevens en objecten (zoals tabellen, query's of formulieren) die betrekking heeft op een bepaald onderwerp of doel. De gegevens worden beheerd door Microsoft Jet Database Engine.) maakt, moet u bepalen welke querymodus u wilt gebruiken omdat er runtime-fouten of onverwachte resultaten kunnen optreden wanneer u query's (query: een vraag over de gegevens die in tabellen zijn opgeslagen of een verzoek om een actie uit te voeren op de gegevens. Met een query kunt u gegevens uit verschillende tabellen combineren tot een gegevensbron voor een formulier, rapport of Data Access-pagina.) die in beide querymodi zijn gemaakt door elkaar gebruikt. Het bereik van gegevenstypen, de gereserveerde waarden en de jokertekens verschillen in de querymodi.
Voorbeeld van een query met jokertekens
Een query waarin jokertekens worden gebruikt in een criteriumexpressie kan verschillende resultaten hebben in beide querymodi. Zie de volgende voorbeelden:
- Stel dat u een ANSI-89 SQL-query uitvoert in een database die is ingesteld op de ANSI-92-querymodus, zoals:
SELECT * FROM Klanten WHERE Land Like 'U*'
Deze query geeft alle klanten als resultaat uit een land of regio met de naam 'U*', niet alle landen/regio's die beginnen met de letter 'U', omdat het sterretje (*) geen jokerteken is in ANSI-92 SQL.
- Stel dat u een ANSI-92 SQL-query uitvoert in een database die is ingesteld op de ANSI-89-querymodus, zoals:
SELECT * FROM Klanten WHERE Land Like 'U%'
Deze query geeft al de klanten uit een land of regio genaamd 'U%' als resultaat en niet uit al de landen/regio's die beginnen met de letter 'U', omdat het procentteken (%) geen jokerteken is in ANSI-89 SQL.
Voorbeeld van een query met een veldnaam die overeenkomt met de aliasnaam
Als een query een alias gebruikt die overeenkomt met de naam van de basiskolom en u vervolgens een berekend veld maakt waarin deze dubbelzinnige naam wordt gebruikt, heeft de query verschillende resultaten in beide querymodi. Zie bijvoorbeeld de volgende query:
SELECT Orders.[Order-id] AS Vrachtkosten, Orders.Vrachtkosten, [Vrachtkosten]*1.1 AS [Nieuwe vrachtkosten] FROM Orders;
Bij gebruik van ANSI-92 SQL wordt de waarde voor Nieuwe vrachtkosten berekend met het veld Vrachtkosten en daarom wordt Vrachtkosten verhoogd met 10%. Bij gebruik van ANSI-89 SQL wordt de waarde voor Nieuwe vrachtkosten berekend met de alias voor Vrachtkosten en daarom wordt elke waarde voor Order-id verhoogd met 10%.
Problemen voorkomen die worden veroorzaakt door het gebruik van verschillende ANSI SQL-querymodi in een database
In het algemeen moet u de volgende handelingen vermijden om te voorkomen dat er problemen optreden door het gebruik van query's die in verschillende ANSI SQL-querymodi zijn gemaakt:
- Een Access-database die is ingesteld op de ANSI-92 SQL-querymodus van de bestandsindeling van 2002 - 2003 naar de 2000- of 97-bestandsindeling converteren. De ANSI-92 SQL-querymodus wordt alleen ondersteund in de bestandsindeling van 2002 - 2003.
- De ANSI SQL-querymodus voor de huidige database wijzigen nadat u een of meer query's hebt gemaakt. Als u dit doet, moet u de bestaande query's opnieuw testen om te controleren of deze nog werken en de gewenste resultaten leveren. Zo nodig moet u de query's herschrijven.
- Query's die in een bepaalde ANSI SQL-querymodus zijn gemaakt importeren in een Access-database die op een andere modus is ingesteld of query's die met een bepaalde ANSI SQL-querymodus zijn gemaakt exporteren naar een Access-database die op een andere modus is ingesteld.
- De ANSI SQL-querymodus in een bestaande toepassing wijzigen. Hierdoor kan de toepassing beschadigd raken zodat u deze opnieuw moet schrijven.
In Access 2000 kon u de ANSI SQL-querymodus alleen via programmacode wijzigen en query's die met de ANSI-92-modus waren gemaakt, werden verborgen in het databasevenster (databasevenster: het venster dat verschijnt als u een Access-database of een Access-project opent. Het bevat snelkoppelingen voor het maken van nieuwe databaseobjecten en het openen van bestaande objecten.). In Access 2002 of hoger kunt u of een gebruiker de ANSI SQL-querymodus wijzigen via de gebruikersinterface en worden ANSI-92-query's niet meer verborgen in het databasevenster, zodat u onbedoelde of opzettelijke wijzigingen aan de ANSI SQL-querymodus van de toepassing kunt helpen voorkomen door de programmacode te beschermen. U kunt bovendien voorkomen dat de querymodus wordt gewijzigd via de gebruikersinterface van de toepassing.
-
Dubbelzinnige aliassen en kolomnamen gebruiken. Zorg ervoor dat aliassen en kolomnamen altijd uniek zijn in een SQL-instructie om verwarring te voorkomen.
Ik krijg niet de kolommen die ik wil hebben
De query wordt uitgevoerd in een andere ANSI SQL-querymodus
U hebt uw query (query: een vraag over de gegevens die in tabellen zijn opgeslagen of een verzoek om een actie uit te voeren op de gegevens. Met een query kunt u gegevens uit verschillende tabellen combineren tot een gegevensbron voor een formulier, rapport of Data Access-pagina.) gemaakt in een andere ANSI SQL-querymodus (ANSI SQL-querymodus: een van de twee typen SQL-syntaxis: ANSI-89 SQL, de traditionele Jet SQL-syntaxis (ook wel Microsoft Jet SQL en ANSI SQL genoemd), en ANSI-92 SQL, dat beschikt over nieuwe en andere gereserveerde woorden, syntaxisregels en jokertekens.) dan de huidige modus van uw Microsoft Access-database (Microsoft Access-database: een verzameling gegevens en objecten (zoals tabellen, query's of formulieren) die betrekking heeft op een bepaald onderwerp of doel. De gegevens worden beheerd door Microsoft Jet Database Engine.).
Waarom u moet vermijden query's te combineren die zijn gemaakt in verschillende ANSI SQL-querymodi
De twee ANSI SQL-querymodi (ANSI SQL-querymodus: een van de twee typen SQL-syntaxis: ANSI-89 SQL, de traditionele Jet SQL-syntaxis (ook wel Microsoft Jet SQL en ANSI SQL genoemd), en ANSI-92 SQL, dat beschikt over nieuwe en andere gereserveerde woorden, syntaxisregels en jokertekens.), ANSI-89 en ANSI-92, zijn niet compatibel. Als u een Microsoft Access-database (Microsoft Access-database: een verzameling gegevens en objecten (zoals tabellen, query's of formulieren) die betrekking heeft op een bepaald onderwerp of doel. De gegevens worden beheerd door Microsoft Jet Database Engine.) maakt, moet u bepalen welke querymodus u wilt gebruiken omdat er runtime-fouten of onverwachte resultaten kunnen optreden wanneer u query's (query: een vraag over de gegevens die in tabellen zijn opgeslagen of een verzoek om een actie uit te voeren op de gegevens. Met een query kunt u gegevens uit verschillende tabellen combineren tot een gegevensbron voor een formulier, rapport of Data Access-pagina.) die in beide querymodi zijn gemaakt door elkaar gebruikt. Het bereik van gegevenstypen, de gereserveerde waarden en de jokertekens verschillen in de querymodi.
Voorbeeld van een query met jokertekens
Een query waarin jokertekens worden gebruikt in een criteriumexpressie kan verschillende resultaten hebben in beide querymodi. Zie de volgende voorbeelden:
- Stel dat u een ANSI-89 SQL-query uitvoert in een database die is ingesteld op de ANSI-92-querymodus, zoals:
SELECT * FROM Klanten WHERE Land Like 'U*'
Deze query geeft alle klanten uit een land of regio genaamd 'U*' als resultaat en niet uit al de landen/regio's die beginnen met de letter 'U', omdat het sterretje (*) geen jokerteken is in ANSI-92 SQL.
- Stel dat u een ANSI-92 SQL-query uitvoert in een database die is ingesteld op de ANSI-89-querymodus, zoals:
SELECT * FROM Klanten WHERE Land Like 'U%'
Deze query geeft al de klanten uit een land of regio genaamd 'U%' als resultaat en niet uit al de landen/regio's die beginnen met de letter 'U', omdat het procentteken (%) geen jokerteken is in ANSI-89 SQL.
Voorbeeld van een query met een veldnaam die overeenkomt met de aliasnaam
Als een query een alias gebruikt die overeenkomt met de naam van de basiskolom en u vervolgens een berekend veld maakt waarin deze dubbelzinnige naam wordt gebruikt, heeft de query verschillende resultaten in beide querymodi. Zie bijvoorbeeld de volgende query:
SELECT Orders.[Order-id] AS Vrachtkosten, Orders.Vrachtkosten, [Vrachtkosten]*1.1 AS [Nieuwe vrachtkosten] FROM Orders;
Bij gebruik van ANSI-92 SQL wordt de waarde voor Nieuwe vrachtkosten berekend met het veld Vrachtkosten en daarom wordt Vrachtkosten verhoogd met 10%. Bij gebruik van ANSI-89 SQL wordt de waarde voor Nieuwe vrachtkosten berekend met de alias voor Vrachtkosten en daarom wordt elke waarde voor Order-id verhoogd met 10%.
Problemen voorkomen die worden veroorzaakt door het gebruik van verschillende ANSI SQL-querymodi in een database
In het algemeen moet u de volgende handelingen vermijden om te voorkomen dat er problemen optreden door het gebruik van query's die in verschillende ANSI SQL-querymodi zijn gemaakt:
- Een Access-database die is ingesteld op de ANSI-92 SQL-querymodus van de bestandsindeling van 2002 - 2003 naar de 2000- of 97-bestandsindeling converteren. De ANSI-92 SQL-querymodus wordt alleen ondersteund in de bestandsindeling van 2002 - 2003.
- De ANSI SQL-querymodus voor de huidige database wijzigen nadat u een of meer query's hebt gemaakt. Als u dit doet, moet u de bestaande query's opnieuw testen om te controleren of deze nog werken en de gewenste resultaten leveren. Zo nodig moet u de query's herschrijven.
- Query's die in een bepaalde ANSI SQL-querymodus zijn gemaakt importeren in een Access-database die op een andere modus is ingesteld of query's die met een bepaalde ANSI SQL-querymodus zijn gemaakt exporteren naar een Access-database die op een andere modus is ingesteld.
- De ANSI SQL-querymodus in een bestaande toepassing wijzigen. Hierdoor kan de toepassing beschadigd raken zodat u deze opnieuw moet schrijven.
In Access 2000 kon u de ANSI SQL-querymodus alleen via programmacode wijzigen en query's die met de ANSI-92-modus waren gemaakt, werden verborgen in het databasevenster (databasevenster: het venster dat verschijnt als u een Access-database of een Access-project opent. Het bevat snelkoppelingen voor het maken van nieuwe databaseobjecten en het openen van bestaande objecten.). In Access 2002 of hoger kunt u of een gebruiker de ANSI SQL-querymodus wijzigen via de gebruikersinterface en worden ANSI-92-query's niet meer verborgen in het databasevenster, zodat u onbedoelde of opzettelijke wijzigingen aan de ANSI SQL-querymodus van de toepassing kunt helpen voorkomen door de programmacode te beschermen. U kunt bovendien voorkomen dat de querymodus wordt gewijzigd via de gebruikersinterface van de toepassing.
-
Dubbelzinnige aliassen en kolomnamen gebruiken. Zorg ervoor dat aliassen en kolomnamen altijd uniek zijn in een SQL-instructie om verwarring te voorkomen.
Een berekening levert andere resultaten op dan ik had verwacht
Een berekening van totalen (statistische berekening) levert niet het juiste resultaat op
- Als er records met Null- (Null: een waarde die kan worden ingevoerd in een veld of worden gebruikt in expressies en query's om ontbrekende of onbekende gegevens aan te duiden. In Visual Basic verwijst het sleutelwoord Null naar een Null-waarde. Sommige velden, zoals velden waarvoor een primaire sleutel is ingesteld, kunnen geen Null-waarden bevatten.)waarden (lege waarden) voorkomen in het veld dat u aan het berekenen bent, worden deze records niet opgenomen in de berekening.
- Als de query de berekening niet op de juiste groepen uitvoert, controleert u of in de rij Totaal van het veld of de velden waarmee u groepsberekeningen wilt uitvoeren Group By staat. Ook is het van belang op welke plaats in het ontwerpraster van een query u criteria (criteria: voorwaarden die u opgeeft als u alleen bepaalde records wilt opnemen in het resultaat van een query of filter.) opgeeft. Afhankelijk daarvan wordt een aantal records uitgesloten voordat de query gegevens groepeert of berekeningen uitvoert, worden groepen uitgesloten voordat een berekening wordt uitgevoerd, of worden alleen bepaalde resultaten uitgesloten nadat de berekening is uitgevoerd.
- In een kruistabelquery (kruistabelquery: een query waarmee de som, het gemiddelde, het aantal of een ander type totaal van records wordt berekend, waarna het resultaat wordt gegroepeerd op grond van twee typen informatie: de informatie links van het gegevensblad en de informatie boven aan het gegevensblad.) kan het voorkomen dat u te veel of te weinig Group By-velden hebt. Voeg velden toe of verwijder of wijzig de velden die zijn aangewezen als rijkoppen waarmee de totalen verticaal worden gegroepeerd. Controleer of u de juiste veldwaarden gebruikt voor de kolomkoppen waarmee de totalen horizontaal worden gegroepeerd.
- Controleer of u de juiste statistische functie (statistische functie: een functie, zoals Som, Aantal, Gem of Var, waarmee u totalen kunt berekenen.) hebt geselecteerd. Als dat niet zo is, selecteert u een andere statistische functie in de lijst in de rij Totaal.
De rekenkundige bewerking in het ontwerpraster levert een Null-waarde (lege waarde) op
Als u een rekenkundige operator (zoals +, -, *, /) gebruikt in een expressie (expressie: elke mogelijke combinatie van wiskundige of logische operatoren, constanten, functies en namen van velden, besturingselementen en eigenschappen, die resulteert in één enkele waarde. Met expressies kunt u berekeningen uitvoeren, tekens bewerken of gegevens testen.), zoals UnitsInStock] + [UnitsOnOrder] en een van de velden in de expressie een Null (Null: een waarde die kan worden ingevoerd in een veld of worden gebruikt in expressies en query's om ontbrekende of onbekende gegevens aan te duiden. In Visual Basic verwijst het sleutelwoord Null naar een Null-waarde. Sommige velden, zoals velden waarvoor een primaire sleutel is ingesteld, kunnen geen Null-waarden bevatten.)-waarde bevat, levert de gehele expressie een Null-waarde als resultaat op. U kunt dit voorkomen door Null-waarden met behulp van de functie Nz te converteren naar nullen of andere getallen.
De query wordt uitgevoerd in een andere ANSI SQL-querymodus
U hebt uw query (query: een vraag over de gegevens die in tabellen zijn opgeslagen of een verzoek om een actie uit te voeren op de gegevens. Met een query kunt u gegevens uit verschillende tabellen combineren tot een gegevensbron voor een formulier, rapport of Data Access-pagina.) gemaakt in een andere ANSI SQL-querymodus (ANSI SQL-querymodus: een van de twee typen SQL-syntaxis: ANSI-89 SQL, de traditionele Jet SQL-syntaxis (ook wel Microsoft Jet SQL en ANSI SQL genoemd), en ANSI-92 SQL, dat beschikt over nieuwe en andere gereserveerde woorden, syntaxisregels en jokertekens.) dan de huidige modus van uw Microsoft Access-database (Microsoft Access-database: een verzameling gegevens en objecten (zoals tabellen, query's of formulieren) die betrekking heeft op een bepaald onderwerp of doel. De gegevens worden beheerd door Microsoft Jet Database Engine.).
Waarom u moet vermijden query's te combineren die zijn gemaakt in verschillende ANSI SQL-querymodi
De twee ANSI SQL-querymodi (ANSI SQL-querymodus: een van de twee typen SQL-syntaxis: ANSI-89 SQL, de traditionele Jet SQL-syntaxis (ook wel Microsoft Jet SQL en ANSI SQL genoemd), en ANSI-92 SQL, dat beschikt over nieuwe en andere gereserveerde woorden, syntaxisregels en jokertekens.), ANSI-89 en ANSI-92, zijn niet compatibel. Als u een Microsoft Access-database (Microsoft Access-database: een verzameling gegevens en objecten (zoals tabellen, query's of formulieren) die betrekking heeft op een bepaald onderwerp of doel. De gegevens worden beheerd door Microsoft Jet Database Engine.) maakt, moet u bepalen welke querymodus u wilt gebruiken omdat er runtime-fouten of onverwachte resultaten kunnen optreden wanneer u query's (query: een vraag over de gegevens die in tabellen zijn opgeslagen of een verzoek om een actie uit te voeren op de gegevens. Met een query kunt u gegevens uit verschillende tabellen combineren tot een gegevensbron voor een formulier, rapport of Data Access-pagina.) die in beide querymodi zijn gemaakt door elkaar gebruikt. Het bereik van gegevenstypen, de gereserveerde waarden en de jokertekens verschillen in de querymodi.
Voorbeeld van een query met jokertekens
Een query waarin jokertekens worden gebruikt in een criteriumexpressie kan verschillende resultaten hebben in beide querymodi. Zie de volgende voorbeelden:
- Stel dat u een ANSI-89 SQL-query uitvoert in een database die is ingesteld op de ANSI-92-querymodus, zoals:
SELECT * FROM Klanten WHERE Land Like 'U*'
Deze query geeft alle klanten uit een land of regio genaamd 'U*' als resultaat en niet uit al de landen/regio's die beginnen met de letter 'U', omdat het sterretje (*) geen jokerteken is in ANSI-92 SQL.
- Stel dat u een ANSI-92 SQL-query uitvoert in een database die is ingesteld op de ANSI-89-querymodus, zoals:
SELECT * FROM Klanten WHERE Land Like 'U%'
Deze query geeft al de klanten uit een land of regio genaamd 'U%' als resultaat en niet uit al de landen/regio's die beginnen met de letter 'U', omdat het procentteken (%) geen jokerteken is in ANSI-89 SQL.
Voorbeeld van een query met een veldnaam die overeenkomt met de aliasnaam
Als een query een alias gebruikt die overeenkomt met de naam van de basiskolom en u vervolgens een berekend veld maakt waarin deze dubbelzinnige naam wordt gebruikt, heeft de query verschillende resultaten in beide querymodi. Zie bijvoorbeeld de volgende query:
SELECT Orders.[Order-id] AS Vrachtkosten, Orders.Vrachtkosten, [Vrachtkosten]*1.1 AS [Nieuwe vrachtkosten] FROM Orders;
Bij gebruik van ANSI-92 SQL wordt de waarde voor Nieuwe vrachtkosten berekend met het veld Vrachtkosten en daarom wordt Vrachtkosten verhoogd met 10%. Bij gebruik van ANSI-89 SQL wordt de waarde voor Nieuwe vrachtkosten berekend met de alias voor Vrachtkosten en daarom wordt elke waarde voor Order-id verhoogd met 10%.
Problemen voorkomen die worden veroorzaakt door het gebruik van verschillende ANSI SQL-querymodi in een database
In het algemeen moet u de volgende handelingen vermijden om te voorkomen dat er problemen optreden door het gebruik van query's die in verschillende ANSI SQL-querymodi zijn gemaakt:
- Een Access-database die is ingesteld op de ANSI-92 SQL-querymodus van de 2002- of 2003-bestandsindeling naar de 2000- of 97-bestandsindeling converteren. De ANSI-92 SQL-querymodus wordt alleen ondersteund in de 2002 - 2003-bestandsindeling.
- De ANSI SQL-querymodus voor de huidige database wijzigen nadat u een of meer query's hebt gemaakt. Als u dit doet, moet u de bestaande query's opnieuw testen om te controleren of deze nog werken en de gewenste resultaten leveren. Zo nodig moet u de query's herschrijven.
- Query's die in een bepaalde ANSI SQL-querymodus zijn gemaakt importeren in een Access-database die op een andere modus is ingesteld of query's die met een bepaalde ANSI SQL-querymodus zijn gemaakt exporteren naar een Access-database die op een andere modus is ingesteld.
- De ANSI SQL-querymodus in een bestaande toepassing wijzigen. Hierdoor kan de toepassing beschadigd raken zodat u deze opnieuw moet schrijven.
In Access 2000 kon u de ANSI SQL-querymodus alleen via programmacode wijzigen en query's die met de ANSI-92-modus waren gemaakt, werden verborgen in het databasevenster (databasevenster: het venster dat verschijnt als u een Access-database of een Access-project opent. Het bevat snelkoppelingen voor het maken van nieuwe databaseobjecten en het openen van bestaande objecten.). In Access 2002 of hoger kunt u of een gebruiker de ANSI SQL-querymodus wijzigen via de gebruikersinterface en worden ANSI-92-query's niet meer verborgen in het databasevenster, zodat u onbedoelde of opzettelijke wijzigingen aan de ANSI SQL-querymodus van de toepassing kunt helpen voorkomen door de programmacode te beschermen. U kunt bovendien voorkomen dat de querymodus wordt gewijzigd via de gebruikersinterface van de toepassing.
-
Dubbelzinnige aliassen en kolomnamen gebruiken. Zorg ervoor dat aliassen en kolomnamen altijd uniek zijn in een SQL-instructie om verwarring te voorkomen.
Specifieke typen query's Selectiequery's
Tabellen of query's worden automatisch gekoppeld, terwijl ik dat niet wil
Zelfs als u geen relaties (relatie: een verbinding tussen gemeenschappelijke velden (kolommen) in twee tabellen. Een relatie kan een-op-een, een-op-veel of veel-op-veel zijn.) hebt gedefinieerd, worden er automatisch joins gemaakt wanneer u aan een query twee tabellen toevoegt die elk een veld bevatten met hetzelfde of een compatibel gegevenstype (gegevenstype: het kenmerk van een veld dat bepaalt welk type gegevens daarin kunnen worden opgeslagen. Gegevenstypen zijn onder andere Booleaans, Integer, Lang, Valuta, Enkel, Dubbel, Datum, Reeks en Variant (standaardtype).) en als een van de joinvelden een primaire sleutel (primaire sleutel: een of meer velden (kolommen) waarvan de waarden elke record in de tabel uniek identificeren. Een primaire sleutel kan geen Null-waarden bevatten en heeft altijd een unieke index. Met een primaire sleutel relateert u een tabel aan refererende sleutels in andere tabellen.) is. U kunt deze automatische joins in- of uitschakelen.
- Klik in het menu Extra op Opties.
- Klik op de tab Tabellen/query's.
- Schakel het selectievakje AutoJoin activeren in of uit.
Opmerking Deze instelling geldt alleen voor nieuwe query's.
Ik kan de gegevens in de query niet bijwerken
In sommige gevallen kunt u gegevens in de gegevensbladweergave (gegevensbladweergave: een venster waarin gegevens uit een tabel, formulier, query, weergave of opgeslagen procedure worden weergegeven in rij- en kolomindeling. In de gegevensbladweergave kunt u velden bewerken en gegevens toevoegen, verwijderen en zoeken.) van een query bewerken en zo de gegevens in de onderliggende tabel wijzigen. In andere gevallen is dit niet mogelijk. Hier wordt beschreven in welke gevallen u de queryresultaten kunt bijwerken en zo niet, of er alternatieven zijn.
Gegevens kunnen niet worden bijgewerkt
| Query of queryveld |
Oplossing |
| Query die is gebaseerd op drie of meer tabellen met een veel-op-veel-relatie. |
Hoewel het niet mogelijk is de gegevens in de query rechtstreeks te wijzigen, kunt u de gegevens bijwerken via een formulier dat of een Data Access-pagina (Data Access-pagina: een webpagina die vanuit Access wordt gepubliceerd en die een koppeling naar een database bevat. Op een Data Access-pagina kunt u gegevens die zijn opgeslagen in de database bekijken, toevoegen, wijzigen en anderszins bewerken. Een Data Access-pagina kan ook gegevens bevatten uit andere bronnen, bijvoorbeeld Excel.) die op de query is gebaseerd. De eigenschap Type recordset van het formulier moet dan wel zijn ingesteld op Dynaset (Inconsistent bijwerken). |
| Kruistabelquery (kruistabelquery: een query waarmee de som, het gemiddelde, het aantal of een ander type totaal van records wordt berekend, waarna het resultaat wordt gegroepeerd op grond van twee typen informatie: de informatie links van het gegevensblad en de informatie boven aan het gegevensblad.) |
Geen |
| SQL Pass Through-query (Pass Through-query: een SQL-query waarmee u opdrachten rechtstreeks naar een ODBC-databaseserver kunt sturen. Met Pass Through-query's werkt u direct met de tabellen op de server, in plaats van de gegevens te laten verwerken in Microsoft Jet Database Engine.) |
Geen |
| Query waarmee de som, het gemiddelde, het aantal of een ander type totaal wordt berekend voor de waarden in een veld, of een bijwerkquery waarin wordt verwezen naar een veld in de rij Wijzigen in van een kruistabelquery, een selectiequery (selectiequery: een query waarmee u een vraag stelt over de gegevens die in de tabellen zijn opgeslagen en waarmee een resultaatset wordt weergegeven in de vorm van een gegevensblad, zonder dat gegevens worden gewijzigd.) of een subquery (subquery: een SQL SELECT-instructie in een selectie- of actiequery.) met functies voor het berekenen van totalen of statistische functies. |
Met een statistische domeinfunctie (statistische domeinfunctie: een functie zoals DAvg of DMax, die wordt gebruikt bij de berekening van statistische gegevens voor een bepaalde set records (een domein).) in de rij Wijzigen in van een bijwerkquery kunt u vanuit een kruistabelquery, een selectiequery of een subquery verwijzen naar velden met functies voor het berekenen van totalen of statistische functies. |
| Samenvoegquery's (samenvoegquery: een query die met de operator UNION het resultaat van twee of meer geselecteerde query's combineert.) |
Geen |
| Query waarvan de eigenschap Unieke waarden is ingesteld op Ja. |
Geen |
| Query die een gekoppelde ODBC (ODBC (Open Database Connectivity): een standaardmethode om gegevens uit te wisselen tussen databases en programma's. ODBC-stuurprogramma's gebruiken SQL (Structured Query Language) als standaardtaal om toegang te krijgen tot externe gegevens.)-tabel zonder unieke index (unieke index: een index die wordt gedefinieerd door de eigenschap Indexed van een veld in te stellen op Yes (No Duplicates). In een veld met een unieke index kunt u geen dubbele gegevens invoeren. Als u een veld instelt als primaire-sleutelveld, krijgt het veld automatisch een unieke index.), of een Paradox-tabel zonder primaire sleutel (primaire sleutel: een of meer velden (kolommen) waarvan de waarden elke record in de tabel uniek identificeren. Een primaire sleutel kan geen Null-waarden bevatten en heeft altijd een unieke index. Met een primaire sleutel relateert u een tabel aan refererende sleutels in andere tabellen.) bevat. |
Geen |
| Query met meerdere tabellen of query's die niet zijn verbonden door een joinlijn in de ontwerpweergave (ontwerpweergave: een venster waarin het ontwerp wordt weergegeven van de volgende databaseobjecten: tabellen, query's, formulieren, rapporten, macro's en Data Access-pagina's. In de ontwerpweergave kunt u nieuwe databaseobjecten maken en het ontwerp van bestaande databaseobjecten wijzigen.). |
U moet de tabellen op de juiste wijze koppelen voordat u deze kunt bijwerken. |
| Berekend veld (berekend veld: een veld dat is opgegeven in een query en dat het resultaat van een expressie weergeeft in plaats van opgeslagen gegevens. Als een waarde in de expressie wordt gewijzigd, wordt de waarde van het veld opnieuw berekend.) |
Geen |
| Veld met kenmerk Alleen-lezen. De database is geopend als alleen-lezen bestand of bevindt zich op een schijf met het kenmerk Alleen-lezen. |
Geen |
| Veld in record die is verwijderd of vergrendeld (vergrendeld: de toestand van een record, recordset of database waardoor deze door alle gebruikers alleen kan worden gelezen (niet kan worden gewijzigd), met uitzondering van de gebruiker die op dat moment het object aan het bewerken is.) door een andere gebruiker. |
Normaal gesproken kan een vergrendelde record worden bijgewerkt zodra de vergrendeling is opgeheven. |
De query wordt uitgevoerd in een andere ANSI SQL-querymodus
U hebt uw query (query: een vraag over de gegevens die in tabellen zijn opgeslagen of een verzoek om een actie uit te voeren op de gegevens. Met een query kunt u gegevens uit verschillende tabellen combineren tot een gegevensbron voor een formulier, rapport of Data Access-pagina.) gemaakt in een andere ANSI SQL-querymodus (ANSI SQL-querymodus: een van de twee typen SQL-syntaxis: ANSI-89 SQL, de traditionele Jet SQL-syntaxis (ook wel Microsoft Jet SQL en ANSI SQL genoemd), en ANSI-92 SQL, dat beschikt over nieuwe en andere gereserveerde woorden, syntaxisregels en jokertekens.) dan de huidige modus van uw Microsoft Access-database (Microsoft Access-database: een verzameling gegevens en objecten (zoals tabellen, query's of formulieren) die betrekking heeft op een bepaald onderwerp of doel. De gegevens worden beheerd door Microsoft Jet Database Engine.).
Waarom u moet vermijden query's te combineren die zijn gemaakt in verschillende ANSI SQL-querymodi
De twee ANSI SQL-querymodi (ANSI SQL-querymodus: een van de twee typen SQL-syntaxis: ANSI-89 SQL, de traditionele Jet SQL-syntaxis (ook wel Microsoft Jet SQL en ANSI SQL genoemd), en ANSI-92 SQL, dat beschikt over nieuwe en andere gereserveerde woorden, syntaxisregels en jokertekens.), ANSI-89 en ANSI-92, zijn niet compatibel. Als u een Microsoft Access-database (Microsoft Access-database: een verzameling gegevens en objecten (zoals tabellen, query's of formulieren) die betrekking heeft op een bepaald onderwerp of doel. De gegevens worden beheerd door Microsoft Jet Database Engine.) maakt, moet u bepalen welke querymodus u wilt gebruiken omdat er runtime-fouten of onverwachte resultaten kunnen optreden wanneer u query's (query: een vraag over de gegevens die in tabellen zijn opgeslagen of een verzoek om een actie uit te voeren op de gegevens. Met een query kunt u gegevens uit verschillende tabellen combineren tot een gegevensbron voor een formulier, rapport of Data Access-pagina.) die in beide querymodi zijn gemaakt door elkaar gebruikt. Het bereik van gegevenstypen, de gereserveerde waarden en de jokertekens verschillen in de querymodi.
Voorbeeld van een query met jokertekens
Een query waarin jokertekens worden gebruikt in een criteriumexpressie kan verschillende resultaten hebben in beide querymodi. Zie de volgende voorbeelden:
- Stel dat u een ANSI-89 SQL-query uitvoert in een database die is ingesteld op de ANSI-92-querymodus, zoals:
SELECT * FROM Klanten WHERE Land Like 'U*'
Deze query geeft alle klanten uit een land of regio genaamd 'U*' als resultaat en niet uit al de landen/regio's die beginnen met de letter 'U', omdat het sterretje (*) geen jokerteken is in ANSI-92 SQL.
- Stel dat u een ANSI-92 SQL-query uitvoert in een database die is ingesteld op de ANSI-89-querymodus, zoals:
SELECT * FROM Klanten WHERE Land Like 'U%'
Deze query geeft al de klanten uit een land of regio genaamd 'U%' als resultaat en niet uit al de landen/regio's die beginnen met de letter 'U', omdat het procentteken (%) geen jokerteken is in ANSI-89 SQL.
Voorbeeld van een query met een veldnaam die overeenkomt met de aliasnaam
Als een query een alias gebruikt die overeenkomt met de naam van de basiskolom en u vervolgens een berekend veld maakt waarin deze dubbelzinnige naam wordt gebruikt, heeft de query verschillende resultaten in beide querymodi. Zie bijvoorbeeld de volgende query:
SELECT Orders.[Order-id] AS Vrachtkosten, Orders.Vrachtkosten, [Vrachtkosten]*1.1 AS [Nieuwe vrachtkosten] FROM Orders;
Bij gebruik van ANSI-92 SQL wordt de waarde voor Nieuwe vrachtkosten berekend met het veld Vrachtkosten en daarom wordt Vrachtkosten verhoogd met 10%. Bij gebruik van ANSI-89 SQL wordt de waarde voor Nieuwe vrachtkosten berekend met de alias voor Vrachtkosten en daarom wordt elke waarde voor Order-id verhoogd met 10%.
Problemen voorkomen die worden veroorzaakt door het gebruik van verschillende ANSI SQL-querymodi in een database
In het algemeen moet u de volgende handelingen vermijden om te voorkomen dat er problemen optreden door het gebruik van query's die in verschillende ANSI SQL-querymodi zijn gemaakt:
- Een Access-database die is ingesteld op de ANSI-92 SQL-querymodus van de 2002- of 2003-bestandsindeling naar de 2000- of 97-bestandsindeling converteren. De ANSI-92 SQL-querymodus wordt alleen ondersteund in de 2002 - 2003-bestandsindeling.
- De ANSI SQL-querymodus voor de huidige database wijzigen nadat u een of meer query's hebt gemaakt. Als u dit doet, moet u de bestaande query's opnieuw testen om te controleren of deze nog werken en de gewenste resultaten leveren. Zo nodig moet u de query's herschrijven.
- Query's die in een bepaalde ANSI SQL-querymodus zijn gemaakt importeren in een Access-database die op een andere modus is ingesteld of query's die met een bepaalde ANSI SQL-querymodus zijn gemaakt exporteren naar een Access-database die op een andere modus is ingesteld.
- De ANSI SQL-querymodus in een bestaande toepassing wijzigen. Hierdoor kan de toepassing beschadigd raken zodat u deze opnieuw moet schrijven.
In Access 2000 kon u de ANSI SQL-querymodus alleen via programmacode wijzigen en query's die met de ANSI-92-modus waren gemaakt, werden verborgen in het databasevenster (databasevenster: het venster dat verschijnt als u een Access-database of een Access-project opent. Het bevat snelkoppelingen voor het maken van nieuwe databaseobjecten en het openen van bestaande objecten.). In Access 2002 of hoger kunt u of een gebruiker de ANSI SQL-querymodus wijzigen via de gebruikersinterface en worden ANSI-92-query's niet meer verborgen in het databasevenster, zodat u onbedoelde of opzettelijke wijzigingen aan de ANSI SQL-querymodus van de toepassing kunt helpen voorkomen door de programmacode te beschermen. U kunt bovendien voorkomen dat de querymodus wordt gewijzigd via de gebruikersinterface van de toepassing.
-
Dubbelzinnige aliassen en kolomnamen gebruiken. Zorg ervoor dat aliassen en kolomnamen altijd uniek zijn in een SQL-instructie om verwarring te voorkomen.
Parameterquery's
De query wordt uitgevoerd in een andere ANSI SQL-querymodus
U hebt uw query (query: een vraag over de gegevens die in tabellen zijn opgeslagen of een verzoek om een actie uit te voeren op de gegevens. Met een query kunt u gegevens uit verschillende tabellen combineren tot een gegevensbron voor een formulier, rapport of Data Access-pagina.) gemaakt in een andere ANSI SQL-querymodus (ANSI SQL-querymodus: een van de twee typen SQL-syntaxis: ANSI-89 SQL, de traditionele Jet SQL-syntaxis (ook wel Microsoft Jet SQL en ANSI SQL genoemd), en ANSI-92 SQL, dat beschikt over nieuwe en andere gereserveerde woorden, syntaxisregels en jokertekens.) dan de huidige modus van uw Microsoft Access-database (Microsoft Access-database: een verzameling gegevens en objecten (zoals tabellen, query's of formulieren) die betrekking heeft op een bepaald onderwerp of doel. De gegevens worden beheerd door Microsoft Jet Database Engine.).
Waarom u moet vermijden query's te combineren die zijn gemaakt in verschillende ANSI SQL-querymodi
De twee ANSI SQL-querymodi (ANSI SQL-querymodus: een van de twee typen SQL-syntaxis: ANSI-89 SQL, de traditionele Jet SQL-syntaxis (ook wel Microsoft Jet SQL en ANSI SQL genoemd), en ANSI-92 SQL, dat beschikt over nieuwe en andere gereserveerde woorden, syntaxisregels en jokertekens.), ANSI-89 en ANSI-92, zijn niet compatibel. Als u een Microsoft Access-database (Microsoft Access-database: een verzameling gegevens en objecten (zoals tabellen, query's of formulieren) die betrekking heeft op een bepaald onderwerp of doel. De gegevens worden beheerd door Microsoft Jet Database Engine.) maakt, moet u bepalen welke querymodus u wilt gebruiken omdat er runtime-fouten of onverwachte resultaten kunnen optreden wanneer u query's (query: een vraag over de gegevens die in tabellen zijn opgeslagen of een verzoek om een actie uit te voeren op de gegevens. Met een query kunt u gegevens uit verschillende tabellen combineren tot een gegevensbron voor een formulier, rapport of Data Access-pagina.) die in beide querymodi zijn gemaakt door elkaar gebruikt. Het bereik van gegevenstypen, de gereserveerde waarden en de jokertekens verschillen in de querymodi.
Voorbeeld van een query met jokertekens
Een query waarin jokertekens worden gebruikt in een criteriumexpressie kan verschillende resultaten hebben in beide querymodi. Zie de volgende voorbeelden:
- Stel dat u een ANSI-89 SQL-query uitvoert in een database die is ingesteld op de ANSI-92-querymodus, zoals:
SELECT * FROM Klanten WHERE Land Like 'U*'
Deze query geeft alle klanten uit een land of regio genaamd 'U*' als resultaat en niet uit al de landen/regio's die beginnen met de letter 'U', omdat het sterretje (*) geen jokerteken is in ANSI-92 SQL.
- Stel dat u een ANSI-92 SQL-query uitvoert in een database die is ingesteld op de ANSI-89-querymodus, zoals:
SELECT * FROM Klanten WHERE Land Like 'U%'
Deze query geeft al de klanten uit een land of regio genaamd 'U%' als resultaat en niet uit al de landen/regio's die beginnen met de letter 'U', omdat het procentteken (%) geen jokerteken is in ANSI-89 SQL.
Voorbeeld van een query met een veldnaam die overeenkomt met de aliasnaam
Als een query een alias gebruikt die overeenkomt met de naam van de basiskolom en u vervolgens een berekend veld maakt waarin deze dubbelzinnige naam wordt gebruikt, heeft de query verschillende resultaten in beide querymodi. Zie bijvoorbeeld de volgende query:
SELECT Orders.[Order-id] AS Vrachtkosten, Orders.Vrachtkosten, [Vrachtkosten]*1.1 AS [Nieuwe vrachtkosten] FROM Orders;
Bij gebruik van ANSI-92 SQL wordt de waarde voor Nieuwe vrachtkosten berekend met het veld Vrachtkosten en daarom wordt Vrachtkosten verhoogd met 10%. Bij gebruik van ANSI-89 SQL wordt de waarde voor Nieuwe vrachtkosten berekend met de alias voor Vrachtkosten en daarom wordt elke waarde voor Order-id verhoogd met 10%.
Problemen voorkomen die worden veroorzaakt door het gebruik van verschillende ANSI SQL-querymodi in een database
In het algemeen moet u de volgende handelingen vermijden om te voorkomen dat er problemen optreden door het gebruik van query's die in verschillende ANSI SQL-querymodi zijn gemaakt:
- Een Access-database die is ingesteld op de ANSI-92 SQL-querymodus van de 2002- of 2003-bestandsindeling naar de 2000- of 97-bestandsindeling converteren. De ANSI-92 SQL-querymodus wordt alleen ondersteund in de 2002 - 2003-bestandsindeling.
- De ANSI SQL-querymodus voor de huidige database wijzigen nadat u een of meer query's hebt gemaakt. Als u dit doet, moet u de bestaande query's opnieuw testen om te controleren of deze nog werken en de gewenste resultaten leveren. Zo nodig moet u de query's herschrijven.
- Query's die in een bepaalde ANSI SQL-querymodus zijn gemaakt importeren in een Access-database die op een andere modus is ingesteld of query's die met een bepaalde ANSI SQL-querymodus zijn gemaakt exporteren naar een Access-database die op een andere modus is ingesteld.
- De ANSI SQL-querymodus in een bestaande toepassing wijzigen. Hierdoor kan de toepassing beschadigd raken zodat u deze opnieuw moet schrijven.
In Access 2000 kon u de ANSI SQL-querymodus alleen via programmacode wijzigen en query's die met de ANSI-92-modus waren gemaakt, werden verborgen in het databasevenster (databasevenster: het venster dat verschijnt als u een Access-database of een Access-project opent. Het bevat snelkoppelingen voor het maken van nieuwe databaseobjecten en het openen van bestaande objecten.). In Access 2002 of hoger kunt u of een gebruiker de ANSI SQL-querymodus wijzigen via de gebruikersinterface en worden ANSI-92-query's niet meer verborgen in het databasevenster, zodat u onbedoelde of opzettelijke wijzigingen aan de ANSI SQL-querymodus van de toepassing kunt helpen voorkomen door de programmacode te beschermen. U kunt bovendien voorkomen dat de querymodus wordt gewijzigd via de gebruikersinterface van de toepassing.
-
Dubbelzinnige aliassen en kolomnamen gebruiken. Zorg ervoor dat aliassen en kolomnamen altijd uniek zijn in een SQL-instructie om verwarring te voorkomen.
Kruistabelquery's
Een of meer kolomkoppen in het resultaat van de query hebben de label '<>'
Wanneer in de rij Kruistabel (Null: een waarde die kan worden ingevoerd in een veld of worden gebruikt in expressies en query's om ontbrekende of onbekende gegevens aan te duiden. In Visual Basic verwijst het sleutelwoord Null naar een Null-waarde. Sommige velden, zoals velden waarvoor een primaire sleutel is ingesteld, kunnen geen Null-waarden bevatten.) van een veld Kolomkop staat en dit veld een Null-waarde bevat, wordt in Microsoft Access voor deze Null-waarde de kolomnaam '< >' geretourneerd. U kunt dit op een van de volgende manieren voorkomen:
- Definieer de kolomkoppen expliciet door de eigenschap Kolomkoptekst van de query in te stellen.
Kolomkoppen in een kruistabelquery sorteren of beperken
U kunt van kolomkoppen in een kruistabelquery (kruistabelquery: een query waarmee de som, het gemiddelde, het aantal of een ander type totaal van records wordt berekend, waarna het resultaat wordt gegroepeerd op grond van twee typen informatie: de informatie links van het gegevensblad en de informatie boven aan het gegevensblad.) de volgorde wijzigen of het aantal beperken. Zo kunt u in kolomkoppen die de maanden van het jaar bevatten de maanden in chronologische volgorde weergeven, in plaats van op alfabet. Bovendien kunt u de weergegeven kolomkoppen beperken tot de maanden januari tot en met juni.
- Open de kruistabelquery in de ontwerpweergave (ontwerpweergave: een venster waarin het ontwerp wordt weergegeven van de volgende databaseobjecten: tabellen, query's, formulieren, rapporten, macro's en Data Access-pagina's. In de ontwerpweergave kunt u nieuwe databaseobjecten maken en het ontwerp van bestaande databaseobjecten wijzigen.).
- Klik op de achtergrond van de ontwerpweergave van de query buiten het ontwerpraster (ontwerpraster: het raster waarmee u een query of filter ontwerpt in de ontwerpweergave van de query of in het venster Geavanceerde filter-/sorteeropties. Voorheen werd het ontwerpraster voor query's het QBE-raster genoemd.) en de lijsten met velden (lijst met velden: een venster dat alle velden bevat uit de onderliggende recordbron of het onderliggende databaseobject. Alleen in de ontwerpweergave van een Data Access-pagina bevat de lijst met velden alle recordbronnen en bijbehorende velden uit de onderliggende database.).
- Klik op Eigenschappen
op de werkbalk om het eigenschappenvenster van de query weer te geven.
- Typ in het vak van de eigenschap Kolomkoptekst de kolomkoppen die u wilt weergeven in de volgorde waarin u deze wilt weergeven. Typ tussen de kolomkoppen een komma of het lijstscheidingsteken dat bij de instellingen voor uw land of regio hoort. (Zie Landinstellingen in het Configuratiescherm van Microsoft Windows als u wilt weten wat het lijstscheidingsteken is voor uw land.)
De kolomkopteksten die u invoert, moeten exact gelijk zijn aan de kolomkopteksten in het gegevensblad van de query. Als een kolomkoptekst in het gegevensblad bijvoorbeeld `USA' is, moet u als kolomkop `USA' invoeren, niet `VS' (als u op ENTER drukt of de aanwijzer verplaatst, worden de kopteksten tussen dubbele aanhalingstekens geplaatst).
- Klik op Beeld
op de werkbalk om het queryresultaat te bekijken.
Opmerkingen
- Typ in het ontwerpraster (ontwerpraster: het raster waarmee u een query of filter ontwerpt in de ontwerpweergave van de query of in het venster Geavanceerde filter-/sorteeropties. Voorheen werd het ontwerpraster voor query's het QBE-raster genoemd.) Is Not Null in de cel Criteria van het veld dat is opgegeven bij Kolomkop.
- Gebruik in de cel Criteria van het veld dat is opgegeven bij Kolomkop, de functie Nz in een expressie (expressie: elke mogelijke combinatie van wiskundige of logische operatoren, constanten, functies en namen van velden, besturingselementen en eigenschappen, die resulteert in één enkele waarde. Met expressies kunt u berekeningen uitvoeren, tekens bewerken of gegevens testen.) waarmee Null-waarden worden geconverteerd naar een meer zinvolle waarde, zoals 'Onbekend'.
De verkeerde veldwaarden worden weergegeven als rij- of kolomkoppen
Controleer of het veld waarvan u de waarden wilt gebruiken als kolomkoppen in het ontwerpraster (ontwerpraster: het raster waarmee u een query of filter ontwerpt in de ontwerpweergave van de query of in het venster Geavanceerde filter-/sorteeropties. Voorheen werd het ontwerpraster voor query's het QBE-raster genoemd.) staat met de waarde Kolomkop in de rij Kruistabel. Controleer ook of het veld of de velden waarvan u de waarden wilt gebruiken als rijkoppen in het ontwerpraster staan met de waarde Rijkop in de cel Kruistabel. Als u een waarde in de rij Kruistabel wilt wijzigen, klikt u op de gewenste cel en vervolgens op een waarde in de lijst. Als u alleen bepaalde waarden als kolomkoppen wilt weergeven, stelt u de eigenschap Kolomkoptekst van de query in.
Kolomkoppen in een kruistabelquery sorteren of beperken
U kunt van kolomkoppen in een kruistabelquery (kruistabelquery: een query waarmee de som, het gemiddelde, het aantal of een ander type totaal van records wordt berekend, waarna het resultaat wordt gegroepeerd op grond van twee typen informatie: de informatie links van het gegevensblad en de informatie boven aan het gegevensblad.) de volgorde wijzigen of het aantal beperken. Zo kunt u in kolomkoppen die de maanden van het jaar bevatten de maanden in chronologische volgorde weergeven, in plaats van op alfabet. Bovendien kunt u de weergegeven kolomkoppen beperken tot de maanden januari tot en met juni.
- Open de kruistabelquery in de ontwerpweergave (ontwerpweergave: een venster waarin het ontwerp wordt weergegeven van de volgende databaseobjecten: tabellen, query's, formulieren, rapporten, macro's en Data Access-pagina's. In de ontwerpweergave kunt u nieuwe databaseobjecten maken en het ontwerp van bestaande databaseobjecten wijzigen.).
- Klik op de achtergrond van de ontwerpweergave van de query buiten het ontwerpraster (ontwerpraster: het raster waarmee u een query of filter ontwerpt in de ontwerpweergave van de query of in het venster Geavanceerde filter-/sorteeropties. Voorheen werd het ontwerpraster voor query's het QBE-raster genoemd.) en de lijsten met velden (lijst met velden: een venster dat alle velden bevat uit de onderliggende recordbron of het onderliggende databaseobject. Alleen in de ontwerpweergave van een Data Access-pagina bevat de lijst met velden alle recordbronnen en bijbehorende velden uit de onderliggende database.).
- Klik op Eigenschappen
op de werkbalk om het eigenschappenvenster van de query weer te geven.
- Typ in het vak van de eigenschap Kolomkoptekst de kolomkoppen die u wilt weergeven in de volgorde waarin u deze wilt weergeven. Typ tussen de kolomkoppen een komma of het lijstscheidingsteken dat bij de instellingen voor uw land of regio hoort. (Zie Landinstellingen in het Configuratiescherm van Microsoft Windows als u wilt weten wat het lijstscheidingsteken is voor uw land.)
De kolomkopteksten die u invoert, moeten exact gelijk zijn aan de kolomkopteksten in het gegevensblad van de query. Als een kolomkoptekst in het gegevensblad bijvoorbeeld `USA' is, moet u als kolomkop `USA' invoeren, niet `VS' (als u op ENTER drukt of de aanwijzer verplaatst, worden de kopteksten tussen dubbele aanhalingstekens geplaatst).
- Klik op Beeld
op de werkbalk om het queryresultaat te bekijken.
Opmerkingen
De query wordt uitgevoerd in een andere ANSI SQL-querymodus
U hebt uw query (query: een vraag over de gegevens die in tabellen zijn opgeslagen of een verzoek om een actie uit te voeren op de gegevens. Met een query kunt u gegevens uit verschillende tabellen combineren tot een gegevensbron voor een formulier, rapport of Data Access-pagina.) gemaakt in een andere ANSI SQL-querymodus (ANSI SQL-querymodus: een van de twee typen SQL-syntaxis: ANSI-89 SQL, de traditionele Jet SQL-syntaxis (ook wel Microsoft Jet SQL en ANSI SQL genoemd), en ANSI-92 SQL, dat beschikt over nieuwe en andere gereserveerde woorden, syntaxisregels en jokertekens.) dan de huidige modus van uw Microsoft Access-database (Microsoft Access-database: een verzameling gegevens en objecten (zoals tabellen, query's of formulieren) die betrekking heeft op een bepaald onderwerp of doel. De gegevens worden beheerd door Microsoft Jet Database Engine.).
Waarom u moet vermijden query's te combineren die zijn gemaakt in verschillende ANSI SQL-querymodi
De twee ANSI SQL-querymodi (ANSI SQL-querymodus: een van de twee typen SQL-syntaxis: ANSI-89 SQL, de traditionele Jet SQL-syntaxis (ook wel Microsoft Jet SQL en ANSI SQL genoemd), en ANSI-92 SQL, dat beschikt over nieuwe en andere gereserveerde woorden, syntaxisregels en jokertekens.), ANSI-89 en ANSI-92, zijn niet compatibel. Als u een Microsoft Access-database (Microsoft Access-database: een verzameling gegevens en objecten (zoals tabellen, query's of formulieren) die betrekking heeft op een bepaald onderwerp of doel. De gegevens worden beheerd door Microsoft Jet Database Engine.) maakt, moet u bepalen welke querymodus u wilt gebruiken omdat er runtime-fouten of onverwachte resultaten kunnen optreden wanneer u query's (query: een vraag over de gegevens die in tabellen zijn opgeslagen of een verzoek om een actie uit te voeren op de gegevens. Met een query kunt u gegevens uit verschillende tabellen combineren tot een gegevensbron voor een formulier, rapport of Data Access-pagina.) die in beide querymodi zijn gemaakt door elkaar gebruikt. Het bereik van gegevenstypen, de gereserveerde waarden en de jokertekens verschillen in de querymodi.
Voorbeeld van een query met jokertekens
Een query waarin jokertekens worden gebruikt in een criteriumexpressie kan verschillende resultaten hebben in beide querymodi. Zie de volgende voorbeelden:
- Stel dat u een ANSI-89 SQL-query uitvoert in een database die is ingesteld op de ANSI-92-querymodus, zoals:
SELECT * FROM Klanten WHERE Land Like 'U*'
Deze query geeft alle klanten uit een land of regio genaamd 'U*' als resultaat en niet uit al de landen/regio's die beginnen met de letter 'U', omdat het sterretje (*) geen jokerteken is in ANSI-92 SQL.
- Stel dat u een ANSI-92 SQL-query uitvoert in een database die is ingesteld op de ANSI-89-querymodus, zoals:
SELECT * FROM Klanten WHERE Land Like 'U%'
Deze query geeft al de klanten uit een land of regio genaamd 'U%' als resultaat en niet uit al de landen/regio's die beginnen met de letter 'U', omdat het procentteken (%) geen jokerteken is in ANSI-89 SQL.
Voorbeeld van een query met een veldnaam die overeenkomt met de aliasnaam
Als een query een alias gebruikt die overeenkomt met de naam van de basiskolom en u vervolgens een berekend veld maakt waarin deze dubbelzinnige naam wordt gebruikt, heeft de query verschillende resultaten in beide querymodi. Zie bijvoorbeeld de volgende query:
SELECT Orders.[Order-id] AS Vrachtkosten, Orders.Vrachtkosten, [Vrachtkosten]*1.1 AS [Nieuwe vrachtkosten] FROM Orders;
Bij gebruik van ANSI-92 SQL wordt de waarde voor Nieuwe vrachtkosten berekend met het veld Vrachtkosten en daarom wordt Vrachtkosten verhoogd met 10%. Bij gebruik van ANSI-89 SQL wordt de waarde voor Nieuwe vrachtkosten berekend met de alias voor Vrachtkosten en daarom wordt elke waarde voor Order-id verhoogd met 10%.
Problemen voorkomen die worden veroorzaakt door het gebruik van verschillende ANSI SQL-querymodi in een database
In het algemeen moet u de volgende handelingen vermijden om te voorkomen dat er problemen optreden door het gebruik van query's die in verschillende ANSI SQL-querymodi zijn gemaakt:
- Een Access-database die is ingesteld op de ANSI-92 SQL-querymodus van de 2002- of 2003-bestandsindeling naar de 2000- of 97-bestandsindeling converteren. De ANSI-92 SQL-querymodus wordt alleen ondersteund in de 2002 - 2003-bestandsindeling.
- De ANSI SQL-querymodus voor de huidige database wijzigen nadat u een of meer query's hebt gemaakt. Als u dit doet, moet u de bestaande query's opnieuw testen om te controleren of deze nog werken en de gewenste resultaten leveren. Zo nodig moet u de query's herschrijven.
- Query's die in een bepaalde ANSI SQL-querymodus zijn gemaakt importeren in een Access-database die op een andere modus is ingesteld of query's die met een bepaalde ANSI SQL-querymodus zijn gemaakt exporteren naar een Access-database die op een andere modus is ingesteld.
- De ANSI SQL-querymodus in een bestaande toepassing wijzigen. Hierdoor kan de toepassing beschadigd raken zodat u deze opnieuw moet schrijven.
In Access 2000 kon u de ANSI SQL-querymodus alleen via programmacode wijzigen en query's die met de ANSI-92-modus waren gemaakt, werden verborgen in het databasevenster (databasevenster: het venster dat verschijnt als u een Access-database of een Access-project opent. Het bevat snelkoppelingen voor het maken van nieuwe databaseobjecten en het openen van bestaande objecten.). In Access 2002 of hoger kunt u of een gebruiker de ANSI SQL-querymodus wijzigen via de gebruikersinterface en worden ANSI-92-query's niet meer verborgen in het databasevenster, zodat u onbedoelde of opzettelijke wijzigingen aan de ANSI SQL-querymodus van de toepassing kunt helpen voorkomen door de programmacode te beschermen. U kunt bovendien voorkomen dat de querymodus wordt gewijzigd via de gebruikersinterface van de toepassing.
-
Dubbelzinnige aliassen en kolomnamen gebruiken. Zorg ervoor dat aliassen en kolomnamen altijd uniek zijn in een SQL-instructie om verwarring te voorkomen.
Actiequery's (toevoeg-, bijwerk- en verwijderquery's)
De verwijderquery heeft gegevens uit de verkeerde tabel verwijderd
De verwijderquery moet de volgende onderdelen bevatten:
In het queryontwerpraster wordt From of Where weergegeven in de rij Verwijderen. From wordt weergegeven in de cel Verwijderen van de tabel waaruit u records wilt verwijderen en Where wordt weergegeven in de cel Verwijderen van het veld of de velden waarvoor u criteria opgeeft.
De query wordt uitgevoerd in een andere ANSI SQL-querymodus
U hebt uw query (query: een vraag over de gegevens die in tabellen zijn opgeslagen of een verzoek om een actie uit te voeren op de gegevens. Met een query kunt u gegevens uit verschillende tabellen combineren tot een gegevensbron voor een formulier, rapport of Data Access-pagina.) gemaakt in een andere ANSI SQL-querymodus (ANSI SQL-querymodus: een van de twee typen SQL-syntaxis: ANSI-89 SQL, de traditionele Jet SQL-syntaxis (ook wel Microsoft Jet SQL en ANSI SQL genoemd), en ANSI-92 SQL, dat beschikt over nieuwe en andere gereserveerde woorden, syntaxisregels en jokertekens.) dan de huidige modus van uw Microsoft Access-database (Microsoft Access-database: een verzameling gegevens en objecten (zoals tabellen, query's of formulieren) die betrekking heeft op een bepaald onderwerp of doel. De gegevens worden beheerd door Microsoft Jet Database Engine.).
Waarom u moet vermijden query's te combineren die zijn gemaakt in verschillende ANSI SQL-querymodi
De twee ANSI SQL-querymodi (ANSI SQL-querymodus: een van de twee typen SQL-syntaxis: ANSI-89 SQL, de traditionele Jet SQL-syntaxis (ook wel Microsoft Jet SQL en ANSI SQL genoemd), en ANSI-92 SQL, dat beschikt over nieuwe en andere gereserveerde woorden, syntaxisregels en jokertekens.), ANSI-89 en ANSI-92, zijn niet compatibel. Als u een Microsoft Access-database (Microsoft Access-database: een verzameling gegevens en objecten (zoals tabellen, query's of formulieren) die betrekking heeft op een bepaald onderwerp of doel. De gegevens worden beheerd door Microsoft Jet Database Engine.) maakt, moet u bepalen welke querymodus u wilt gebruiken omdat er runtime-fouten of onverwachte resultaten kunnen optreden wanneer u query's (query: een vraag over de gegevens die in tabellen zijn opgeslagen of een verzoek om een actie uit te voeren op de gegevens. Met een query kunt u gegevens uit verschillende tabellen combineren tot een gegevensbron voor een formulier, rapport of Data Access-pagina.) die in beide querymodi zijn gemaakt door elkaar gebruikt. Het bereik van gegevenstypen, de gereserveerde waarden en de jokertekens verschillen in de querymodi.
Voorbeeld van een query met jokertekens
Een query waarin jokertekens worden gebruikt in een criteriumexpressie kan verschillende resultaten hebben in beide querymodi. Zie de volgende voorbeelden:
- Stel dat u een ANSI-89 SQL-query uitvoert in een database die is ingesteld op de ANSI-92-querymodus, zoals:
SELECT * FROM Klanten WHERE Land Like 'U*'
Deze query geeft alle klanten uit een land of regio genaamd 'U*' als resultaat en niet uit al de landen/regio's die beginnen met de letter 'U', omdat het sterretje (*) geen jokerteken is in ANSI-92 SQL.
- Stel dat u een ANSI-92 SQL-query uitvoert in een database die is ingesteld op de ANSI-89-querymodus, zoals:
SELECT * FROM Klanten WHERE Land Like 'U%'
Deze query geeft al de klanten uit een land of regio genaamd 'U%' als resultaat en niet uit al de landen/regio's die beginnen met de letter 'U', omdat het procentteken (%) geen jokerteken is in ANSI-89 SQL.
Voorbeeld van een query met een veldnaam die overeenkomt met de aliasnaam
Als een query een alias gebruikt die overeenkomt met de naam van de basiskolom en u vervolgens een berekend veld maakt waarin deze dubbelzinnige naam wordt gebruikt, heeft de query verschillende resultaten in beide querymodi. Zie bijvoorbeeld de volgende query:
SELECT Orders.[Order-id] AS Vrachtkosten, Orders.Vrachtkosten, [Vrachtkosten]*1.1 AS [Nieuwe vrachtkosten] FROM Orders;
Bij gebruik van ANSI-92 SQL wordt de waarde voor Nieuwe vrachtkosten berekend met het veld Vrachtkosten en daarom wordt Vrachtkosten verhoogd met 10%. Bij gebruik van ANSI-89 SQL wordt de waarde voor Nieuwe vrachtkosten berekend met de alias voor Vrachtkosten en daarom wordt elke waarde voor Order-id verhoogd met 10%.
Problemen voorkomen die worden veroorzaakt door het gebruik van verschillende ANSI SQL-querymodi in een database
In het algemeen moet u de volgende handelingen vermijden om te voorkomen dat er problemen optreden door het gebruik van query's die in verschillende ANSI SQL-querymodi zijn gemaakt:
- Een Access-database die is ingesteld op de ANSI-92 SQL-querymodus van de 2002- of 2003-bestandsindeling naar de 2000- of 97-bestandsindeling converteren. De ANSI-92 SQL-querymodus wordt alleen ondersteund in de 2002 - 2003-bestandsindeling.
- De ANSI SQL-querymodus voor de huidige database wijzigen nadat u een of meer query's hebt gemaakt. Als u dit doet, moet u de bestaande query's opnieuw testen om te controleren of deze nog werken en de gewenste resultaten leveren. Zo nodig moet u de query's herschrijven.
- Query's die in een bepaalde ANSI SQL-querymodus zijn gemaakt importeren in een Access-database die op een andere modus is ingesteld of query's die met een bepaalde ANSI SQL-querymodus zijn gemaakt exporteren naar een Access-database die op een andere modus is ingesteld.
- De ANSI SQL-querymodus in een bestaande toepassing wijzigen. Hierdoor kan de toepassing beschadigd raken zodat u deze opnieuw moet schrijven.
In Access 2000 kon u de ANSI SQL-querymodus alleen via programmacode wijzigen en query's die met de ANSI-92-modus waren gemaakt, werden verborgen in het databasevenster (databasevenster: het venster dat verschijnt als u een Access-database of een Access-project opent. Het bevat snelkoppelingen voor het maken van nieuwe databaseobjecten en het openen van bestaande objecten.). In Access 2002 of hoger kunt u of een gebruiker de ANSI SQL-querymodus wijzigen via de gebruikersinterface en worden ANSI-92-query's niet meer verborgen in het databasevenster, zodat u onbedoelde of opzettelijke wijzigingen aan de ANSI SQL-querymodus van de toepassing kunt helpen voorkomen door de programmacode te beschermen. U kunt bovendien voorkomen dat de querymodus wordt gewijzigd via de gebruikersinterface van de toepassing.
-
Dubbelzinnige aliassen en kolomnamen gebruiken. Zorg ervoor dat aliassen en kolomnamen altijd uniek zijn in een SQL-instructie om verwarring te voorkomen.
|