Форум программистов, компьютерный форум, киберфорум
C++ Builder: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/21: Рейтинг темы: голосов - 21, средняя оценка - 4.86
8 / 8 / 13
Регистрация: 03.02.2013
Сообщений: 159

TQuery получить результат от update

08.11.2019, 11:22. Показов 4307. Ответов 1

Студворк — интернет-сервис помощи студентам
Задача такая: вставить в таблицу строку, если часть параметров совпадает с одной из строк в БД, то обновить.
Заставить работать один SQL запрос с Update и Insert я не смог, ни через PL/SQL, ни с помощью MERGE.
Запросы Update и Insert по отдельности выполняются. Хочется обойтись без процедур.
При использовании PL/SQL и MERGE выпадает ОШИБКА.
C++
1
2
3
4
5
try{ 
  m_Q_myQuery->ExecSQL();
} catch(...){
  ShowMessage("ОШИБКА");
}
Поэтому, хочу разделить запрос на два, один Update, другой Insert. Если update сработает, insert не трогаем, иначе вставляем.

Вопросы:
Как получить что-то от TQuery(UPDATE) чтобы понять что обновление сработало или нет?
Или как лучше поступить?
Все запросы рабочие, проверял на SQL Navigator.

SQL
1
2
3
4
UPDATE xxx_client_prices
SET    price = :price
WHERE      cnt_id        = :cnt_id
       AND nmcl_id       = :nmcl_id
SQL
1
2
3
4
5
6
7
INSERT INTO xxx_client_prices (id, cnt_id, nmcl_id, price)
SELECT goods.sq_xxx_client_prices.NEXTVAL,
       cc.cnt_id, 
       :nmcl_id, 
       :price
FROM companies_contractors cc
WHERE cc.cnt_id = :cnt_id;
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
BEGIN
    UPDATE xxx_client_prices
    SET    price = :price
    WHERE      cnt_id        = :cnt_id
           AND nmcl_id       = :nmcl_id;    
    IF SQL%ROWCOUNT = 0 THEN  
        INSERT INTO xxx_client_prices (id, cnt_id, nmcl_id, price)
        SELECT sq_xxx_client_prices.NEXTVAL,
               cnt_id, 
               :nmcl_id
               :price
        FROM companies_contractors
        WHERE cnt_id = :cnt_id;
    END IF;
END;
SQL
1
2
3
4
5
6
7
8
9
10
MERGE INTO xxx_client_prices xcp
USING (SELECT * FROM companies_contractors) cc
ON (xcp.cnt_id = :cnt_id)
WHEN MATCHED THEN 
   UPDATE SET ycp.price    = :price
   WHERE cnt_id            = :cnt_id
         AND nmcl_id       = :nmcl_id              
WHEN NOT MATCHED THEN 
   INSERT (id, cnt_id, nmcl_id, price) 
   VALUES (sq_xxx_client_prices.NEXTVAL,cc.cnt_id,:nmcl_id,:price);
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.11.2019, 11:22
Ответы с готовыми решениями:

Получить результат update
День добрый! Использую pdo для postgresql Если выполняю UPDATE. как получить результат ( 50 строк изменено, к примеру) транзакции...

Как проанализировать результат запроса SELECT в TQuery.ExecSQL?
Требуется,не отображая на экране, проверить число записей в результирующем наборе данных, и если > 0, то вернуть значение поля 'name'. ...

Как получить напрямую ответ сервера СУБД используя TQuery?
День добрый! Есть проблема. Для доступа к базе данных использую компонент TQuery(могу использовать ZQuery - набор компонент zeoslib)....

1
8 / 8 / 13
Регистрация: 03.02.2013
Сообщений: 159
09.11.2019, 11:15  [ТС]
Реализовал с помощью 3 запроса
SQL
1
2
SELECT COUNT(*) AS num 
FROM...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
09.11.2019, 11:15
Помогаю со студенческими работами здесь

Результат запроса UPDATE
Добрый вечер. Я делаю запрос UPDATE к серверу SQL Server через рекордсет. Но после выполнения рекордсет сам сразу закрывается. ...

Неправильный результат Update (select)
Есть две таблицы с одинаковыми столбцами im-nomer-col Первая таблица - Вася,,Красный; Петя,,Синий; Вася,,фиолетовый: ...

Как получить такой результат? Результат на Картинке
Как сделать так чтобы лого было по середине, а текст по бокам....все как на картинке? Что написать в HTML и CSS? Заранее спасибо)

Получить данные из таблиц, update
Суть такова: хочу сделать update таблицы Report из данных, содержащихся в таблице Schet в которой тип оплаченных услуг (вода, эл.энергия и...

SQLite. Получить кол-во строк, затронутых UPDATE
"SELECT changes()" не проверяет, изменились ли записи в БД или просто были перезаписаны. Значит, единственный способ узнать, были ли...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru