Crazy_Pickle
Гость
|
|
« : 20-07-2010 11:59 » |
|
Уважаемые опытные да бывалые, не сочтите за труд наставить нуба на путь истинный. Пишу таблицу маршрутов ( так в данном случае товарные составы называются) под 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
|
|
« Ответ #1 : 20-07-2010 12:35 » |
|
какой синтаксис insert?
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Dale
|
|
« Ответ #2 : 20-07-2010 12:49 » |
|
Я бы поступил так: поставил точку останова в строке, где строке запроса S присваивается значение, скопировал запрос в буфер обмена, а потом выполнил бы его вручную в среде Access. Обычно подобные ошибки легко отлавливаются таким образом.
То, что сразу бросилось в глаза: название поля values явно неудачное, лучше не давать объектам базы данных имена, совпадающие с ключевыми словами. Может, в данном конкретном случае дело и не в этом, но вообще от этого бывают весьма неприятные и труднонаходимые сюрпризы.
|
|
|
Записан
|
Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.
Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard
Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
|
|
|
Sla
|
|
« Ответ #3 : 20-07-2010 13:04 » |
|
так у него есть отладочная точка Showmessage (s); Но это стандартная ошибка - смотрю в книгу, вижу фигу... К топикстартеру совсем не относится.
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Dale
|
|
« Ответ #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
|
|
« Ответ #6 : 20-07-2010 13:25 » |
|
А чему равно значение строки S?
|
|
|
Записан
|
Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.
Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard
Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
|
|
|
Sla
|
|
« Ответ #7 : 20-07-2010 13:43 » |
|
Повторю вопрос
Какой синтаксис INSERT ?
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Dale
|
|
« Ответ #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
Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
|
|
|
Алексей++
глобальный и пушистый
Глобальный модератор
Offline
Сообщений: 13
|
|
« Ответ #9 : 20-07-2010 14:18 » |
|
Интересно, а куда вставятся данные, если не указан column_list ?
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #10 : 20-07-2010 14:50 » |
|
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
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
Модератор
Offline
Пол:
меняю стакан шмали на обратный билет с Марса.
|
|
« Ответ #14 : 23-07-2010 04:47 » |
|
просто BDE значение в двойных кавычках считает "токеном", т.е. наименованием поля или таблицы, а в ординарных - собственно, значением
|
|
|
Записан
|
|
|
|
|