[решено] Получение результата выполнения SQLQuery.ExecSQL

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Ответить
Аватара пользователя
donpadlo
новенький
Сообщения: 58
Зарегистрирован: 18.08.2011 09:14:53

[решено] Получение результата выполнения SQLQuery.ExecSQL

Сообщение donpadlo »

Нужно узнать не просто упешно/не успешно выполнен запрос. А Например сколько записей таким образом затронуто выполнением запроса. Т.е. реализовать чтото типа:

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;

Узнавать предварительно есть данный параметр в базе или нет, не кошерно...
Последний раз редактировалось donpadlo 15.11.2011 09:53:33, всего редактировалось 2 раза.
Аватара пользователя
WAYFARER
энтузиаст
Сообщения: 567
Зарегистрирован: 09.10.2009 00:00:04
Откуда: г. Курган

Сообщение WAYFARER »

donpadlo SQLQuery1.ExecSQL в качестве результата возвращает количество обработанных записей.

Добавлено спустя 21 минуту 12 секунд:
хм... в sqldb нифига он не возвращает, ошибся я.
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

А как на счёт использования RowsAffected?
Аватара пользователя
donpadlo
новенький
Сообщения: 58
Зарегистрирован: 18.08.2011 09:14:53

Сообщение donpadlo »

Да, то что нада, спасиба.
Аватара пользователя
Brainenjii
энтузиаст
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Сообщение Brainenjii »

в стандарте SQL от 2008 появился оператор MERGE, которым можно решать и такие задачи...
Аватара пользователя
AlexVinS
новенький
Сообщения: 95
Зарегистрирован: 27.01.2009 00:18:01

Сообщение AlexVinS »

Есть решение поизящнее, но оно не универсальное. Например для Firebird 2.5+ можно сделать примерно так:

Код: Выделить всё

UPDATE OR INSERT INTO config (ID,VAL,NAME) VALUES (null,:param,:nameparam) MATCHING (NAME);
Ответить