AnsiString sql = "INSERT INTO products (num, user, date, price) VALUES (45, 'Иванов', '20.11.2007', 100)";
ADODataSet1->Active = false;
ADODataSet1->CommandText = sql;
ADODataSet1->Active = true;
ADO - Ошибка при INSERT'е в базу данных
База данных MS Access, прога с ней работает. Прога соответственно на C++ Builder. SELECT'ы отрабатывают без проблем.
Пытаюсь добавить строку в таблицу - вылетает ошибка:
"Ошибка синтаксиса в инструкции INSERT INTO"
Но запрос правильный - я в Access'е проверял - работает, запись добавляется.
Вот код:
Код:
Пробовал не только с ADODataSet, но и с ADOQuery и с ADOCommand - все равно не работает - вылетает с такой же ошибкой.
ADOConnection меня вынесено в отдельнй DataModule.
Подскажите, в чем ошибка?!!
Цитата: needjava
Помогите, третий день бьюсь, не могу понять в чем проблема!
База данных MS Access, прога с ней работает. Прога соответственно на C++ Builder. SELECT'ы отрабатывают без проблем.
Пытаюсь добавить строку в таблицу - вылетает ошибка:
"Ошибка синтаксиса в инструкции INSERT INTO"
Но запрос правильный - я в Access'е проверял - работает, запись добавляется.
Вот код:
Пробовал не только с ADODataSet, но и с ADOQuery и с ADOCommand - все равно не работает - вылетает с такой же ошибкой.
ADOConnection меня вынесено в отдельнй DataModule.
Подскажите, в чем ошибка?!!
База данных 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;
ADODataSet1->Active = false;
ADODataSet1->CommandText = sql;
ADODataSet1->Active = true;
Пробовал не только с ADODataSet, но и с ADOQuery и с ADOCommand - все равно не работает - вылетает с такой же ошибкой.
ADOConnection меня вынесено в отдельнй DataModule.
Подскажите, в чем ошибка?!!
параметры используй.
имя "Иванов"
Код:
параметры используй.
с параметрами - такая же фигня - все равно такая же ошибка вылезает
сделал так:
Код:
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;
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;
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;
Какие еще есть идеи - в чем ошибка?
Код:
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;
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;
Но лучше использовать TADOQuery
Переделал с TADOQuery.
А почему лучше его использовать?
Цитата: needjava
Спасибо большое! То что надо, заработало. :)
Переделал с TADOQuery.
А почему лучше его использовать?
Переделал с TADOQuery.
А почему лучше его использовать?
ДС стоит использовать в тех случаях когда запрос возвращает набор данных - например когда у тебя выполняется вставка и возвращается уникальный идентити и при том еще и сеть основания использовать именно базовый класс. Для реализации вставки/обновления если запрос ничего не возвращает стоит использовать или TADOCommand или TADOQuery.