Tabellen of indexen maken of wijzigen met een definitiequery

Belangrijk: Dit artikel is automatisch vertaald, bekijk de disclaimer. De Engelse versie van dit artikel vindt u hier voor referentiedoeleinden.

In Microsoft Office Access 2007is het gemakkelijk maken en wijzigen van tabellen, beperkingen en indexen in de ontwerpweergave en om relaties te maken met behulp van de venster Relaties. U kunt ook maken en deze dezelfde entiteiten wijzigen door te schrijven van definitiequery's in SQL-weergave.

In dit artikel worden definitiequery's beschreven en wordt toegelicht hoe u dergelijke query's gebruikt om tabellen, indexen, beperkingen en relaties te maken. Aan de hand van dit artikel kunt u ook bepalen wanneer u een definitiequery moet gebruiken.

Wat wilt u doen?

Nagaan wanneer u een definitiequery moet gebruiken

Tabellen maken of wijzigen

Indexen maken

Beperkingen of relaties maken

Situaties waarin u een definitiequery moet gebruiken

In tegenstelling tot andere query's dient een definitiequery niet voor het ophalen van gegevens. De meeste query's gebruiken DML (Data Manipulation Language), een taal met SQL-opdrachten (Structured Query Language) die aangeven hoe gegevens uit bestaande databaseobjecten moeten worden samengevoegd en gemanipuleerd om de gewenste gegevensresultaten te produceren. In definitiequery's wordt gebruik gemaakt van DDL (Data Definition Language), een taal met SQL-opdrachten voor het definiëren van de databaseobjecten waarin gegevens zijn opgeslagen of geïndexeerd, en SQL-opdrachten die de gebruikerstoegang tot databaseobjecten beheren. In Office Access 2007 dient een definitiequery voor het definiëren van een databaseobject of voor het wijzigen van de definitie van een databaseobject.

In het algemeen kunt u voor het maken van tabellen, beperkingen, indexen en relaties het best de grafische ontwerpinterfaces van Office Access 2007 (bijvoorbeeld de ontwerpweergave en het venster Relaties) gebruiken. Als u echter tabellen hebt die u regelmatig verwijdert en opnieuw maakt, kan het gebruik van deze interfaces tijdrovend worden. Door een definitiequery te gebruiken kunt u een query eenmaal schrijven en deze vervolgens uitvoeren wanneer dit nodig is. Gebruik een definitiequery alleen als u vertrouwd bent met SQL-instructies en u van plan bent regelmatig tabellen, beperkingen of indexen te verwijderen en opnieuw te maken.

Belangrijk: Het wijzigen van databaseobjecten met definitiequery's kan riskant zijn, omdat er geen bevestigingsdialoogvensters voor de acties worden weergegeven. Als u een vergissing maakt, kunt u gegevens verliezen of per ongeluk het ontwerp van een tabel veranderen. Wees dus voorzichtig wanneer u een definitiequery gebruikt om objecten in uw database te wijzigen. Als u niet verantwoordelijk bent voor het onderhoud van de database die u gebruikt, moet u contact opnemen met de beheerder van de database voordat u een definitiequery uitvoert. Bovendien is het raadzaam een back-up te maken van alle tabellen waarop u een dergelijke query gaat uitvoeren.

Naar boven

Tabellen maken of wijzigen

Als u een tabel wilt maken, gebruikt u de opdracht CREATE TABLE. De syntaxis van deze opdracht is als volgt:

CREATE TABLE table_name
(field1 type [(size)] [NOT NULL] [index1]
[, field2 type [(size)] [NOT NULL] [index2]
[, ...][, CONSTRAINT constraint1 [, ...]])

De enige vereiste elementen van de opdracht CREATE TABLE zijn de opdracht zelf (CREATE TABLE), de naam van de tabel, minstens één veld en het gegevenstype van elk veld. Hier volgt een eenvoudig voorbeeld.

Stel dat u een tweedehands auto wilt kopen en dat u een tabel wilt maken met de naam, het jaar en de prijs van de occasions die u op het oog hebt. U wilt maximaal 30 tekens voor de naam en 4 cijfers voor het jaar toestaan. Ga als volgt te werk als u de tabel met behulp van een definitiequery wilt maken:

Opmerking: Voordat u een definitiequery kunt uitvoeren, moet u de inhoud van de database inschakelen.

  1. Klik op de Berichtenbalk op Opties en vervolgens op Deze inhoud inschakelen.

  2. Ga naar het het tabblad Maken en klik in de groep Overige op Queryontwerp.

  3. Sluit het dialoogvenster Tabel weergeven.

  4. Klik op het tabblad Ontwerpen in de groep Type query op Definitiequery.

    Het ontwerpraster wordt verborgen en u ziet het objecttabblad van de SQL-weergave.

  5. Typ de volgende SQL-instructie:

    CREATE TABLE Auto's (Naam TEXT(30), Jaar TEXT(4), Prijs CURRENCY)

  6. Ga naar het tabblad Ontwerp en klik in de groep Resultaten op Uitvoeren.

Een tabel wijzigen

Als u een tabel wilt wijzigen, gebruikt u de opdracht ALTER TABLE. Met deze opdracht kunt u kolommen of beperkingen toevoegen, wijzigen of verwijderen. De syntaxis van de opdracht ALTER TABLE is als volgt:

ALTER TABLE table_name predicate

De mogelijkheden voor het predicaat zijn als volgt:

ADD COLUMN field type[(size)] [NOT NULL] [CONSTRAINT constraint]

ADD CONSTRAINT multifield_constraint

ALTER COLUMN field type[(size)]

DROP COLUMN field

DROP CONSTRAINT constraint

Stel dat u een tekstveld van 10 tekens wilt toevoegen voor het opslaan van informatie over de toestand van elke auto. Hiervoor gaat u als volgt te werk:

  1. Ga naar het het tabblad Maken en klik in de groep Overige op Queryontwerp.

  2. Sluit het dialoogvenster Tabel weergeven.

  3. Klik op het tabblad Ontwerpen in de groep Type query op Definitiequery.

    Het ontwerpraster wordt verborgen en u ziet het objecttabblad van de SQL-weergave.

  4. Typ de volgende SQL-instructie:

    ALTER TABLE Auto's ADD COLUMN Toestand TEXT(10)

  5. Ga naar het tabblad Ontwerp en klik in de groep Resultaten op Uitvoeren.

Naar boven

Indexen maken

Als u een index voor een bestaande tabel wilt maken, gebruikt u de opdracht CREATE INDEX. De syntaxis van deze opdracht is als volgt:

CREATE [UNIQUE] INDEX index_name
ON table (field1 [DESC][, field2 [DESC], ...])
[WITH {PRIMARY | DISALLOW NULL | IGNORE NULL}]

De enige vereiste elementen zijn de opdracht zelf (CREATE INDEX), de naam van de index, het argument ON, de naam van de tabel met de velden die u wilt indexeren, en de lijst met velden die u in de index wilt opnemen.

  • Het argument DESC zorgt ervoor dat de index in aflopende volgorde wordt gemaakt, wat nuttig kan zijn als u vaak query's uitvoert waarmee top-waarden voor het geïndexeerde veld worden opgezocht of waarmee het geïndexeerde veld in aflopende volgorde wordt gesorteerd. Standaard wordt een index in oplopende volgorde gemaakt.

  • Het argument WITH PRIMARY duidt het geïndexeerde veld of de geïndexeerde velden aan als de primaire sleutel van de tabel.

  • Het argument WITH DISALLOW NULL zorgt dat voor het geïndexeerde veld verplicht een waarde moet worden ingevoerd,  wat wil zeggen dat Null-waarden niet zijn toegestaan.

Stel dat u de tabel Auto's hebt met velden waarin de volgende gegevens zijn opgeslagen voor tweedehands auto's die u op het oog hebt: naam, jaar, prijs en toestand. De tabel is groot geworden en u voegt vaak het jaarveld aan query's toe. Voor snellere queryresultaten kunt u een index voor het veld Jaar maken door de volgende procedure uit te voeren:

  1. Ga naar het het tabblad Maken en klik in de groep Overige op Queryontwerp.

  2. Sluit het dialoogvenster Tabel weergeven.

  3. Klik op het tabblad Ontwerpen in de groep Type query op Definitiequery.

    Het ontwerpraster wordt verborgen en u ziet het objecttabblad van de SQL-weergave.

  4. Typ de volgende SQL-instructie:

    CREATE INDEX Jaarindex ON Auto's (Jaar)

  5. Ga naar het tabblad Ontwerp en klik in de groep Resultaten op Uitvoeren.

Naar boven

Beperkingen of relaties maken

Een beperking definieert een logische voorwaarde waaraan een veld of combinatie van velden moet voldoen wanneer waarden worden ingevoegd. De beperking UNIQUE verhindert bijvoorbeeld dat voor een veld een waarde wordt ingevoerd waardoor een bestaande waarde voor dat veld zou worden gedupliceerd.

Een relatie is een type beperking die verwijst naar de waarden van een veld of combinatie van velden in een andere tabel om te bepalen of een waarde kan worden ingevoegd in het veld of de combinatie van velden waarvoor de relatie is opgegeven.

Als u een beperking wilt maken, gebruikt u een CONSTRAINT-component in de opdracht CREATE TABLE of ALTER TABLE. Er zijn twee soorten CONSTRAINT-componenten: een om een beperking voor één veld in te stellen en een om een beperking voor meerdere velden in te stellen.

Beperkingen voor één veld

Een CONSTRAINT-component voor één veld volgt direct op de definitie van het veld dat erdoor wordt beperkt en heeft de volgende syntaxis:

CONSTRAINT constraint_name {PRIMARY KEY | UNIQUE | NOT NULL |
REFERENCES foreign_table [(foreign_field)]
[ON UPDATE {CASCADE | SET NULL}]
[ON DELETE {CASCADE | SET NULL}]}

Stel dat u de tabel Auto's hebt met velden waarin de volgende gegevens zijn opgeslagen voor tweedehands auto's die u op het oog hebt: naam, jaar, prijs en toestand. U vergeet vaak een waarde voor de toestand van de auto in te voeren en u wilt deze informatie altijd registreren. U kunt een beperking voor het veld Toestand maken die u belet het veld leeg te laten. Hiervoor voert u de volgende procedure uit:

  1. Ga naar het het tabblad Maken en klik in de groep Overige op Queryontwerp.

  2. Sluit het dialoogvenster Tabel weergeven.

  3. Klik op het tabblad Ontwerpen in de groep Type query op Definitiequery.

    Het ontwerpraster wordt verborgen en u ziet het objecttabblad van de SQL-weergave.

  4. Typ de volgende SQL-instructie:

    ALTER TABLE Auto's ALTER COLUMN Toestand TEXT CONSTRAINT ToestandVereist NOT NULL

  5. Ga naar het tabblad Ontwerp en klik in de groep Resultaten op Uitvoeren.

Stel nu dat u na een tijdje merkt dat het veld diverse soortgelijke waarden bevat die eigenlijk identiek moeten zijn. Voor sommige auto's is bijvoorbeeld de waarde slecht ingevoerd in het veld Toestand en voor andere de waarde niet best. Nadat u de waarden hebt opgeschoond zodat ze consistenter zijn, kunt u de tabel Autotoestand maken met één veld, genaamd Toestand, dat alle waarden bevat die u voor de toestand van auto's wilt gebruiken. Dit doet u als volgt:

  1. Ga naar het het tabblad Maken en klik in de groep Overige op Queryontwerp.

  2. Sluit het dialoogvenster Tabel weergeven.

  3. Klik op het tabblad Ontwerpen in de groep Type query op Definitiequery.

    Het ontwerpraster wordt verborgen en u ziet het objecttabblad van de SQL-weergave.

  4. Typ de volgende SQL-instructie:

    CREATE TABLE Autotoestand (Toestand TEXT(10))

  5. Ga naar het tabblad Ontwerp en klik in de groep Resultaten op Uitvoeren.

  6. Typ de volgende SQL-instructie op het objecttabblad van de SQL-weergave om de waarden uit het veld Toestand van de tabel Auto's in te voegen in de nieuwe tabel Autotoestand:

    INSERT INTO Autotoestand SELECT DISTINCT Toestand FROM Auto's;

    Opmerking: De SQL-instructie in deze stap is een toevoegquery. In tegenstelling tot een definitiequery eindigt een toevoegquery met een puntkomma.

  7. Ga naar het tabblad Ontwerp en klik in de groep Resultaten op Uitvoeren.

Als u wilt vereisen dat elke nieuwe waarde die in het veld Toestand van de tabel Auto's wordt ingevoegd, overeenkomt met een waarde van het veld Toestand in de tabel Autotoestand, maakt u een relatie tussen Autotoestand en Auto's voor het veld Toestand. Hiervoor voert u de volgende procedure uit:

  1. Ga naar het het tabblad Maken en klik in de groep Overige op Queryontwerp.

  2. Sluit het dialoogvenster Tabel weergeven.

  3. Klik op het tabblad Ontwerpen in de groep Type query op Definitiequery.

    Het ontwerpraster wordt verborgen en u ziet het objecttabblad van de SQL-weergave.

  4. Typ de volgende SQL-instructie:

    ALTER TABLE Auto's ALTER COLUMN Toestand TEXT CONSTRAINT RSleutelToestand REFERENCES Autotoestand (Toestand)

  5. Ga naar het tabblad Ontwerp en klik in de groep Resultaten op Uitvoeren.

Beperkingen voor meerdere velden

Een CONSTRAINT-component voor meerdere velden kan alleen buiten een velddefinitiecomponent worden gebruikt en heeft de volgende syntaxis:

CONSTRAINT constraint_name 
{PRIMARY KEY (pk_field1[, pk_field2[, ...]]) |
UNIQUE (unique1[, unique2[, ...]]) |
NOT NULL (notnull1[, notnull2[, ...]]) |
FOREIGN KEY [NO INDEX] (ref_field1[, ref_field2[, ...]])
REFERENCES foreign_table
[(fk_field1[, fk_field2[, ...]])] |
[ON UPDATE {CASCADE | SET NULL}]
[ON DELETE {CASCADE | SET NULL}]}

Hier volgt een ander voorbeeld gebaseerd op de tabel Auto's. Stel dat u wilt voorkomen dat meerdere records in de tabel Auto's dezelfde reeks waarden voor naam, jaar, toestand en prijs hebben. U kunt een UNIQUE-beperking op deze velden toepassen door de volgende procedure uit te voeren:

  1. Ga naar het het tabblad Maken en klik in de groep Overige op Queryontwerp.

  2. Sluit het dialoogvenster Tabel weergeven.

  3. Klik op het tabblad Ontwerpen in de groep Type query op Definitiequery.

    Het ontwerpraster wordt verborgen en u ziet het objecttabblad van de SQL-weergave.

  4. Typ de volgende SQL-instructie:

    ALTER TABLE Auto's ADD CONSTRAINT GeenDubbele UNIQUE (naam, jaar, toestand, prijs)

  5. Ga naar het tabblad Ontwerp en klik in de groep Resultaten op Uitvoeren.

Naar boven

Opmerking: Disclaimer voor automatische vertaling: Dit artikel is vertaald door een computersysteem zonder menselijke tussenkomst. Microsoft biedt deze automatische vertalingen aan om niet-Engels sprekende gebruikers te helpen de inhoud over producten, services en technologieën van Microsoft te raadplegen. Omdat het artikel automatisch is vertaald, bevat het mogelijk fouten in grammatica, woordenschat en syntaxis.

Uw vaardigheden uitbreiden
Training verkennen
Als eerste nieuwe functies krijgen
Deelnemen aan Office Insiders

Was deze informatie nuttig?

Bedankt voor uw feedback.

Hartelijk dank voor uw feedback! Het lijkt ons een goed idee om u in contact te brengen met een van onze Office-ondersteuningsagents.

×