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

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.03.2013, 15:26   #1
manula
Форумчанин
 
Регистрация: 17.04.2011
Сообщений: 168
Сообщение Ошибка в добавлении(INSERT INTO)

Уважаемые не могли бы вы мне подсказать в чем проблема, не выполняется запрос, вот мой код:
Код:
with DataMod.ADOQuery3 do
 begin
  Close; 
  SQL.Clear; 
  SQL.Add('INSERT INTO [tb_deals]');
  SQL.Add('(client,summa,from,to,percent,type)');
  SQL.Add(' VALUES (');
  SQL.Add(#39 + Tb_Client.Text + #39 + ',' + #39 + Tb_sum.Text + #39 + ','); 
  SQL.Add(#39 + Tb_ot.Text + #39 + ',' + #39 + Tb_do.Text  + #39 + ',');
 SQL.Add(#39 + Tb_pro.Text + #39 + ',' + #39 + Cb_type.Text  + #39 + ')');
  ExecSQL;
end;
Ошибку выдает:
Код:
Ошибка синтаксиса в инструкции INSERT INTO
Пытался разобраться так и не понял в чем проблема.
Структура таблицы из БД:
Код:
client текстовый тип,
summa -числовой тип,
from-числовой тип,
to-числовой тип,
percent-числовой тип,
type-текстовый тип
manula вне форума Ответить с цитированием
Старый 15.03.2013, 15:32   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Как минимум лишние кавычки (#39) для значений из списка VALUES для числовых полей. Могу еще предположить, что имя одного из полей from, to, type запросто может провайдеру или СУБД не понравиться, не мешало бы в квадратные скобки взять. А самый лучший вариант - использовать параметризированный запрос
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 15.03.2013 в 15:36.
Аватар вне форума Ответить с цитированием
Старый 15.03.2013, 15:43   #3
manula
Форумчанин
 
Регистрация: 17.04.2011
Сообщений: 168
По умолчанию

Через параметры когда выполнял добавление такая же ошибка была, а вы не могли исправить что именно не правильно, я пробовал все поля таблицы делать текстовыми и добавлять в этом случае появлялась аналогичная ошибка.
manula вне форума Ответить с цитированием
Старый 15.03.2013, 15:49   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Я не мог бы, поскольку не знаю какие числовые поля целые, а какие с десятичной точкой. Это существенно. Не мешало бы сказать и какая СУБД
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 15.03.2013, 15:54   #5
manula
Форумчанин
 
Регистрация: 17.04.2011
Сообщений: 168
По умолчанию

Вот с параметром,такая же ошибка
Код:
with DataMod.ADOQuery3 do
 begin
  Close; 
  SQL.Clear; 
  SQL.Add('INSERT INTO tb_deals');
  SQL.Add('(client, summa, from, to, percent, type)');
  SQL.Add('Values(:cl, :sm, :f, :t, :pr, :tp)');
  Parameters.ParamByName('cl').Value:=Tb_Client.Text;
  Parameters.ParamByName('sm').Value:=Tb_sum.Text;
  Parameters.ParamByName('f').Value:=Tb_ot.Text;
  Parameters.ParamByName('t').Value:=Tb_do.Text;
  Parameters.ParamByName('pr').Value:=Tb_pro.Text;
  Parameters.ParamByName('tp').Value:=Cb_type.Text;
  ExecSQL;
end;
БД Access, поля числовые, не с плавающей запятой!
manula вне форума Ответить с цитированием
Старый 15.03.2013, 16:09   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Числовым параметрам значения присвойте с помощью StrToInt. При этом данные в эдитах могут быть не подходящими (в том числе и пусто) - тогда прерывание по ошибке будет. Повторюсь, возможно и квадратные скобки понадобятся для некоторых имен полей, очень они уж специфичны
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 15.03.2013, 16:39   #7
manula
Форумчанин
 
Регистрация: 17.04.2011
Сообщений: 168
По умолчанию

Преобразование строки в число(StrToInt) не удалось провести,такая же ошибка возникла, а на счет квадратных скобок первый раз слышу, может и пример есть в наличии?
Если вы имеете в виду так, то тоже не помогло:
Код:
SQL.Add('(client, [summa], from, to, [percent], type)');
manula вне форума Ответить с цитированием
Старый 15.03.2013, 17:28   #8
Yurk@
Участник клуба
 
Аватар для Yurk@
 
Регистрация: 19.12.2007
Сообщений: 1,100
По умолчанию

как-то так должно быть
Код:
with DataMod.ADOQuery3 do
begin
  Close; 
  SQL.Text := 'INSERT INTO tb_deals ([client],[summa],[from],[to],[percent],[type]) '
    + 'VALUES (:cl, :sm, :f, :t, :pr, :tp)';
  Parameters.ParamByName('cl').Value := StrToIntDef(Tb_Client.Text,0);
  Parameters.ParamByName('sm').Value := StrToIntDef(Tb_sum.Text,0);
  Parameters.ParamByName('f').Value := StrToIntDef(Tb_ot.Text,0);
  Parameters.ParamByName('t').Value := StrToIntDef(Tb_do.Text,0);
  Parameters.ParamByName('pr').Value := StrToIntDef(Tb_pro.Text,0);
  Parameters.ParamByName('tp').Value := StrToIntDef(Cb_type.Text,0);
  ExecSQL;
end;
На форуме: Помогаю за спасибо
ICQ\Skype: Это моё личное время ...
Yurk@ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при добавлении в базу 622089 PHP 3 29.02.2012 22:55
Ошибка добавлении ЭУ Simbad Microsoft Office Excel 2 01.11.2011 10:06
Ошибка при добавлении записи Itachi БД в Delphi 1 10.06.2011 13:30
Ошибка при добавлении данных Ehha1234 БД в Delphi 0 19.06.2010 20:33
Ошибка при добавлении запроса KARUSHEV Помощь студентам 3 27.01.2010 08:45