Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

ADO - Ошибка при INSERT'е в базу данных

12K
19 ноября 2007 года
needjava
30 / / 06.10.2006
Помогите, третий день бьюсь, не могу понять в чем проблема!

База данных MS Access, прога с ней работает. Прога соответственно на C++ Builder. SELECT'ы отрабатывают без проблем.

Пытаюсь добавить строку в таблицу - вылетает ошибка:

"Ошибка синтаксиса в инструкции INSERT INTO"

Но запрос правильный - я в Access'е проверял - работает, запись добавляется.

Вот код:

 
Код:
AnsiString sql = "INSERT INTO products (num, user, date, price) VALUES (45, 'Иванов', '20.11.2007', 100)";
  ADODataSet1->Active = false;
  ADODataSet1->CommandText = sql;
  ADODataSet1->Active = true;


Пробовал не только с ADODataSet, но и с ADOQuery и с ADOCommand - все равно не работает - вылетает с такой же ошибкой.
ADOConnection меня вынесено в отдельнй DataModule.

Подскажите, в чем ошибка?!!
1
19 ноября 2007 года
kot_
7.3K / / 20.01.2000
Цитата: needjava
Помогите, третий день бьюсь, не могу понять в чем проблема!

База данных MS Access, прога с ней работает. Прога соответственно на C++ Builder. SELECT'ы отрабатывают без проблем.

Пытаюсь добавить строку в таблицу - вылетает ошибка:

"Ошибка синтаксиса в инструкции INSERT INTO"

Но запрос правильный - я в Access'е проверял - работает, запись добавляется.

Вот код:

 
Код:
AnsiString sql = "INSERT INTO products (num, user, date, price) VALUES (45, 'Иванов', '20.11.2007', 100)";
  ADODataSet1->Active = false;
  ADODataSet1->CommandText = sql;
  ADODataSet1->Active = true;


Пробовал не только с ADODataSet, но и с ADOQuery и с ADOCommand - все равно не работает - вылетает с такой же ошибкой.
ADOConnection меня вынесено в отдельнй DataModule.

Подскажите, в чем ошибка?!!



параметры используй.

11
20 ноября 2007 года
oxotnik333
2.9K / / 03.08.2007
дата пишется '20/11/2007'
имя "Иванов"
12K
20 ноября 2007 года
needjava
30 / / 06.10.2006
 
Код:
параметры используй.


с параметрами - такая же фигня - все равно такая же ошибка вылезает

сделал так:

 
Код:
AnsiString sql = "INSERT INTO products (num, user, date, price) VALUES (:num, :user, :date, :price)";
  ADODataSet1->Active = false;
  ADODataSet1->CommandText = sql;
  ADODataSet1->Parameters->Items[0]->Value = num;
  ADODataSet1->Parameters->Items[1]->Value = user;
  ADODataSet1->Parameters->Items[2]->Value = date;
  ADODataSet1->Parameters->Items[2]->Value = price;
  ADODataSet1->Active = true;


пробовал также так:

 
Код:
AnsiString sql = "INSERT INTO products (num, user, date, price) VALUES (:num, :user, :date, :price)";
  ADODataSet1->Active = false;
  ADODataSet1->CommandText = sql;
  ADODataSet1->Parameters->operator [](0)->Value = num;
  ADODataSet1->Parameters->operator [](1)->Value = user;
  ADODataSet1->Parameters->operator [](2)->Value = date;
  ADODataSet1->Parameters->operator [](3)->Value = price;
  ADODataSet1->Active = true;


Какие еще есть идеи - в чем ошибка?
1
20 ноября 2007 года
kot_
7.3K / / 20.01.2000
 
Код:
WideString sql = "INSERT INTO products (num, [user], [date], price) VALUES (:num, :user, :date, :price)";
  ADODataSet1->Active = false;
  ADODataSet1->CommandText = sql;
  ADODataSet1->Parameters->ParamByName("num")->Value = 10;
  ADODataSet1->Parameters->ParamByName("user")->Value = WideString("Bdfyjd");
  ADODataSet1->Parameters->ParamByName("date")->Value = "10.10.2007";
  ADODataSet1->Parameters->ParamByName("price")->Value = 10;
  ADODataSet1->Active = true;
1
20 ноября 2007 года
kot_
7.3K / / 20.01.2000
Но лучше использовать TADOQuery
12K
21 ноября 2007 года
needjava
30 / / 06.10.2006
Спасибо большое! То что надо, заработало. :)

Переделал с TADOQuery.

А почему лучше его использовать?
1
21 ноября 2007 года
kot_
7.3K / / 20.01.2000
Цитата: needjava
Спасибо большое! То что надо, заработало. :)

Переделал с TADOQuery.

А почему лучше его использовать?


ДС стоит использовать в тех случаях когда запрос возвращает набор данных - например когда у тебя выполняется вставка и возвращается уникальный идентити и при том еще и сеть основания использовать именно базовый класс. Для реализации вставки/обновления если запрос ничего не возвращает стоит использовать или TADOCommand или TADOQuery.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог