SQL Krijo gabim sintaksor të tabelës në kufizim

Ndërsa përpiqesha të krijoja disa tabela me kufizime, kam ngecur në gabime sintaksore. Unë jam duke përdorur Microsoft Access dhe ai vazhdon të më këshillojë se kufizimi im i dytë është i gabuar. Cfare po ndodh? Kodi im duket si më poshtë:

CREATE TABLE STORE 
(
StoreName Char(25) NOT NULL,
City Char(35) NULL
Country Char(50) NULL,
Phone Char(8) NULL,
Fax Char(15) NULL,
Email Varchar(100) NULL,
Contact Char(35) NULL,
CONSTRAINT StorePK PRIMARY KEY(StoreName),
CONSTRAINT Citizen CHECK (Country IN ('Belize', 'United States', 'Mexico','China', 'Germany', 'France', 'Netherlands'))
);

person ANewell_GO_PACK    schedule 03.12.2015    source burimi
comment
Nuk jam në dijeni që MS Access mbështet kufizimet e kontrollit: msdn.microsoft .com/en-us/library/office/.   -  person Gordon Linoff    schedule 03.12.2015
comment
Dublika i mundshëm i A është e mundur për të krijuar një kufizim kontrolli në akses dhe/ose DAO?   -  person Didier Aupest    schedule 03.12.2015


Përgjigjet (2)


Unë besoj se duhet të krijoni tabelën dhe përdorni ALTER TABLE për të shtuar kufizimin.

ALTER TABLE STORE
CONSTRAINT Citizen CHECK (
    Country IN (
        'Belize', 'United States', 'Mexico','China',
        'Germany', 'France', 'Netherlands'
    )
);

Nuk e di se sa ka ndryshuar situata që nga Access 2000, jam shumë i sigurt se disa kufizime ende zbatohen siç tregohet në këtë dokumentacion të vjetër:

Shënim Deklarata e kufizimit të kontrollit mund të ekzekutohet vetëm nëpërmjet ofruesit Jet OLE DB dhe ADO; do të kthejë një mesazh gabimi nëse përdoret përmes ndërfaqes së përdoruesit Access SQL View.

https://msdn.microsoft.com/en-us/library/aa140015%28office.10%29.aspx#acintsql_ddlconst

person shawnt00    schedule 03.12.2015

Deklarata juaj CREATE TABLE është e vlefshme Access DDL kur ekzekutohet nga ADO/OleDb. kufizimet CHECK janë ndër veçoritë DDL të shtuara me Jet 4, dhe të cilat nuk mbështeten nën DAO.

Kjo do të thotë gjithashtu se CHECK nuk mbështetet si parazgjedhje për pyetjet e drejtuara nga projektuesi i pyetjeve. Ju mund të jeni në gjendje ta shmangni atë kufizim duke vendosur opsionin Access "Sintaksë e pajtueshme me serverin SQL (ANSI 92)". Sidoqoftë, ky opsion ka efekte të tjera anësore. Nëse e përdorni, sigurohuni që të testoni pyetjet tuaja ekzistuese për të parë nëse të gjitha ato ende funksionojnë siç synohet.

E vendosa tekstin e deklaratës suaj në një variabël dhe e ekzekutova me sukses si kjo:

CurrentProject.Connection.Execute strDDL

Kjo funksionoi sepse CurrentProject.Connection është një objekt ADO.

person HansUp    schedule 03.12.2015