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

I’m just starting out experimenting with SQL on MS Access. I’m trying to insert data into a table, and I can’t figure out what I’m doing wrong here. I know it’s probably something simple so I apologize in advance. Thanks for any help you can give me!

Here’s what I’ve got:

CREATE TABLE DeathDay
  (
     ID        INT PRIMARY KEY NOT NULL,
     LastName  CHAR(25),
     FirstName CHAR(10),
     DoB       DATE,
     DoD       DATE
  );

INSERT INTO DeathDay
VALUES      (1,
             'Breitenbach',
             'Max',
             '1991-05-17',
             '2022-12-31'); 

I can create the table fine, but it gives me the following error message when I try to insert the data.

«Syntax error in CREATE TABLE statement»

Martin Smith's user avatar

Martin Smith

442k88 gold badges746 silver badges850 bronze badges

asked Jan 28, 2013 at 21:19

user2019632's user avatar

9

I just ran your scripts in separate query windows in MS Access 2010 and there was no error. However, if you try running them at the same time, you get an error:

Syntax error in CREATE TABLE statement

Based on my experience you cannot run multiple queries in the same query window.

If you want to run multiple queries then you want to use a script to process it.

answered Jan 28, 2013 at 21:28

Taryn's user avatar

TarynTaryn

244k57 gold badges364 silver badges405 bronze badges

3

In case anyone else comes to this question with the same problem as me, I found the issue to be keywords in my SQL statement. In my case «Currency». A list of reserved keywords is available here: http://allenbrowne.com/AppIssueBadWord.html the ones that are relevant to SQL are the Jet keywords.

answered Oct 17, 2013 at 8:49

majjam's user avatar

majjammajjam

1,2962 gold badges15 silver badges33 bronze badges

0 / 0 / 0

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

Сообщений: 7

1

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


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

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

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



0



Эксперт MS Access

17406 / 7187 / 1627

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

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

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

17406 / 7187 / 1627

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

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

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

17406 / 7187 / 1627

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

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

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

17406 / 7187 / 1627

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

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

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

17406 / 7187 / 1627

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

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

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

17406 / 7187 / 1627

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

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

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,1952 gold badges18 silver badges32 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

96.1k11 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,8109 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 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,1762 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

95.8k11 gold badges76 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,7729 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 am running this SQL query in MS Access:

 CREATE TABLE EX_P_TEMP
 AS (SELECT 
         EXPORT_POSTING_ID, IMPORT_POSTING_ID, DIS, 
         MILE_SAVED, IMPORT_AVAILABLE 
     FROM POTENTIAL_PAIRS);

Error:

Syntax error in CREATE TABLE statement.

Where did I go wrong?

marc_s's user avatar

marc_s

729k175 gold badges1327 silver badges1455 bronze badges

asked Jul 4, 2015 at 20:34

Karvy1's user avatar

3

That doesn’t look like valid Access syntax. If you are trying to create a new table based on the results of a SELECT, try this intead:

SELECT EXPORT_POSTING_ID, IMPORT_POSTING_ID, DIS, MILE_SAVED, IMPORT_AVAILABLE
INTO EX_P_TEMP
FROM POTENTIAL_PAIRS;

answered Jul 4, 2015 at 20:38

sstan's user avatar

sstansstan

35.3k6 gold badges48 silver badges66 bronze badges

7

#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 о закрытых скобках тоже верна.

Я продолжаю получать синтаксическую ошибку CREATE TABLE, но не вижу ошибки! Что вызывает ошибку?

Мой 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)
);

4 ответа

Лучший ответ

Поскольку ваш оператор DDL включает DEFAULT, вы должны выполнить его с помощью ADO. Я загрузил ваш оператор в строковую переменную и выполнил его из Access 2007 следующим образом:

CurrentProject.Connection.Execute strSql

Поле зарплата является десятичным с точностью до 8, по шкале 2 и по умолчанию 15000.

DEFAULT — одна из функций Access SQL, добавленных в Jet 4.0. Эти функции недоступны для оператора, выполняемого из DAO. Если вы используете конструктор запросов Access для создания и выполнения инструкции, вы используете DAO. То же самое, если вы использовали CurrentDb.Execute. Но CurrentProject.Connection является объектом ADO, поэтому он может .Execute выполнять функции Jet 4.0.

Примечание. NOT NULL не является обязательным после PRIMARY KEY, поскольку PRIMARY KEY подразумевает NOT NULL. Однако PRIMARY KEY NOT NULL не вызывает ошибки. Оператор работает так, как вы его изначально написали, пока вы выполняете его из ADO.


5

HansUp
19 Май 2013 в 23:32

У меня была та же проблема с Ms Access 2007, но я решил ее позже.
Это потому, что на самом деле некоторые функции отключены по умолчанию по соображениям безопасности.
Когда он показывает вам syntax error, вы можете увидеть сообщение в строке меню где-нибудь или внизу: Some Features Are Disabled For Security Reasons....
Щелкните сообщение, затем перейдите к включению дополнительных функций.


1

Andre Silva
19 Май 2013 в 21:19

Как сказал HansUp: «default» в DDL здесь не работает. В качестве альтернативы вы можете сначала создать таблицу без значения по умолчанию, а затем добавить значение по умолчанию через TableDef:

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


1

Timo Verhoeven
25 Авг 2014 в 15:49

Ваша проблема в декларации PRIMARY KEY

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)
);


0

Dirker27
19 Фев 2013 в 22:38

Механизм доступа db будет перекрывать объявления типа поля, такие как Number(Integer). Предполагая, что вы выполните инструкцию из OleDb-соединения, используйте этот…

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)";

Вы можете найти таблицу, которая включает в себя действительные объявления типа поля доступа DDL: Ссылка на тип поля — имена и значения для DDL, DAO и ADOX


Форум программистов Vingrad

Модераторы: Akina

Поиск:

Ответ в темуСоздание новой темы
Создание опроса
> ошибка синтаксиса CREATE TABLE 

:(

   

Опции темы

CLIPSA
Дата 7.11.2006, 21:29 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Шустрый
*

Профиль
Группа: Участник
Сообщений: 126
Регистрация: 6.10.2006

Репутация: нет
Всего: 2

Использую  Access  + ADO.
Вот код:

Код

    ADOQuery1->SQL->Clear();                 
    ADOQuery1->SQL->Add("CREATE TABLE table1(");
    ADOQuery1->SQL->Add("amount      Long DEFAULT 0,");
    ADOQuery1->SQL->Add("cod         Text(50) WITH COMP,");
    ADOQuery1->SQL->Add("name        Text(50) WITH COMP,");
    ADOQuery1->SQL->Add("nds         Long DEFAULT 0,");
    ADOQuery1->SQL->Add("total_nds   Long DEFAULT 0,");
    ADOQuery1->SQL->Add("[Код]       AutoIncrement,");
    ADOQuery1->SQL->Add("CONSTRAINT PrimaryKey PRIMARY KEY ([Код])");
    ADOQuery1->SQL->Add(");");
    ADOQuery1->ExecSQL();

Пишит ошибка синтаксиса CREATE TABLE. Немогу понять где эта ошибка?

PM MAIL   Вверх
sergejzr
Дата 7.11.2006, 21:34 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Un salsero
Group Icon

Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: нет
Всего: 360

Наверное здесь 

Код

ADOQuery1->SQL->Add("[Код]       AutoIncrement,");

А вообще, конечно интересно, что за база данных, к которй обращаешься.

———————

Me.
FB.
LinkedIn.
ORCID.
YT.

PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
CLIPSA
Дата 7.11.2006, 21:38 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Шустрый
*

Профиль
Группа: Участник
Сообщений: 126
Регистрация: 6.10.2006

Репутация: нет
Всего: 2

Access  

PM MAIL   Вверх
sergejzr
Дата 7.11.2006, 21:40 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Un salsero
Group Icon

Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

Репутация: нет
Всего: 360

Тогда туда и надо!

Цитата
Данный форум предназначен для обсуждения вопросов прямым образом связанных с C++ и БД. Так, вопросы только по C++ следует задавать в C++:Общие вопросы а вопросы по абстрактным БД в Базах данных или в соответствующих под-форумах.

Благодарим за понимание.

переношу.

———————

Me.
FB.
LinkedIn.
ORCID.
YT.

PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
Akina
Дата 7.11.2006, 22:21 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Советчик
****

Профиль
Группа: Модератор
Сообщений: 20567
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 453

В MS Access вызовите справку, ее оглавление, раскройте справочник по MS Jet SQL и посмотрите синтаксис оператора CREATE TABLE. Кроме того, как указано выше, все имена таблиц и полей в кириллице обрамляйте квадратными скобками. Для проверки правильности построенного запроса попробуйте его занести в построитель запросов MS Access (вид — режим SQL) и выполнить — это даст возможность его отладить.

———————

 О(б)суждение моих действий — в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция — Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
CLIPSA
Дата 7.11.2006, 22:44 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Шустрый
*

Профиль
Группа: Участник
Сообщений: 126
Регистрация: 6.10.2006

Репутация: нет
Всего: 2

Ничего не получается  smile 

PM MAIL   Вверх
Golden Hands
Дата 8.11.2006, 00:34 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Золотой
****

Профиль
Группа: Участник Клуба
Сообщений: 2023
Регистрация: 23.1.2005
Где: Екатеринбург

Репутация: нет
Всего: 83

Проверил в Delphi — запрос выполняется, таблица создается.

———————

Мы обречены… но только на победу!
Настанет день, и мы построим новый дом.
Внесем в него тепло, что сохранить сумели,
И воскресим все то, что в нас когда-то умерло… © Тень Света

PM MAIL ICQ   Вверх
Akina
Дата 8.11.2006, 00:36 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Советчик
****

Профиль
Группа: Модератор
Сообщений: 20567
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 453

Еще бы… а ведь уже один раз предлагал я почитать таки справку… 

Не знает MS Jet SQL про какой-то там DEFAULT. Ну вот не знает, и все тут! а ты его, беднягу… и CONSTRAINT он бы хотел видеть написанным совсем по-другому… и еще пара ляпчиков (кажется — я-то за тебя справку читать не буду, а точно не помню)…

Добавлено @ 00:40 
Golden Hands, вот именно в такой форме — и отрабатывает-создается? и структура получается такая как описано? знать, какая-то валидующая прослойка срабатывает… 

———————

 О(б)суждение моих действий — в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция — Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Golden Hands
Дата 8.11.2006, 01:57 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Золотой
****

Профиль
Группа: Участник Клуба
Сообщений: 2023
Регистрация: 23.1.2005
Где: Екатеринбург

Репутация: нет
Всего: 83

В самом Access этот запрос не прошел, пока не убрал DEFAULT и WITH COMP.

———————

Мы обречены… но только на победу!
Настанет день, и мы построим новый дом.
Внесем в него тепло, что сохранить сумели,
И воскресим все то, что в нас когда-то умерло… © Тень Света

PM MAIL ICQ   Вверх
CLIPSA
Дата 8.11.2006, 17:33 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Шустрый
*

Профиль
Группа: Участник
Сообщений: 126
Регистрация: 6.10.2006

Репутация: нет
Всего: 2

Гадость какая этот MS Jet SQL. 
Убрала DEFAULT и WITH COMP. Теперь работает.
Только я так и не смогла понять как же создаёт таблицы приложение офис акцесс? Я полагаю оно тоже использует SQL в котром  DEFAULT и WITH COMP прокатывает чтоли.  Ничего непойму……………….

Это сообщение отредактировал(а) CLIPSA — 8.11.2006, 17:35

PM MAIL   Вверх
Akina
Дата 8.11.2006, 18:35 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Советчик
****

Профиль
Группа: Модератор
Сообщений: 20567
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 30
Всего: 453

Сам Аксесс работает через коллекцию TableDefs. Вот уж где раздолье для творчества.

———————

 О(б)суждение моих действий — в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция — Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
bopoha
Дата 10.11.2006, 02:33 (ссылка)
| (нет голосов)
Загрузка ... Загрузка …




Быстрая цитата

Цитата

Эксперт
***

Профиль
Группа: Завсегдатай
Сообщений: 1283
Регистрация: 10.5.2006
Где: Беларусь, Минск

Репутация: 21
Всего: 21

На самом деле в Access 2003, если записать так DEFAULT «0», то работает. Именно как строковый тип.

———————

Как создавать приложения на MS Access

PM MAIL WWW ICQ Skype GTalk   Вверх



















Ответ в темуСоздание новой темы
Создание опроса
Правила форума «MS Access»
Akina
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] и [code=sql][/code] для подсветки кода. Используйтe чекбокс «транслит» (возле кнопок кодов) если у Вас нет русских шрифтов.

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 

0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS Access | Следующая тема »
От:

Wind

Россия

 
Дата:  20.04.04 05:43
Оценка:

Использую компилятор VC7. Обращаюсь с помощью ADO (через драйвер ODBC) к SQL Server 2К.Ниже следующий код выдает исключение (мол, не могу выполнить). Исключение выдает
Error Code = 3292
Source = DAO.Database
Description = Ошибка синтаксиса при определении поля.

Такого кода в таблице sysmessage (SQL Server) нет (равно как и такой таблицы) => следовательно это не его ошибка

DAODBEngine* DBeng=NULL;
CDaoDatabase *db=NULL;
AfxDaoInit();
DBeng = AfxDaoGetEngine();
db=new CDaoDatabase();
db->Open(«test»,false,false,»ODBC;PWD=xxx;UID=sa;») ;
if (db->IsOpen())
{
db->Execute(«CREATE TABLE time_fond ( id_time int NOT NULL, time datetime NULL, PRIMARY KEY (id_time))»);
}

Вопрос 1) Почему не выполняется запрос (с правами доступа все ОК, с синтаксисом SQL тоже)
Вопрос 2) Чья эта ошибка и кто вернул мне такой код ошибки (где его посмотреть)
P.S. Аналогичный код, но для MS Access выполняется на ура

От:

Sinclair

Россия

https://github.com/evilguest/
Дата:  20.04.04 06:20
Оценка:

Здравствуйте, Wind, Вы писали:
W>Вопрос 1) Почему не выполняется запрос (с правами доступа все ОК, с синтаксисом SQL тоже)
Хм. Constructing Interoperable SQL Statements? Может быть, дело именно в этом?
W>Вопрос 2) Чья эта ошибка и кто вернул мне такой код ошибки (где его посмотреть)
W>P.S. Аналогичный код, но для MS Access выполняется на ура
Тогда вообче загадка…

… << RSDN@Home 1.1.3 beta 2 >>

Уйдемте отсюда, Румата! У вас слишком богатые погреба.

От:

Elena_

Россия

 
Дата:  20.04.04 07:35
Оценка:

Здравствуйте, Wind, Вы писали:

W>Использую компилятор VC7. Обращаюсь с помощью ADO (через драйвер ODBC) к SQL Server 2К.Ниже следующий код выдает исключение (мол, не могу выполнить). Исключение выдает

W>Error Code = 3292
W>Source = DAO.Database
W>Description = Ошибка синтаксиса при определении поля.
)
W>Вопрос 2) Чья эта ошибка и кто вернул мне такой код ошибки (где его посмотреть)

Ошибка DAO — из документации по DAO 3.6:

Ошибка синтаксиса при определении поля. (Ошибка 3292)
Ошибка синтаксиса при описании поля в инструкции CREATE TABLE или ALTER TABLE.

Возможные причины:

Пропущено или неверно указано зарезервированное слово или имя аргумента.
Неверная пунктуация.

Пользователь — друг программиста!

От: Аноним

 
Дата:  20.04.04 09:35
Оценка:

Здравствуйте, Wind, Вы писали:
W>P.S. Аналогичный код, но для MS Access выполняется на ура

Это, да, это Билл Гейтс ещё как может, если чесно — в чём проблема не знаю,
но у меня была похожая фишка — в SQL запросах из под MS ACCESS прокатывали
* в параметрах в качестве любого знака, а через ODBC приходилось заменять
по стандарту SQL-92 — прочти какие-нибудь старые книги с описанием синтаксиса
CREATE TABLE.

P.S. Вроде ещё ; в конце SQL ставить надо …

От:

Wind

Россия

 
Дата:  20.04.04 14:24
Оценка:

Здравствуйте, Аноним, Вы писали:

А>* в параметрах в качестве любого знака, а через ODBC приходилось заменять

А>по стандарту SQL-92 —
Ну это штука достаточно известная, плюс это формальное нарушение синтаксиса для конкретной СУБД (одна хочет *, другая _). Тут вещь другая, я вначале решил не описывать ситуацию полностью, но раз все в тупике… Итак:

Есть скрипт (написанный мной же) для создания БД на SQL Server (в части схемы данных полность компатибал с Access и FoxPro). Скрипт АБСОЛЮТНО рабочий (запускался из QueryAnalizer). Ни каких вопросов по синтаксису.

Решил автоматизировать его запуск, начал писать эту программу. Хлоп — ошибка (с таблицей — частный случай, базу данных тоже не удалось создать). Процесс отладки опущу, приведу только вывод. В MS Access этот код полностью создает схему данных (от специфичных команд я, разумеется избавился), все правильно и ни каких нареканий. MS SQL — вы уже знаете.

Команды работы с данными SQL Servera выполняются, команды управления схемой данных — нет (команды менеджмента я не пробовал, ибо без схемы данных они не нужны). Вот и всё. Что делать?


А>CREATE TABLE.


А>P.S. Вроде ещё ; в конце SQL ставить надо …

Далеко не ИМХО: это пережиток.

От:

Wind

Россия

 
Дата:  20.04.04 14:26
Оценка:

Здравствуйте, Elena_, Вы писали:

E_>Ошибка DAO — из документации по DAO 3.6:

Ссылочку на документацию не дадите?

E_>Пропущено или неверно указано зарезервированное слово или имя аргумента.

E_>Неверная пунктуация.
см. http://rsdn.ru/Forum/MsgList.aspx?gid=6&amp;start=1&amp;flat=0

От:

Elena_

Россия

 
Дата:  20.04.04 15:19
Оценка:

Здравствуйте, Wind, Вы писали:

W>Ссылочку на документацию не дадите?

Я просто посмотрела в справке по Access, там есть ветка по DAO, в описании объекта Error — Error.Number есть список ошибок.

Я не уверена, что мои соображения на этот счет правильные, но может быть, пригодится:

1) Может быть, ей не нравится слово time, как зарезервированное

2) Я всегда работала с командами DDL SQL Server’а (CREATE TABLE и т.д.) через DAO ODBCDirect, а не через DAO Jet на VB

Раньше обертки MFC для DAO не поддерживали ODBCDirect, см.например, Visual C++ Concepts: Adding Functionality
DAO and MFC

Note MFC now supports DAO 3.5. MFC DAO classes work either with DAO 3.0 or DAO 3.5, but have not been designed to take advantage of any new DAO 3.5 features, including ODBCDirect

Я не уверена, что вообще можно выполнить CREATE TABLE через этот оберточный класс. Может быть, надо подключать DAO напрямую без MFC, или по-моему лучше использовать ADO.

Но очень возможно, что я ошибаюсь, сейчас нет времени проверять.

Пользователь — друг программиста!

От:

Sinclair

Россия

https://github.com/evilguest/
Дата:  20.04.04 17:28
Оценка:

Здравствуйте, Wind, Вы писали:

W>Команды работы с данными SQL Servera выполняются, команды управления схемой данных — нет (команды менеджмента я не пробовал, ибо без схемы данных они не нужны). Вот и всё. Что делать?

У меня единственное подозрение — в сторону ODBC драйвера для SQL. Это, вроде бы, единственное место, через которое может не пролезть команда, успешно выполняемая в Query Analyser. В связи с этим есть доп вопросы:
1. Вообще никакие DDL не проходят? Пример, приведенный в исходном постинге — довольно сложный. Вот такой тоже не пролазит:

create table t1(id int)

?
2. Что показывает профайлер? Доезжает ли команда до сервера? И если доезжает, то в каком виде?

… << RSDN@Home 1.1.3 beta 2 >>

Уйдемте отсюда, Румата! У вас слишком богатые погреба.

От:

Elena_

Россия

 
Дата:  20.04.04 21:41
Оценка:

Здравствуйте, Elena_, Вы писали:

E_>Я не уверена, что вообще можно выполнить CREATE TABLE через этот оберточный класс. Может быть, надо подключать DAO напрямую без MFC, или по-моему лучше использовать ADO.


E_>Но очень возможно, что я ошибаюсь, сейчас нет времени проверять.

Я еще посмотрела, из описания CREATE TABLE для JET:

Note The Microsoft Jet database engine doesn’t support the use of CREATE TABLE, or any of the DDL statements, with non-Microsoft Jet database engine databases. Use the DAO Create methods instead.

Если я не ошибаюсь в терминологии, то «Microsoft Jet engine databases» — это mdb файлы, а SQL server к ним не относится, судя по следующей цитате. Хотя я нигде не нашла четкого определения, что такое «Microsoft Jet engine databases».

Note For better performance when accessing external databases, including ISAM databases and ODBC data sources, it is recommended that you attach external database tables to a Microsoft Jet engine database (.MDB) rather than connecting directly to the data source.

Пользователь — друг программиста!

От:

Wind

Россия

 
Дата:  22.04.04 07:18
Оценка:

Здравствуйте, Elena_, Вы писали:

E_>>Я не уверена, что вообще можно выполнить CREATE TABLE через этот оберточный класс. Может быть, надо подключать DAO напрямую без MFC, или по-моему лучше использовать ADO.

Ладно, покажу свою безграматность. Чем отличаются DAO и ADO? Как можно подключить DAO без MFC обертки?

E_>Note For better performance when accessing external databases, including ISAM databases and ODBC data sources, it is recommended that you attach external database tables to a Microsoft Jet engine database (.MDB) rather than connecting directly to the data source.

E_>[/q]
Пусть я буду безграмотным до конца. Что такое ISAM?

От:

Wind

Россия

 
Дата:  22.04.04 07:34
Оценка:

Здравствуйте, Sinclair, Вы писали:

S>1. Вообще никакие DDL не проходят? Пример, приведенный в исходном постинге — довольно сложный.

Что такое DDL?
Ни какие команды по управлению(созданию и пр.) схемой данных не проходят. Все команды работы с данными проходят.

S>2. Что показывает профайлер? Доезжает ли команда до сервера? И если доезжает, то в каком виде?

Команды управления не доходят до Сервера. Ни в каком виде.

Еще один интересный момент. Если открывать access через ODBC (весь код тотже, но вместо пути до файла указать его DSN), то команды, также не пролазят, правда код ошибки другой:

Error Code = 3423
Source = DAO.Workspace
Description = Не допускается использование ODBC для импорта, экспорта или присоединения таблицы из внешней базы данных Microsoft Jet или базы данных ISAM.

Вот такое дао для DAO… Простите за каламбур.

Вопрос: какой механизм обращения к БД мне лучше использовать, чтобы избежать таких глюков (вернее не глюков а несовместимостей)? Два условия: 1) Компилятор VC7 2) На машину не должны устанавливатся какие-нибудь специальные пакеты. Только Windows + SP к нему + SQL Server.

От:

Elena_

Россия

 
Дата:  22.04.04 10:10
Оценка:

Здравствуйте, Wind, Вы писали:

W>Чем отличаются DAO и ADO? Как можно подключить DAO без MFC обертки?

W>Что такое ISAM?

Собственно и DAO и ADO это компоненты для работы с базами данных — DAO расшифровывается как Data Access Objects, а ADO как ActiveX Data Objects. Если Вы сделаете поиск в MSDN по любому из этих сокращений или по обоим, то получите кучу всего. Например:

Porting DAO Code to ADO with the Microsoft Jet Provider
Migrating from DAO to ADO Using ADO with the Microsoft Jet Provider
WP: Migrating DAO/ODBCDirect to ADO To Use MSDE

DAO — более старая технология, кажется, после 3.6 ее и не обещают развивать. У нее доволько узкий круг применения —
1) собственно mdb — то, что они называют Microsoft Jet engine database, хотя я не нашла четкого определения
2) через драйверы ISAM: у меня такой список, может быть, он устарел

Microsoft Fox Pro 2.0б 2.5б 2.6ь 3.0 (только для чтения) и DBC
dBASE III, dBASE IV, dBASE 5.0
Paradox 3.x, 4.x, 5.x
Рабочие листы Microsoft Excel 3.0, 4.0, 5.0, 7.0, 8.0
Microsoft Exchange и Outlook
Электронные таблицы Lotus 1-2-3 WK1, WK3, WKS
Таблицы в текстовых файлах с разделителями или колонками фиксированной ширины
Таблицы в файлах на языке гипертекстовой разметки HTML

Я лично с ISAM драйверами совсем не работала, по-моему это все устарело и сейчас не используется.

3) Источники данных ODBC — как раз Microsoft SQL Server и вообще все что угодно через ODBC, например Btrieve или Oracle

ADO — появилась после DAO, продолжает развиваться, и имеет гораздо более широкую область применения. Если есть OLE DB провайдер, то можно работать через ADO.

Welcome to ADO
Microsoft® ActiveX® Data Objects (ADO) enable your client applications to access and manipulate data from a database server through an OLE DB provider.

Использовать DAO можно через Microsoft JET или через ODBCDirect. Если Вы при создании DAO.Workspace указываете dbUseODBC, то напрямую обращаетесь к ODBC источнику, соответственно при работе с SQL server через ODBCDirect Вы просто выполняете команды T-SQL, в частности CREATE TABLE и вообще любые DDL. Если Workspace имеет тип dbUseJet, так по умолчанию (там в DBEngine есть DefaultType), то все DAO операции идут через Jet, в частности и CREATE TABLE — это не CREATE TABLE T-SQL, а CREATE TABLE для Jet SQL, а для нее имеется ограничение, о котором я говорила — только для mdb (если я правильно поняла документацию), соответственно Вы не можете через DAO без ODBCDirect выполнить CREATE TABLE и другие DDL. Вроде бы в этом случае они предлагают использовать методы DAO CreateTableDef, CreateQueryDef и т.п., я не пробовала.

А обертка MFC не включала эту возможность, там просто нет параметра, чтобы поменять тип Workspace, поэтому через оберточный класс CDAOWorkspace не получить ODBCDirect.

Я сама никогда не подключала DAO напрямую из C++, только через MFC обертку, из VB идет просто доступ к объектам и там нет проблем установить ODBCDirect, но думаю, что можно через #import или CoCreateInstance, потом GetIDsOfNames и Invoke, или любым другим способом, как компоненты подключаются.

Вообще говоря, если Вы начинаете задачу, наверное, лучше ориентироваться на ADO. Иногда при работе с Access действительно может пригодиться DAO, но это скорее уже личный выбор. При работе с SQL server однозначно лучше использовать ADO, DAO c ODBCDirect — худший выбор (собственно это появилось, когда ADO по-моему еще не было), а DAO Jet вообще по-моему не имеет смысл использовать для SQL Server’а.

Конечно, лучше если Вы посмотрите MSDN, так как я могу и наврать в теории, на практике у меня вот такие выводы.

Пользователь — друг программиста!

Подождите ...

Wait...

  • Переместить
  • Удалить
  • Выделить ветку

Пока на собственное сообщение не было ответов, его можно удалить.

Понравилась статья? Поделить с друзьями:

Это тоже интересно:

  • Ошейник инспектор для кошек инструкция
  • Ошибка синтаксиса в инструкции transform access
  • Очки виртуальной реальности для смартфона инструкция
  • Ошибка синтаксиса в инструкции insert into
  • Очки вижн с дырочками инструкция по применению

  • Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии