Запрос на добавление нескольких записей в 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с ВИСЁ ДЭЛАЙУ!
А что у Мамая был КЛИНУС??? На ум приходит только… гхм-гхм … клитор и анус
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с ВИСЁ ДЭЛАЙУ!
___>А что у Мамая был КЛИНУС??? На ум приходит только… гхм-гхм … клитор и анус
Клинус — это ж знаменитый советник Мамая по хозяйственным делам.
Клинус
Знаменитый звездочёт и бухгалтер Клинус, был другом детства Мамая, но судьба разделила их в юношестве — Мамай поехал учиться военному делу в южные районы Крыма, а Клинус пешком пошёл по берегу моря на запад в Магрибские земли, изучать науки и чародейство. Однако, дружба с воинственным Мамаем оставила свой след, наряду с талантом к наукам, юный Клинус проявлял недюжую ловкость и силу. Некоторые источники сообщают, что именно он стал прототипом Гендальфа из Толкиенистского «Властелина колец».
Окончив обучение в 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>>
«СССР — четыре слова и все лживые» — Вагрич Бахчанян
- Переместить
- Удалить
- Выделить ветку
Пока на собственное сообщение не было ответов, его можно удалить.
Python и OpenCV для распознавания и обнаружения лиц
AI_Generated 24.05.2025
Python — язык, заслуживший любовь миллионов разработчиков своей простотой и выразительностью, а OpenCV (Open Source Computer Vision Library) — библиотека компьютерного зрения с открытым исходным. . .
Брокер NATS в C#
UnmanagedCoder 24.05.2025
NATS (Neural Autonomic Transport System) — это легковесная система обмена сообщениями, которая отлично вписывается в мир современных распределённых приложений. Если вы когда-нибудь пытались построить. . .
Оптимизация производительности Express.js бэкенда
Reangularity 23.05.2025
Express. js заслуженно остаётся одним из самых популярных инструментов для создания бэкенда, но даже он не застрахован от проблем с производительностью. Многие разработчики сталкиваются с ситуацией,. . .
Продвинутая обработка данных с LINQ в C#
stackOverflow 23.05.2025
LINQ (Language Integrated Query) — это фундаментальное изменение парадигмы работы с данными в C#. Простые запросы Where и Select знакомы любому разработчику, но настоящая мощь LINQ раскрывается в. . .
Инфраструктура PKI и сертификатов безопасности
Mr. Docker 23.05.2025
PKI (Public Key Infrastructure) — это невидимый фундамент цифрового доверия, без которого современный интернет просто рассыпался бы как карточный домик. За этой аббревиатурой скрывается целый. . .
Аутентификация OAuth в Python
py-thonny 22.05.2025
OAuth (Open Authorization) — это целый стандарт для делегированного доступа. Звучит занудно? Давайте проще: OAuth позволяет приложениям получать доступ к информации пользователя на сторонних сервисах. . .
Хеширование и соль паролей в веб-приложениях C#
stackOverflow 22.05.2025
Когда-то в начале своей карьеры я тоже грешил простейшими подходами к хранению паролей – MD5-хеширование казалось верхом защиты. Но технологии не стоят на месте, вычислительные мощьности растут, и. . .
Генераторы Python для эффективной обработки данных
AI_Generated 21.05.2025
В Python существует инструмент настолько мощный и в то же время недооценённый, что я часто сравниваю его с тайным оружием в арсенале программиста. Речь идёт о генераторах — одной из самых элегантных. . .
Чем заменить Swagger в .NET WebAPI
stackOverflow 21.05.2025
Если вы создавали Web API на . NET в последние несколько лет, то наверняка сталкивались с зелёным интерфейсом Swagger UI. Этот инструмент стал практически стандартом для документирования и. . .
Использование Linq2Db в проектах C# .NET
UnmanagedCoder 21.05.2025
Среди множества претендентов на корону «идеального ORM» особое место занимает Linq2Db — микро-ORM, балансирующий между мощью полноценных инструментов и легковесностью ручного написания SQL.
Что. . .
0
a_ivanov
08.09.08
✎
18:25
Народ кто записывал данные в DBF через ADO посредством многострочного запроса? Пишет ошибку «Пропущен символ (;) в конце инструкции SQL.»Ставлю точку с запятой пишет другую ошибку: «Ошибочная инструкция SQL; предполагалось ‘DELETE’, ‘INSERT’, ‘PROCEDURE’, ‘SELECT’ или ‘UPDATE'»
Текст запроса такой:
Insert into cashTax Values(‘2’, ‘1’, ‘1’, ‘1423’, ‘1’, ‘1’, ‘1’, ’18’, ’18 %’, ‘1,53’, ‘1,53’)
Insert into cashSail Values(‘2’, ‘1’, ‘1’, ‘1423’, ‘1’, ‘05.09.2008’, ‘1608’, ’14’, ‘NOSIZE’, ’10’, ‘1’, ’10’, ’10’, ’10’, ‘0’, ‘1’, ‘1’, ‘1’, ‘1’, ‘0’, ‘0’, ‘0’)
По одной строке все нормально записывает
1
Rebelx
08.09.08
✎
19:17
попробуй:
BEGIN
Запрос1;
Запрос2;
END
(так оракл понимает)
2
smaharbA
09.09.08
✎
06:34
пеши в одну строку и с ;
(и че у тебя в таблице, все чары ? )
3
a_ivanov
09.09.08
✎
10:33
Не так тоже не работает. На sql.ru говорят вообще так не получиться :-(((
4
smaharbA
09.09.08
✎
12:33
(3) получится
Insert into cashTax Values(‘2’, ‘1’, ‘1’, ‘1423’, ‘1’, ‘1’, ‘1’, ’18’, ’18 %’, ‘1,53’, ‘1,53’);Insert into cashSail Values(‘2’, ‘1’, ‘1’, ‘1423’, ‘1’, ‘05.09.2008’, ‘1608’, ’14’, ‘NOSIZE’, ’10’, ‘1’, ’10’, ’10’, ’10’, ‘0’, ‘1’, ‘1’, ‘1’, ‘1’, ‘0’, ‘0’, ‘0’);
Вот к примеру, работает и не жужит
cmd="SET DATEFORMAT YMD;INSERT INTO [" & BaseSQL & "].[dbo].[" & TableSQL & "] ([DATELOG],[SERVICE],[USER],[METH],[SOUR],[PORTS],[DEST],[PORTD],[BYTEIN],[BYTEOUT],[BYTEALL],[CODE]) VALUES (CAST('" & datelog & "' AS DATETIME),'" & service & "','" & user & "','" & meth & "','" & sour & "'," & ports & ",'" & dest & "'," & portd & "," & bytein & "," & byteout & "," & byteall & ",'" & code & "');"
call rs.Open(cmd,con,3,1,1)
Здравствуйте! Помогите пожалуйста разобраться, где ошибка…..
Выдает ошибку, что пропущена точка с запятой в конце конструкции SQL…однако на точку с запятой выдает, что обнаружены символы за пределами инструкции SQL…
procedure TForm4.Button1Click(Sender: TObject);
Var
p1,p2,p3:string;
begin
DataModule2.ADOConnection1.BeginTrans;
try
p1:=Edit1.Text;
p2:=Edit2.Text;
p3:=Edit3.Text;
with DataModule2.ADOQuery1 do
Begin
Close;
SQL.Clear;
SQL.Add(‘insert into uch (raz,dva,tri) values (»’+p1+»’,»’+p2+»’,»’+p3+»’)’);
SQL.Add(‘select *’);
SQL.Add(‘from uch’);
Open;
End;
DataModule2.ADOConnection1.CommitTrans;
ShowMessage(‘Äîáàâëåíèå ïðîøëî óñïåøíî!’);
Form4.DBGrid1.DataSource:=DataModule2.DataSource1;
except
DataModule2.ADOConnection1.RollbackTrans;
ShowMessage(‘Ïðîèçîøëà îøèáêà!’);
end;
end;
Ошибка \»Обнаружены символы вне инструкции SQL Access\» часто возникает при работе с базами данных. Это указывает на синтаксическую ошибку в вашем запросе SQL. Даже незначительная опечатка может привести к этой проблеме. Наиболее распространенные причины – лишние пробелы, неправильное использование кавычек или запятых, а также ошибки в именах таблиц или столбцов. Подробное понимание синтаксиса SQL и внимательность при написании запросов помогут избежать этой ошибки.
Читать далее