Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Ошибка SQL синтаксиса Insert Into  (Прочитано 18505 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Crazy_Pickle
Гость
« : 20-07-2010 11:59 » new

Уважаемые опытные да бывалые, не сочтите за труд наставить нуба на путь истинный.
Пишу таблицу маршрутов ( так в данном случае товарные составы называются) под Access, на дельфях, и хочу сделать добавление этих самых маршрутов из программы, для этого собираюсь использовать SQL запросы, в частности INSERT. Для облегчения задачи таблицы у меня связаны, и что бы пользователь не вбивал ID нужной компании или продукции, я использую combobox, беру оттуда итеминдекс, в моем случае он аналогичен ID. Но это стороннее пояснение, что бы были понятны мои действия, итак, у меня выдает ошибку в синтаксисе INSERT INTO. Вот код кнопки ответственной за добавление.
Код:
procedure TForm4.BitBtn1Click(Sender: TObject);
Var i, x: Integer;
s: String;
begin
x:= Partner.ItemIndex;
i:= Product.ItemIndex;
S:= 'Insert sostav (id_customer, Id_production, GTO, GD, nomer, values) Values ("'+IntToStr(x)+'","'+IntToStr(i)+'","'+GTO.Text+'","'+GD.Text+'","'+Nomer.Text+'","'+Ves.Text+'")';
Showmessage (s);
ADOQuery1.SQL.Add(s);
ADOQuery1.ExecSQL;
ADOQuery1.Clear;
end;
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 20-07-2010 12:35 » 

какой синтаксис insert?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Dale
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #2 : 20-07-2010 12:49 » 

Я бы поступил так: поставил точку останова в строке, где строке запроса S присваивается значение, скопировал запрос в буфер обмена, а потом выполнил бы его вручную в среде Access. Обычно подобные ошибки легко отлавливаются таким образом.

То, что сразу бросилось в глаза: название поля values явно неудачное, лучше не давать объектам базы данных имена, совпадающие с ключевыми словами. Может, в данном конкретном случае дело и не в этом, но вообще от этого бывают весьма неприятные и труднонаходимые сюрпризы.
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 20-07-2010 13:04 » 

так у него есть отладочная точка Улыбаюсь
Showmessage (s);

Но это стандартная ошибка - смотрю в книгу, вижу фигу...

К топикстартеру совсем не относится.
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Dale
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 20-07-2010 13:13 » 

Я давненько Дельфей в руках не держал, уже не помню, позволяет ли Showmessage копировать текст своего сообщения в буфер обмена. А с точкой останова это точно получится. И тогда уже в самом Access доводить запрос до ума, пока не заработает.
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
Crazy_Pickle
Гость
« Ответ #5 : 20-07-2010 13:24 » 

Ну в данном случае мне позволено работать только таким образом, конкретно в ACCESS не получится.
А ошибка следующая:
Project Marshrut.exe raised exception class EOleException with message 'Ошибка синтаксиса в инструкции INSERT INTO'.
Думал дело в кавычках и апострофах, перепробовал 4 варианта, так и не помогло, чешу репу, в чем может быть дело.
Записан
Dale
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #6 : 20-07-2010 13:25 » 

А чему равно значение строки S?
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 20-07-2010 13:43 » 

Повторю вопрос

Какой синтаксис INSERT ?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Dale
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #8 : 20-07-2010 13:52 » 

Если подвох в отсутствии INTO после INSERT, то MSDN утверждает, что это не обязательно, как и список полей для вставки данных:

Цитата
Using INSERT
The INSERT statement adds one or more new rows to a table. In a simplified treatment, INSERT has the following form:

INSERT [INTO] table_or_view [(column_list)] data_values


Я сам привык его всегда ставить, отсутствие режет глаз, но для интерпретатора SQL это всего лишь шумовое слово, вроде AS и т.п. Может, конечно, в диалекте SQL для Access его опускать недопустимо. В любом случае нужно проверить на живой базе с ним и без него.
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #9 : 20-07-2010 14:18 » 

Интересно, а куда вставятся данные, если не указан column_list ?
Записан

Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #10 : 20-07-2010 14:50 » 

http://msdn.microsoft.com/en-us/library/bb208861%28office.12%29.aspx
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
zubr
Гость
« Ответ #11 : 20-07-2010 15:37 » 

Ошибка в двойных кавычках. Попробуй:
Код:
S:= 'Insert sostav (id_customer, Id_production, GTO, GD, nomer, values) Values(' + '''' + IntToStr(x)+ '''' + ',' + '''' +IntToStr(i) + '''' //и т. д.
Записан
Crazy_Pickle
Гость
« Ответ #12 : 20-07-2010 15:41 » 

Спасибо всем кто пытался помочь, разобрался. Целых две ошибки было.
Ошибка была в двойных кавычках, пришлось ставить ''' (три апострофа, для преодоления)
Действительно values было виновато ( специально затестил после нахождение ошибки в синтаксисе, действительно когда стоит вальюс - не робит)
Записан
Crazy_Pickle
Гость
« Ответ #13 : 20-07-2010 15:42 » 

О, не заметил сообщений. спасибо энивей )
Записан
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #14 : 23-07-2010 04:47 » 

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

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines