0 / 0 / 0 Регистрация: 22.12.2020 Сообщений: 7 |
|
1 |
|
16.05.2021, 01:18. Показов 4218. Ответов 11
Здравствуйте! Помогите, пожалуйста. Нужна команда на SQL для создания четырех связанных таблиц в MS Access. Я пишу код, но при попытке сохранить его выскакивает сообщение «Ошибка синтаксиса в инструкции CREATE TABLE». Уже перерыла все методички, но решения проблемы так и не нашла. По методичке пишу правильно, но запрос упорно не хочет сохраняться. Должна получиться вот такая схема данных (см. вложение). Кликните здесь для просмотра всего текста
0 |
17320 / 7146 / 1614 Регистрация: 21.06.2012 Сообщений: 13,489 |
|
16.05.2021, 01:31 |
2 |
Возможно ли это реализовать? Возможно. Запросы нужно запускать по отдельности, так в Аксессе делается. А связи Вы и не создавали. Для их создания нужно делать CONSTRAINT … FOREIGN KEY.
1 |
0 / 0 / 0 Регистрация: 22.12.2020 Сообщений: 7 |
|
16.05.2021, 01:49 [ТС] |
3 |
Поняла, спасибо. Я пыталась писать запросы на создание таблиц со связями. Во вложении пример одного такого запроса. Таблица создается, а связь — нет. Что я делаю не так?.. Миниатюры
0 |
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 |
|||
Извините, я просто не знала, как это делать. Добавила.
0 |
ltv_1953 17320 / 7146 / 1614 Регистрация: 21.06.2012 Сообщений: 13,489 |
||||
16.05.2021, 02:18 |
6 |
|||
РешениеА CONSTRAINT где? И, естественно, таблицы Группы и Университеты должны быть созданы до выполнения этого запроса.
1 |
marusa122 0 / 0 / 0 Регистрация: 22.12.2020 Сообщений: 7 |
||||
16.05.2021, 02:44 [ТС] |
7 |
|||
Спасибо вам большое.
В режиме Конструктора (в уже созданной таблице) приходится вручную задавать маску ввода >L и правило проверки — «М» Or «Ж» . Возможно ли как-то дополнить запрос, чтобы при создании таблицы эти параметры устанавливались автоматически?
0 |
17320 / 7146 / 1614 Регистрация: 21.06.2012 Сообщений: 13,489 |
|
16.05.2021, 03:41 |
8 |
маску ввода > Это не маска ввода, а ограничение. Читайте документацию CONSTRAINT
1 |
0 / 0 / 0 Регистрация: 22.12.2020 Сообщений: 7 |
|
16.05.2021, 03:51 [ТС] |
9 |
Нет-нет, там именно маска ввода (она так и называется в Конструкторе)
0 |
17320 / 7146 / 1614 Регистрация: 21.06.2012 Сообщений: 13,489 |
|
16.05.2021, 04:09 |
10 |
Но куда вставлять и как оформлять в запросе маску ввода? Никуда. Нет такой возможности, если не конструкторе вручную, то только в VB, в DAO есть свойства полей таблицы. И все маски и т.п. (прочитал Вашу, как ограничение >1) лучше не делайте в таблицах, а только в формах. Вручную в таблицы вводить — дурной тон.
1 |
0 / 0 / 0 Регистрация: 22.12.2020 Сообщений: 7 |
|
16.05.2021, 04:18 [ТС] |
11 |
Большое вам спасибо))
0 |
17320 / 7146 / 1614 Регистрация: 21.06.2012 Сообщений: 13,489 |
|
16.05.2021, 04:42 |
12 |
Большое вам спасибо Да не за что. Все бы ТС так точно формулировали вопросы, воспринимали ответы, … .
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
2,1742 gold badges17 silver badges31 bronze badges
asked Feb 19, 2013 at 18:17
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
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
4,8029 gold badges52 silver badges65 bronze badges
answered May 19, 2013 at 15:57
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
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
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
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
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 о закрытых скобках тоже верна.