Нужно узнать не просто упешно/не успешно выполнен запрос. А Например сколько записей таким образом затронуто выполнением запроса. Т.е. реализовать чтото типа:
form1.SQLQuery1.Active:=false;
form1.SQLQuery1.SQL.Clear;
form1.SQLQuery1.sql.add('UPDATE config SET param=:param WHERE nameparam =:nameparam;');
form1.SQLQuery1.Params.ParamByName('nameparam').AsString:=nameparam;
form1.SQLQuery1.Params.ParamByName('param').AsString:=param;
form1.SQLQuery1.ExecSQL;
if РЕЗУЛЬТАТ ВЫПОЛНЕНИЯ ЗАПРОСА=0 then
begin
form1.SQLQuery1.Active:=false;
form1.SQLQuery1.SQL.Clear;
form1.SQLQuery1.sql.add('INSERT INTO config VALUES (null,:param,:nameparam)');
form1.SQLQuery1.Params.ParamByName('nameparam').AsString:=nameparam;
form1.SQLQuery1.Params.ParamByName('param').AsString:=param;
form1.SQLQuery1.ExecSQL;
end;
Узнавать предварительно есть данный параметр в базе или нет, не кошерно...
[решено] Получение результата выполнения SQLQuery.ExecSQL
Модератор: Модераторы
[решено] Получение результата выполнения SQLQuery.ExecSQL
Последний раз редактировалось donpadlo 15.11.2011 09:53:33, всего редактировалось 2 раза.
donpadlo SQLQuery1.ExecSQL в качестве результата возвращает количество обработанных записей.
Добавлено спустя 21 минуту 12 секунд:
хм... в sqldb нифига он не возвращает, ошибся я.
Добавлено спустя 21 минуту 12 секунд:
хм... в sqldb нифига он не возвращает, ошибся я.
А как на счёт использования RowsAffected?
Да, то что нада, спасиба.
- Brainenjii
- энтузиаст
- Сообщения: 1351
- Зарегистрирован: 10.05.2007 00:04:46
в стандарте SQL от 2008 появился оператор MERGE, которым можно решать и такие задачи...
Есть решение поизящнее, но оно не универсальное. Например для Firebird 2.5+ можно сделать примерно так:
Код: Выделить всё
UPDATE OR INSERT INTO config (ID,VAL,NAME) VALUES (null,:param,:nameparam) MATCHING (NAME);
