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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Увеличение значения поля одним запросом 
V
    Опции темы
ksili
Дата 13.4.2007, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: нет
Всего: 17



Можно ли как-то одним запросом увеличить значения поля записи на конкретное значение. Не читать селектом текущее значение и не записывать затем новое. А сразу сказать "увеличь на столько-то".


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
Akella
Дата 13.4.2007, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 20
Всего: 329



нормально задай вопрос
PM MAIL   Вверх
ksili
Дата 14.4.2007, 04:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: нет
Всего: 17



В таблице есть поле SUMMA. У определённой записи надо увеличить его допустим на 100.
Насколько я понимаю надо сначала сделать SELECT:

Код

select SUMMA from T_USERS where ....

затем 
Код

sum = pFIBQuery1->FieldByName("SUMMA")->AsFloat + 100;


Затем UPDATE:
Код

update T_USERS set SUMMA=xxx where 

где xxx - это sum, преобразованная в строку

То есть получается два запроса: SELECT и UPDATE. Но так как мне не нужно проверять текущее значение суммы, хотелось бы (для увеличения производительности и упрощения программы) просто одним запросом (без SELECT'а) как-то увеличить значение поля SUMMA


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
Akella
Дата 16.4.2007, 08:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 20
Всего: 329



Цитата(ksili @  14.4.2007,  04:21 Найти цитируемый пост)
То есть получается два запроса: SELECT и UPDATE.

да, запхни это всё в хранимку

Добавлено через 6 минут
примерно так:


один вариант
Код

CREATE PROCEDURE NEW_PROCEDURE 
as
declare variable new_var float;
begin
  new_var = 0;
  for select summa from table1 where pole1 = 100 into :new_var do begin
    update table 2 set summa2 = :new_var where pole1 = 100;
  end;
end


второй
Код

CREATE PROCEDURE NEW_PROCEDURE (
    v_id integer)
as
declare variable new_var float;
declare variable id_temp integer;
begin
  new_var = 0;
  select id, summa from table1 where id = :v_id into :new_var, :ID_TEMP;
  update table 2 set summa2 = :new_var where id2 = ID_TEMP;
end


смотря какие условия задачи
PM MAIL   Вверх
qw84
Дата 16.4.2007, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 3.4.2007
Где: Воронеж

Репутация: нет
Всего: нет



Да сделай это в виде триггера после вставки данных - и все можно забыть - автоматически после вставки всегда у вас будет нужная сумма. Если нужно отключить триггер - то это делается установкой параметра active для триггера
PM MAIL ICQ   Вверх
ksili
Дата 18.4.2007, 05:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: нет
Всего: 17



Цитата(qw84 @ 16.4.2007,  22:45)
Да сделай это в виде триггера после вставки данных - и все можно забыть - автоматически после вставки всегда у вас будет нужная сумма. Если нужно отключить триггер - то это делается установкой параметра active для триггера

После какой вставки? я ничего не вставляю, запись уже есть, надо увеличить значение одного из её полей на конкретное число.
Сделаю в виде хранимой процедуры. По-моему, оптимальный вариант


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
Deniz
Дата 18.5.2007, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 22
Всего: 44



А что слабо сразу послать запрос
Код

update T_USERS set SUMMA=SUMMA + xxx where id = ...



--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
ksili
Дата 18.5.2007, 11:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: нет
Всего: 17



А что, так можно? Классно. Надо попробовать


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
Deniz
Дата 18.5.2007, 12:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 22
Всего: 44



Блин, как дети малые.
Раньше мой начальник говорил:
"Знаешь какая разница между сексом и кексом?"
и потом добавлял:
"Попробуй - узнаешь"

И тяжело было на пустой базе сразу попробовать?


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
Akella
Дата 18.5.2007, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 20
Всего: 329



Цитата(Deniz @  18.5.2007,  12:04 Найти цитируемый пост)
Блин, как дети малые.

будь спокойнее  smile 
PM MAIL   Вверх
Deniz
Дата 18.5.2007, 14:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 22
Всего: 44



 smile 
Я спокоен, это шутка такая была, просто смайлик не поставил
Просто прикольно смотреть когда говорят: "А что так можно?", т.е. попробовать не разрешают старшие или религия не позволяет или еще чего ;-)
Это опять шутка  smile  , и без обид.


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Interbase"
Alex

Обязательно указание:

1. Версию InterBase (Firebird, Yaffil)

2. Способа доступа (ADO, BDE, IBX и т.д.)

  • КАК ПРАВИЛЬНО ОФОРМИТЬ КОД - ЗДЕСЬ
  • КАК ПРАВИЛЬНО УКАЗАТЬ ТЕКСТ ОШИБКИ - ЗДЕСЬ
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • FAQ раздела лежит здесь!

Если Вам понравилась атмосфера форума, заходите к нам чаще! С Уважением, Akella.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Firebird, Interbase | Следующая тема »


 




[ Время генерации скрипта: 0.0520 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.