Ошибка синтаксиса в инструкции create table access

0 / 0 / 0

Регистрация: 22.12.2020

Сообщений: 7

1

16.05.2021, 01:18. Показов 4218. Ответов 11


Студворк — интернет-сервис помощи студентам

Здравствуйте! Помогите, пожалуйста. Нужна команда на SQL для создания четырех связанных таблиц в MS Access. Я пишу код, но при попытке сохранить его выскакивает сообщение «Ошибка синтаксиса в инструкции CREATE TABLE». Уже перерыла все методички, но решения проблемы так и не нашла. По методичке пишу правильно, но запрос упорно не хочет сохраняться. Должна получиться вот такая схема данных (см. вложение).
Если создавать запрос на каждую таблицу отдельно — всё работает, только связи не создаются. Мне нужно, чтобы таблицы создавались вместе со связями. Возможно ли это реализовать?

Кликните здесь для просмотра всего текста



0



Эксперт MS Access

17320 / 7146 / 1614

Регистрация: 21.06.2012

Сообщений: 13,489

16.05.2021, 01:31

2

Цитата
Сообщение от marusa122
Посмотреть сообщение

Возможно ли это реализовать?

Возможно. Запросы нужно запускать по отдельности, так в Аксессе делается. А связи Вы и не создавали. Для их создания нужно делать CONSTRAINT … FOREIGN KEY.



1



0 / 0 / 0

Регистрация: 22.12.2020

Сообщений: 7

16.05.2021, 01:49

 [ТС]

3

Поняла, спасибо. Я пыталась писать запросы на создание таблиц со связями. Во вложении пример одного такого запроса. Таблица создается, а связь — нет. Что я делаю не так?..
Схема данных та же, что и в шапке

Миниатюры

Проблема с CREATE TABLE
 



0



Эксперт MS Access

17320 / 7146 / 1614

Регистрация: 21.06.2012

Сообщений: 13,489

16.05.2021, 02:00

4

Выкладывайте SQL не картинками, а текстом, в тегах SQL. Нажали SQL (третья строка, 6 слева), появились и внутрь вставили текст. Ломать глаза, а потом стучать по клавишам нет никакого желания.



1



marusa122

0 / 0 / 0

Регистрация: 22.12.2020

Сообщений: 7

16.05.2021, 02:06

 [ТС]

5

Извините, я просто не знала, как это делать. Добавила.

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE TABLE Студенты
(
[Код Студента] TEXT(6) NOT NULL CONSTRAINT PK_КодСтудента PRIMARY KEY UNIQUE,
[Фамилия и инициалы] TEXT(25),
[Телефон] TEXT(14),
[Пол] TEXT(1),
[Дата рождения] DATE,
[Университет] TEXT(4),
[Группа] TEXT(10),
[Средний балл аттестата] INT,
FOREIGN KEY ([Группа]) REFERENCES Группы([Код группы]),
FOREIGN KEY ([Университет]) REFERENCES Университеты([Код университета])
);



0



ltv_1953

Эксперт MS Access

17320 / 7146 / 1614

Регистрация: 21.06.2012

Сообщений: 13,489

16.05.2021, 02:18

6

Лучший ответ Сообщение было отмечено marusa122 как решение

Решение

А CONSTRAINT где? И, естественно, таблицы Группы и Университеты должны быть созданы до выполнения этого запроса.

SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
CREATE TABLE Студенты
(
[Код Студента] TEXT(6) NOT NULL CONSTRAINT PK_КодСтудента PRIMARY KEY UNIQUE,
[Фамилия и инициалы] TEXT(25),
[Телефон] TEXT(14),
[Пол] TEXT(1),
[Дата рождения] DATE,
[Университет] TEXT(4),
[Группа] TEXT(10),
[Средний балл аттестата] INT,
CONSTRAINT FK_Группа FOREIGN KEY ([Группа]) REFERENCES Группы([Код группы]),
CONSTRAINT FK_Университет FOREIGN KEY ([Университет]) REFERENCES Университеты([Код университета])
);



1



marusa122

0 / 0 / 0

Регистрация: 22.12.2020

Сообщений: 7

16.05.2021, 02:44

 [ТС]

7

Спасибо вам большое.
И еще такой вопрос: можно ли в таких запросах задавать сразу маску ввода и правило проверки? Или это делается только вручную уже после создания таблицы?
Например, вот это поле:

SQL
1
Пол] TEXT(1),

В режиме Конструктора (в уже созданной таблице) приходится вручную задавать маску ввода >L и правило проверки — «М» Or «Ж» . Возможно ли как-то дополнить запрос, чтобы при создании таблицы эти параметры устанавливались автоматически?



0



Эксперт MS Access

17320 / 7146 / 1614

Регистрация: 21.06.2012

Сообщений: 13,489

16.05.2021, 03:41

8

Цитата
Сообщение от marusa122
Посмотреть сообщение

маску ввода >

Это не маска ввода, а ограничение. Читайте документацию CONSTRAINT
… CHECK. Или примеры на форуме посмотрите (поиск в разделе по CONSTRAINT).



1



0 / 0 / 0

Регистрация: 22.12.2020

Сообщений: 7

16.05.2021, 03:51

 [ТС]

9

Нет-нет, там именно маска ввода (она так и называется в Конструкторе)
https://support.microsoft.com/… u-ru&ad=ru
> означает, что все последующие знаки будут переведены в верхний регистр.
L — пользователь должен ввести букву.
Про CHECK посмотрела, вопрос о Правиле проверки снят. Но куда вставлять и как оформлять в запросе маску ввода?..



0



Эксперт MS Access

17320 / 7146 / 1614

Регистрация: 21.06.2012

Сообщений: 13,489

16.05.2021, 04:09

10

Цитата
Сообщение от marusa122
Посмотреть сообщение

Но куда вставлять и как оформлять в запросе маску ввода?

Никуда. Нет такой возможности, если не конструкторе вручную, то только в VB, в DAO есть свойства полей таблицы. И все маски и т.п. (прочитал Вашу, как ограничение >1) лучше не делайте в таблицах, а только в формах. Вручную в таблицы вводить — дурной тон.



1



0 / 0 / 0

Регистрация: 22.12.2020

Сообщений: 7

16.05.2021, 04:18

 [ТС]

11

Большое вам спасибо))



0



Эксперт MS Access

17320 / 7146 / 1614

Регистрация: 21.06.2012

Сообщений: 13,489

16.05.2021, 04:42

12

Цитата
Сообщение от marusa122
Посмотреть сообщение

Большое вам спасибо

Да не за что. Все бы ТС так точно формулировали вопросы, воспринимали ответы, … .



1



I keep getting CREATE TABLE Syntax Error, but I don’t see the error! What is causing the error?

My SQL:

CREATE TABLE my_employee
(
employee_id INTEGER PRIMARY KEY NOT NULL,
first_name VARCHAR(25) NOT NULL,
last_name VARCHAR(30) NOT NULL,
address VARCHAR(10) NOT NULL,
birthdate DATE,
salary NUMERIC(8,2) DEFAULT 15000,
marital_status CHAR(1)
);

Newd's user avatar

Newd

2,1742 gold badges17 silver badges31 bronze badges

asked Feb 19, 2013 at 18:17

ummlayth's user avatar

2

Since your DDL statement includes DEFAULT, you must execute it with ADO. I loaded your statement into a string variable and executed it from Access 2007 like this:

CurrentProject.Connection.Execute strSql

The salary field is decimal with precision 8, scale 2, and default 15000.

DEFAULT is one of the Access SQL features added with Jet 4.0. Those features are not available for a statement executed from DAO. If you are using Access’ query designer to create and execute the statement, you’re using DAO. Same if you were using CurrentDb.Execute. But CurrentProject.Connection is an ADO object, so it can .Execute Jet 4.0 features.

Note NOT NULL is not necessary after PRIMARY KEY since PRIMARY KEY implies NOT NULL. However PRIMARY KEY NOT NULL does not trigger an error. The statement works as you originally wrote it as long as you execute it from ADO.

answered Feb 19, 2013 at 18:26

HansUp's user avatar

HansUpHansUp

96k11 gold badges77 silver badges135 bronze badges

1

Well I was having the same problem with Ms Access 2007, but I solved it later on.
It is because actually some features are disabled by default for security reasons over there.
When it shows you syntax error, you can see the message at menu bar somewhere or at the bottom: Some Features Are Disabled For Security Reasons....
Click on the message then proceed to enable further features.

Andre Silva's user avatar

Andre Silva

4,8029 gold badges52 silver badges65 bronze badges

answered May 19, 2013 at 15:57

RAFIA's user avatar

RAFIARAFIA

111 bronze badge

As HansUp said: «default» in DDL doesn’t work here. As an alternative you can create the table without the default first and add the default via the TableDef afterwards:

CurrentDb().Execute "create table my_employee ..."
CurrentDb().TableDefs("my_employee").Fields("salary").DefaultValue = 15000

answered Aug 25, 2014 at 11:49

Timo Verhoeven's user avatar

Your problem is in your PRIMARY KEY declaration

CREATE TABLE my_employee
(
employee_id INTEGER NOT NULL,
first_name VARCHAR(25) NOT NULL,
last_name VARCHAR(30) NOT NULL,
address VARCHAR(10) NOT NULL,
birthdate DATE,
salary NUMERIC(8,2) DEFAULT 15000,
marital_status CHAR(1),
PRIMARY KEY (employee_id)
);

answered Feb 19, 2013 at 18:38

Dirker27's user avatar

1

I created a MS Access database at runtime and tried to create a table.
Below code is showing the error «Syntax error in CREATE TABLE statement» while creating a table at runtime.

cmmd.CommandText = "CREATE TABLE tblContacts( [SectionID] AUTOINCREMENT PRIMARY KEY,[ScetionName] Text(50), [CatID] Number(Integer), [Rate] Number(Double), [Prefix] Text(5), [Suffix] Text(5), [NextNumber] Number(Integer), [Inactive] Yes, [ModUserID] Number(Integer),[ModDate] Date)";
cmmd.ExecuteNonQuery();

asked Mar 19, 2014 at 12:09

Sanjeev4evr's user avatar

Sanjeev4evrSanjeev4evr

4032 gold badges11 silver badges24 bronze badges

2

The Access db engine will balk at field type declarations such as Number(Integer). Assuming you will execute the statement from an OleDb connection, use this one …

cmmd.CommandText = "CREATE TABLE tblContacts( [SectionID] COUNTER PRIMARY KEY,[ScetionName] Text(50), [CatID] Long, [Rate] Double, [Prefix] Text(5), [Suffix] Text(5), [NextNumber] Number(Integer), [Inactive] YesNo, [ModUserID] Long,[ModDate] DateTime)";

You can find a table which includes valid Access DDL field type declarations here: Field type reference — names and values for DDL, DAO, and ADOX

answered Mar 25, 2014 at 12:54

HansUp's user avatar

HansUpHansUp

96k11 gold badges77 silver badges135 bronze badges

2

Search code, repositories, users, issues, pull requests…

Provide feedback

Saved searches

Use saved searches to filter your results more quickly

Sign up

#sql #ms-access

#sql #ms-access

Вопрос:

Вот мой код, я пытаюсь создать несколько таблиц:

 Create Table Order_t
(
Id AutoIncrement Not Null,
OrderDate DateTime Not Null,
CustId Int Not Null,
Primary Key(Id),
Foreign Key(CustId) References Customer_t(Id)
(;
Create Table PersonRole_t
(
PersonRoleID Autoincrement Not Null,
Person_ID int Not Null,
Primary Key(PersonRoleID, Person_ID),
Foreign Key(Person_ID) References Person_T(Person_ID)
(;
Create Table Product_t
(
Id Text(10) Not Null,
Name Text(30) Not Null,
Description Text(30),
Finish Text(30),
UnitPrice Currency Not Null,
Primary Key(Id)
) ;
  

Всякий раз, когда я запускаю его в Microsoft Access, я получаю сообщение об ошибке в инструкции CREATE TABLE (оно выделяет определение таблицы PersonRole_T). Не уверен, что делать, довольно новичок в SQL.

Ответ №1:

Используйте CLOSE скобки в конце CREATE инструкции Table вместо круглых OPEN скобок

 Create Table Order_t
(
Id AutoIncrement Not Null,
OrderDate DateTime Not Null,
CustId Int Not Null,
Primary Key(Id),
Foreign Key(CustId) References Customer_t(Id)
); -- Not (;

Create Table PersonRole_t
(
PersonRoleID Autoincrement Not Null,
Person_ID int Not Null,
Primary Key(PersonRoleID, Person_ID),
Foreign Key(Person_ID) References Person_T(Person_ID)
); -- Not (; 
  

Комментарии:

1. Просто чтобы указать очевидное для OP, синтаксис Access SQL не поддерживает комментарии, поэтому -- Not (; часть должна быть удалена при выполнении.

Ответ №2:

Таблица Person_T с ключом of Person_ID должна существовать до References Person_T(Person_ID) того, как оператор сможет выполняться. Основываясь на вашем соглашении об именах, я бы предположил, что утверждение должно быть References Person_T(Id) .

Рассмотрите возможность изменения вашего соглашения об именовании, чтобы элемент данных не менял свое имя в зависимости от его местоположения, связанного с таблицами / представлениями. Также подумайте, стоит ли беспокоиться о _t суффиксе.

Точка зрения @Prdp о закрытых скобках тоже верна.

Понравилась статья? Поделить с друзьями:
  • Релаксация по джекобсону инструкция в реальном времени
  • Метопрокламид инструкция по применению цена уколы
  • Масло туи капли в нос для детей инструкция
  • Небольшой каркасный дом своими руками пошаговая инструкция
  • Дароб инструкция по применению цена отзывы