Пропущен символ в конце инструкции sql access


Запрос на добавление нескольких записей в Access

От:

_Anastasia

 
Дата:  15.08.07 12:39
Оценка:

Здравствуйте!
Мне нужно добавить несколько записей в таблицу Access. Использую следующий запрос:

INSERT INTO ARHIVCHECK( [CHECKNUM], [DATECHECK], [WAREHOUSE], [CODEGOOD], [OKEY], [QUANTITY], [SUMMA], [SUMDISC], [KINDPAY], [KINDCHECK]  ) VALUES  
('47', '15.08.2007 15:32:36', 'Торговый зал', '00032', 'пара', '1.000000', '2109.000000', '0.000000', 'Наличная оплата', 'продажа'), 
('47', '15.08.2007 15:32:36', 'Торговый зал', '00018', 'пара', '1.000000', '1687.000000', '0.000000', 'Наличная оплата', 'продажа');

Но возникает исключение «Пропущен символ ( в конце инструкции SQL.».
Как это исправить? Какой должен быть запрос, чтобы добавить несколько записей?


Re: Запрос на добавление нескольких записей в Access

От:

MasterZiv

СССР

 
Дата:  15.08.07 14:10
Оценка:

> Мне нужно добавить несколько записей в таблицу Access. Использую

Напиши два запроса и выполни их подряд поочереди.
Разницы никакой нет.

Posted via RSDN NNTP Server 2.1 beta


Re: Запрос на добавление нескольких записей в Access

От:

.

Великобритания

 
Дата:  15.08.07 17:01
Оценка:

_Anastasia wrote:

> ‘продажа’),

Если я правильно помню, то запятая не нужна.

Posted via RSDN NNTP Server 2.1 beta

но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай


Re: Запрос на добавление нескольких записей в Access

От:

ZAMUNDA

Земля

для жалоб и предложений
Дата:  15.08.07 21:12
Оценка:

2 (1)

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

_A>Здравствуйте!

_A>Мне нужно добавить несколько записей в таблицу Access. Использую следующий запрос:
*Тег [sql], а не [code].

INSERT INTO ARHIVCHECK( [CHECKNUM], [DATECHECK], [WAREHOUSE], [CODEGOOD], [OKEY], [QUANTITY], [SUMMA], [SUMDISC], [KINDPAY], [KINDCHECK]  ) VALUES  
('47', '15.08.2007 15:32:36', 'Торговый зал', '00032', 'пара', '1.000000', '2109.000000', '0.000000', 'Наличная оплата', 'продажа')
, -- << Вот тут должна быть точка с запятой. 
-- А того, что внизу, быть не должно!
('47', '15.08.2007 15:32:36', 'Торговый зал', '00018', 'пара', '1.000000', '1687.000000', '0.000000', 'Наличная оплата', 'продажа');

Это ж «Single-record append query» там только одну запись добавить можно.

_A>Как это исправить? Какой должен быть запрос, чтобы добавить несколько записей?

1. Надо сделать таблицу с одним полем, я её называю обычно «blanc».

CREATE TABLE blanc (ValueMy Integer NOT NULL);

и добавить в неё одну запись (с любым значением)

INSERT INTO  blanc (ValueMy) VALUES (0);

2. Используй UNION в подзапросе для вставки данных запросом типа «INSERT ZZZ(…) SELECT … FROM XXX».

INSERT INTO ARHIVCHECK( [CHECKNUM], [DATECHECK], [WAREHOUSE]) 
SELECT [CHECKNUM], [DATECHECK], [WAREHOUSE] -- млин, я не писатель вам тут. Непомню можно-ли тут * поставить.
FROM (
SELECT '47' AS [CHECKNUM], DateSerial(2007, 15 ,08) + TimeSerial(15, 32, 36) AS [DATECHECK], 'Торговый зал' AS [WAREHOUSE] FROM blanc
UNION
SELECT '47' AS [CHECKNUM], DateSerial(2007, 15 ,08) + TimeSerial(15, 32, 36), 'Торговый зал' AS [WAREHOUSE] FROM blanc
) AS InsertedTbl;

Наука изощряет ум; ученье вострит память.
(c) Козьма Прутков


Re: Запрос на добавление нескольких записей в Access

От:

_d_m_

 
Дата:  15.08.07 23:18
Оценка:

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

_A>Здравствуйте!

_A>Мне нужно добавить несколько записей в таблицу Access. Использую следующий запрос:
_A>

_A>INSERT INTO ARHIVCHECK( [CHECKNUM], [DATECHECK], [WAREHOUSE], [CODEGOOD], [OKEY], [QUANTITY], [SUMMA], [SUMDISC], [KINDPAY], [KINDCHECK]  ) VALUES  
_A>('47', '15.08.2007 15:32:36', 'Торговый зал', '00032', 'пара', '1.000000', '2109.000000', '0.000000', 'Наличная оплата', 'продажа'), 
_A>('47', '15.08.2007 15:32:36', 'Торговый зал', '00018', 'пара', '1.000000', '1687.000000', '0.000000', 'Наличная оплата', 'продажа'); 
_A>


_A>Но возникает исключение «Пропущен символ ( в конце инструкции SQL.».
_A>Как это исправить? Какой должен быть запрос, чтобы добавить несколько записей?

Значит Акцес не поддерживает такой синтаксис. Можно попробовать (а Акцесе не спец) воспользоваться таким пакетом:

begin tran;

insert
    ARHIVCHECK(...)
values
    ('47' AS [CHECKNUM], DateSerial(2007, 15 ,08) ...)
;
insert
    ARHIVCHECK(...)
values
    ('47' AS [CHECKNUM], DateSerial(2007, 15 ,08) ...)
;
...

commit;

Операторы insert выполняются в контексте одной транзакции — это важно. Иначе, каждый оператор insert выполняется в своей отдельной транзакции, что сильно замедляет выполнение пакета.


Re[2]: Запрос на добавление нескольких записей в Access

От:

_d_m_

 
Дата:  15.08.07 23:19
Оценка:

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

ZAM>2. Используй UNION в подзапросе для вставки данных запросом типа «INSERT ZZZ(…) SELECT … FROM XXX».

ZAM>

ZAM>INSERT INTO ARHIVCHECK( [CHECKNUM], [DATECHECK], [WAREHOUSE]) 
ZAM>SELECT [CHECKNUM], [DATECHECK], [WAREHOUSE] -- млин, я не писатель вам тут. Непомню можно-ли тут * поставить.
ZAM>FROM (
ZAM>SELECT '47' AS [CHECKNUM], DateSerial(2007, 15 ,08) + TimeSerial(15, 32, 36) AS [DATECHECK], 'Торговый зал' AS [WAREHOUSE] FROM blanc
ZAM>UNION
ZAM>SELECT '47' AS [CHECKNUM], DateSerial(2007, 15 ,08) + TimeSerial(15, 32, 36), 'Торговый зал' AS [WAREHOUSE] FROM blanc
ZAM>) AS InsertedTbl;
ZAM>

Я не знаю как в Акцесе, но в MS SQL предложение FROM необязательно, соответсвенно нет необходимости в таблице [blanc]:

insert
    ARHIVCHECK(...)
select
    '47' AS [CHECKNUM], DateSerial(2007, 15 ,08) ...
union all
select
    '47' AS [CHECKNUM], DateSerial(2007, 15 ,08) ...
;


Re[3]: Запрос на добавление нескольких записей в Access

От:

ZAMUNDA

Земля

для жалоб и предложений
Дата:  16.08.07 07:02
Оценка:

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

___>Я не знаю как в Акцесе, но в MS SQL предложение FROM необязательно, соответсвенно нет необходимости в таблице [blanc]:

МАМАЙ КЛИНУС, ДАРАГОЙ, в MSSQL ЙА БЭЗ Blanс ВИСЁ ДЭЛАЙУ! :-)
Ну мож ещё MSFOX вспомним? Так там ащще мона в массив записать всё и APPEND сделать.
А в Access обязательно указание таблицы, и если в таблице нет записей, то в «SELECT {const} AS Somth FROM blank» набор будет пустым — вот такая ботва.

PS: Транзакций Access’овском SQL тож нет (да вроде и ADO.Connection.BeginTransaction и т.д тож не сработают если к Access подключено).
PPS: Кстати правильно «Blank», опечатался я…

Наука изощряет ум; ученье вострит память.
(c) Козьма Прутков


Re[4]: Запрос на добавление нескольких записей в Access

От:

_d_m_

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

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

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


___>>Я не знаю как в Акцесе, но в MS SQL предложение FROM необязательно, соответсвенно нет необходимости в таблице [blanc]:

ZAM>МАМАЙ КЛИНУС, ДАРАГОЙ, в MSSQL ЙА БЭЗ Blanс ВИСЁ ДЭЛАЙУ!

А что у Мамая был КЛИНУС??? http://rsdn.org/forum/images/anvaka/shok.gif На ум приходит только… гхм-гхм http://rsdn.org/forum/images/anvaka/squirm.gif… клитор и анус


Re[2]: Запрос на добавление нескольких записей в Access

От:

_Anastasia

 
Дата:  16.08.07 12:10
Оценка:

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

ZAM>1. Надо сделать таблицу с одним полем, я её называю обычно «blanc».

ZAM>

ZAM>CREATE TABLE blanc (ValueMy Integer NOT NULL);
ZAM>

и добавить в неё одну запись (с любым значением)

ZAM>INSERT INTO  blanc (ValueMy) VALUES (0);
ZAM>



ZAM>2. Используй UNION в подзапросе для вставки данных запросом типа «INSERT ZZZ(…) SELECT … FROM XXX».

ZAM>

ZAM>INSERT INTO ARHIVCHECK( [CHECKNUM], [DATECHECK], [WAREHOUSE]) 
ZAM>SELECT [CHECKNUM], [DATECHECK], [WAREHOUSE] -- млин, я не писатель вам тут. Непомню можно-ли тут * поставить.
ZAM>FROM (
ZAM>SELECT '47' AS [CHECKNUM], DateSerial(2007, 15 ,08) + TimeSerial(15, 32, 36) AS [DATECHECK], 'Торговый зал' AS [WAREHOUSE] FROM blanc
ZAM>UNION
ZAM>SELECT '47' AS [CHECKNUM], DateSerial(2007, 15 ,08) + TimeSerial(15, 32, 36), 'Торговый зал' AS [WAREHOUSE] FROM blanc
ZAM>) AS InsertedTbl;
ZAM>

Спасибо большое…Все заработало…
Только неудобно немного получается: надо создавать лишнюю таблицу, делать к ней пустое обращение. Но, наверное, сама база так сделана.
А транзакций в Аксесе действительно нет.


Re[5]: Запрос на добавление нескольких записей в Access

От:

ZAMUNDA

Земля

для жалоб и предложений
Дата:  16.08.07 12:13
Оценка:

:)

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

ZAM>>МАМАЙ КЛИНУС, ДАРАГОЙ, в MSSQL ЙА БЭЗ Blanс ВИСЁ ДЭЛАЙУ! :-)

___>А что у Мамая был КЛИНУС??? http://rsdn.org/forum/images/anvaka/shok.gif На ум приходит только… гхм-гхм http://rsdn.org/forum/images/anvaka/squirm.gif… клитор и анус
Клинус — это ж знаменитый советник Мамая по хозяйственным делам.

Клинус

Знаменитый звездочёт и бухгалтер Клинус, был другом детства Мамая, но судьба разделила их в юношестве — Мамай поехал учиться военному делу в южные районы Крыма, а Клинус пешком пошёл по берегу моря на запад в Магрибские земли, изучать науки и чародейство. Однако, дружба с воинственным Мамаем оставила свой след, наряду с талантом к наукам, юный Клинус проявлял недюжую ловкость и силу. Некоторые источники сообщают, что именно он стал прототипом Гендальфа из Толкиенистского «Властелина колец».
Окончив обучение в 1360 году, Клинус придумал трусцу и ею отправился обратно в крымское ханство, чтоб найти себе женщину и старого друга Мамика (так он звал Мамая). Через пять лет судьба послала Клинусу окончание пути, а Мамаю власть, чтобы напрячь людей на поиски старого друга Клиныша (он так называл Клинуса). Ещё через год судьба и арабский скакун, чьё имя история умалчивает, обеспечили встречу старых друзей.
Просохнув через месяц и узнав что Клинус неплохо знает математику, Мамай определил старого друга на работу. Клинус быстро втянулся в загадочный мир подсчёта съеденного, лошадьми из канюшен Мамая , овса и наложенного ими же навоза. Однако настоящую революцию он совершил в деле подсчёта необходимого количества людей и лошадей перед первым походом Мамая на русские земли. Это он заложил основы реляционных баз данных, придумав связывать одного солдата и одной или нескольими лошадьми, клинок с одним живым или мёртвым воином и Мамая со множеством сундуков золота.
Умер Клинус в безвестии от удара шальной подковой по темечку, во время куликовской битвы в 1380 г. К сожалению, стан Клинуса был разорён русскими богатырями, которые и использовали по нужде весь папирус с трудами Клинуса.

Вот так-то!!! Историю учить надо, а не всякую фигню писать.

Наука изощряет ум; ученье вострит память.
(c) Козьма Прутков


Re[3]: Запрос на добавление нескольких записей в Access

От:

ZAMUNDA

Земля

для жалоб и предложений
Дата:  16.08.07 13:01
Оценка:

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

__A>Спасибо большое…Все заработало…:)

Пожалуйста. Канешно заработало, я такой финт ушами давно использую.

_A>Только неудобно немного получается: надо создавать лишнюю таблицу, делать к ней пустое обращение.

Неудобно ёжиков рожать! ;-) Удобным должно быть сопровождение, тестирование и (в идеале) рефакторинг — а не написание программы.
Хотите «удобно» — переходите на MS SQL Server Express.

_A>А транзакций в Аксесе действительно нет.

Ну значит и правда нет. Значит память у меня ещё есть… :)

Наука изощряет ум; ученье вострит память.
(c) Козьма Прутков


Re[4]: Запрос на добавление нескольких записей в Access

От:

Igor.K

США

 
Дата:  16.08.07 16:09
Оценка:

_A>>А транзакций в Аксесе действительно нет.
ZAM>Ну значит и правда нет. Значит память у меня ещё есть…
Транзакции в MS Access действительно есть, только в языке Jet SQL они никак не представлены.
А используются они, примерно, так:


On Error GoTo errorTransaction

Dim myWrk As DAO.Workspace, myDbs As DAO.DATABASE

Set myWrk = DBEngine.Workspaces(0)
Set myDbs = CurrentDb

myWrk.BeginTrans

myDbs.Execute "UPDATE ...", dbFailOnError
myDbs.Execute "INSERT ...", dbFailOnError
myDbs.Execute "DELETE ...", dbFailOnError

myWrk.CommitTrans

exitTransaction:

myDbs.Close
myWrk.Close

Exit Sub

errorTransaction:

myWrk.Rollback

MsgBox "Transaction was not completed successfully", vbCritical, "Problem with batch run"
goto exitTransaction

end sub

«СССР — четыре слова и все лживые» — Вагрич Бахчанян


Re[5]: Запрос на добавление нескольких записей в Access

От:

Бенедикт

 
Дата:  17.08.07 07:21
Оценка:

_A>>>А транзакций в Аксесе действительно нет.
ZAM>>Ну значит и правда нет. Значит память у меня ещё есть… :)
IK>Транзакции в MS Access действительно есть, только в языке Jet SQL они никак не представлены.

Справка по языку Microsoft Jet SQL

Инструкция TRANSACTION
Используется для запуска и завершения явных транзакций.

Синтаксис
Запускает новую транзакцию.

BEGIN TRANSACTION

Заканчивает транзакцию путем завершения всей работы, выполненной в ходе транзакции.

COMMIT [TRANSACTION | WORK]

Заканчивает транзакцию путем свертывания всей работы, выполненной в ходе транзакции.

ROLLBACK [TRANSACTION | WORK]

Дополнительные сведения
Автоматический запуск транзакции невозможен. Чтобы начать транзакцию, ее необходимо явно запустить с помощью инструкции BEGIN TRANSACTION.

Допускается пять уровней вложения транзакций. Чтобы запустить вложенную транзакцию, воспользуйтесь инструкцией BEGIN TRANSACTION в контексте существующей транзакции.

Для присоединенных или связанных таблиц транзакции не поддерживаются.


Re[6]: Запрос на добавление нескольких записей в Access

От:

Igor.K

США

 
Дата:  19.08.07 05:36
Оценка:

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

_A>>>>А транзакций в Аксесе действительно нет.

ZAM>>>Ну значит и правда нет. Значит память у меня ещё есть…
IK>>Транзакции в MS Access действительно есть, только в языке Jet SQL они никак не представлены.

Б>Справка по языку Microsoft Jet SQL[q]Инструкция TRANSACTION

Б>Используется для запуска и завершения явных транзакций.
Ты смотри, действительно появились. Просто по MS Office 97 я их действительно не помню.

… << RSDN@Home 1.2.0 alpha rev. 653>>

«СССР — четыре слова и все лживые» — Вагрич Бахчанян

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

Wait...

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

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

Code with amendments per above comments to make it Access friendly & remove typos:

INSERT INTO test ( ProcessID, Name, Address, RandomData)
VALUES (123 , 'TestName', 'TestAdd', 'qwrj3ri');

INSERT INTO test ( ProcessID, Name, Address, RandomData)
VALUES (456 , 'TestName2', 'TestAdd', 'qwerty');    

INSERT INTO test ( ProcessID, Name, Address, RandomData)
VALUES (789 , 'TestName', 'TestAdd', 'qwrj3ri'); 

INSERT INTO test ( ProcessID, Name, Address, RandomData)
VALUES (1234, 'Testing123', 'tester', 'asdfghjk');   

Useful reference: https://msdn.microsoft.com/en-us/library/bb243852(v=office.12).aspx

Specific comments:

@Damien_The_Unbeliever:

I don’t think access supports multiple rows in the values.

Amended to include an insert into per row instead of a value set per row (values (...), (...)).

@Thomas Tschernich:

our missing single quote next to the end of your insert

Changed 'tester', sdfg') to 'tester', 'sdfg');

@JohnLBevan:

superfluous character on end of first set of values

Changed 'qwrj3ri'), T to 'qwrj3ri'),

 
ed
 
(2002-01-21 08:39)
[0]

Есть проблема:

В Дельфи при использовании компонента TADODataSet:

1) Два и более запроса не выполняются.

2) Создаю временную таблицу и после ее создания, она тут же удаляется

В BDE — наоборот (проблем нет)

Скажите пожалуйста, как выйти из ситуации?


 
KSergey
 
(2002-01-21 09:37)
[1]

Ничего не понятно

Что значит не выполняется два запроса? Код.

Какую именно временную таблицу? К стати, какая БД используется? Кокой вы вообще хотели получить ответ без этого уточнения?!


 
Steel Ice
 
(2002-01-21 10:19)
[2]

Вообще ADOшные компоненты — глюкота.

Например попробуй сделать в ADOQuery выборку из базы, в которой нету записей — орет как укушенная. Еще какая-то у них мутная процедура Close у этих компонент. Если при закрытии курсор стоит на последней строчке таблицы, при выполнении Close частенько выдает EOF ошибку.

А удалить или изменить строчку в ADOTable? Кошмар.

Единственная возможноть нормально работать с АДО, делаешь ADOConnection, и через него ADOCommandom выполняешь любые запросы. Результаты возвращаются в Excute:_Recordset.

И таблицы, когда я их через АДОКомманд создавал — не пропадали.

И работает шустренько.


 
Fay-1
 
(2002-01-22 01:19)
[3]

to Steel Ice :

Поставь апдейты для делфей

у меня всё живёт


 
ed
 
(2002-01-24 07:07)
[4]

База — MS SQL Server 7 (и выше)

Два запроса = две инструкции

например, код:

delete table1

insert …

выполняет только первую инструкцию

или

в ADOCommand создаю временную таблицу (select…into #tmptable)

а после делаю апдейт, например, из другого ADOCommand или этого же компонента, поменяв CommandText. Он мне говорит, что нет такой, проверяю — действительно нет. А в ADOConnection один и тот же (вообще один) и в документашке по MS SQL говорится что докальная временная таблица сохраняется пока сессия не закроется.

Можно запрос через сам ADOConnection послать на создание, тогда все работает, но вот беда : он не поддерживает параметры…, а нужны!


 
Delirium
 
(2002-01-24 12:44)
[5]

Просто надо пользовать полноценные компоненты — TADOQuery, например, тогда и глюков не будет, и какие угодно команды проходить будут.


 
ed
 
(2002-01-25 07:04)
[6]

А вот и нифига подобного. Во-первых, в хелпе написано, что никакой разницы нет между TADOQuery и TADODataSet. Во-вторых,

я на всякий случай попробовал использовать query, но результат оказался тем же самым. В этот раз я пробовал на базе mdb (acceess). Вот код

SQL:

INSERT INTO table1 (id, Name) Values (0, «Name0»)

DELETE FROM table1 where id = 0

после ExecSQL ошибка: «Пропущен символ (;) в конце инструкции SQL»

Тогда ставлю в конце инструкции точку с запятой:

INSERT INTO table1 (id, Name) Values (0, «Name0»);

DELETE FROM table1 where id = 0

В этом случае другая ошибка: «Обнаружены символы за пределами инструкции SQL»

БЛИН!


 
Delirium
 
(2002-01-25 12:21)
[7]

Мы-же по MSSQL вроде говорили, а кто тебе сказал что ACCESS позволяет несколько инструкций подряд исполнять? Ты бы в самом ACCESS сначала попробывал бы, а потом уже на ADO наезжал :)


 
Delirium
 
(2002-01-25 15:08)
[8]

И вообще для команд, не возвращающих информацию, существует TADOCommand, а TADOQuery естественно ругаться будет «CommandText does not return a result set»


Код с поправками на приведенные выше комментарии, чтобы сделать его доступным и удаленным опечатками:

INSERT INTO test ( ProcessID, Name, Address, RandomData)
VALUES (123 , 'TestName', 'TestAdd', 'qwrj3ri');

INSERT INTO test ( ProcessID, Name, Address, RandomData)
VALUES (456 , 'TestName2', 'TestAdd', 'qwerty');

INSERT INTO test ( ProcessID, Name, Address, RandomData)
VALUES (789 , 'TestName', 'TestAdd', 'qwrj3ri');

INSERT INTO test ( ProcessID, Name, Address, RandomData)
VALUES (1234, 'Testing123', 'tester', 'asdfghjk');

Полезная ссылка: https://msdn.microsoft.com/en-us/library/bb243852(v=office.12).aspx

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

@Damien_The_Unbeliever:

Я не думаю, что доступ поддерживает несколько строк в значениях.

Изменено, чтобы включить insert into каждую строку вместо значения, заданного для строки (values (...), (...)).

@Томас Чернич:

наша пропущенная одиночная цитата рядом с концом вашей вставки

Изменен 'tester', sdfg') на 'tester', 'sdfg');

@JohnLBevan:

избыточный символ в конце первого набора значений

Изменено 'qwrj3ri'), T to 'qwrj3ri'),

Понравилась статья? Поделить с друзьями:
  • Пропуск через смс 7377 инструкция
  • Пропуск по смс москва 7377 инструкция
  • Пропульс фунгицид инструкция по применению цена
  • Пропротен капли от алкоголизма инструкция по применению взрослым
  • Пропротен инструкция по применению и для чего он