|
|
|
| Здравствуйте. Пытаюсь использовать SQLite и мне надо сделать такую штуку:
если запись в таблице есть, обновить, если нет то вставить.
Код
[code]
INSERT INTO GOODS
VALUES ('0', '1', 'insertsqlgoodsname', '100.10', 'insertFirm')
ON DUPLICATE KEY UPDATE
quantity = '0',
goods_name = 'UpdateSqlGoods',
price = '100.10',
goods_firm = 'UPDATE'
[/]
что работает в MySQL но не работает SQLIte. Подскажите пожалуйста, что делать? | |
|
|
|
|
|
|
|
для: Андрей801
(20.01.2009 в 12:04)
| | SQLite не поддерживает стандарт в полной мере. На то он и Lite. Выход: сначала сделать выборку SELECT по ключу. Если выборка пустая, то INSERT, иначе UPDATE. | |
|
|
|
|
|
|
|
для: Саня
(20.01.2009 в 13:43)
| | не говоря уже о том, что ON DUPLICATE KEY UPDATE выходит за рамки стандарта, imho. | |
|
|
|
|
|
|
|
для: Саня
(20.01.2009 в 13:43)
| | Спасибо. Не подскажешь подробнее, как проверить не пустая ли выборка на серверной стороне?
Мне нужно что то вроде
IF NOT EXISTS (SELECT * FROM GOODS WHERE goods_id = 0)
INSERT INTO
GOODS
VALUES ('0','1','insertsqlgoodsname','100.10','insertFirm')
ELSE
UPDATE GOODS SET quantity = '0', goods_name = 'UpdateSqlGoods', price = '80.25', goods_frim = 'UPDATE' WHERE goods_id = '0'
|
но ругается на IF. Можно как то сделать проверку на пустой/непустой SELECT на серверной стороне?
( Я знаю, что SQLITE это встроеный сервер, сейчас объясню подробнее в чём дело.)
дело в том что вообще-то мне надо надо по учёбе писать клиент серверное приложение , где сервер должен быть MS SQL Server. Но так как на работе MS SQL SERER поставить не могу, пишу в свободное от работы время под SQL Lite, с рассчётом сменить потом драйвер QSQLITE на QODBC (сама прога на С++ с иcпользованием библиотеки QT). | |
|
|
|
|
|
|
|
для: Андрей801
(20.01.2009 в 14:48)
| | SQLite не поддерживает оператор IF. Лучше следуйте примерно такой логике:
result = sqlite_query(handler, "SELECT COUNT(*) FROM GOODS WHERE goods_id = 0");
fetch = sqlite_fetch(result);
if ( (int) fetch[0] > 0 ) {
sqlite_query(handler, "UPDATE...");
} else {
sqlite_query(handler, "INSERT...");
}
// PS это не си
|
| |
|
|
|
|
|
|
|
для: Саня
(20.01.2009 в 16:42)
| | Спасибо ещё раз! То есть мне в неизбежно придётся проверить результат запроса SELECT на клиентской стороне? В принципе, ничего страшного, но придётся повозится при окончательной доводкой приложения под MS SQL SERVER. | |
|
|
|
|
|
|
|
для: Андрей801
(21.01.2009 в 10:13)
| | Вы можете написать программу-прокладку, которая будет выполняться на сервере с СУБД. И передавать такие вот специальные запросы через неё. | |
|
|
|