Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.05.2019, 17:43   #1
iskurt
Форумчанин
 
Регистрация: 02.06.2009
Сообщений: 228
По умолчанию IF THEN ELSE

Ув., коллеги. Помогите разобраться с синтаксисом MySQL IF THEN ELSE

Нужно сделать запрос с проверкой и изменение в таблице..
Задача следующая:

Код:
IF запись присутствует AND year = '2019',
THEN 
     UPDATE SET month= NULL
ELSE 
     INSERT INTO grafics SET (...,...,...)
END IF;
Я что-то не могу понять как правильно синтаксис писать с этим блин ветвлением.

Пробовал так:

Код:
with ADOQuery1 do
    begin
      Close;
      SQL.Clear;
      SQL.Add('IF COUNT(SELET id_report FROM grafics WHERE year = :year)>0');
      SQL.Add('THEN');

      SQL.Add('UPDATE grafics SET date_graf = NULL');
      SQL.Add('WHERE (id_report=:idrep) AND (year = :nalyear)');

      SQL.Add('ELSE');
      SQL.Add('INSERT INTO grafics SET id_report = :idreport, ');
      SQL.Add('year = :nal_year');
      SQL.Add('END IF');

      Parameters.ParamByName('year').Value := nal_year;
      Parameters.ParamByName('nal_year').Value := nal_year;
      Parameters.ParamByName('idrep').Value :=  QReports.FieldByName('id_reports').AsInteger;
    end;
    QReports.Next;
пробовал IFEXISTS - не получается
В некоторых источника пишут что нужно использовать в запросе BEGIN - END
Так ли это?
iskurt вне форума Ответить с цитированием
Старый 22.05.2019, 18:09   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

я бы копал в сторону создания STORED function в MySQL (дока на IF) и
вызова её в Delphi:

либо полностью решал задачу в Delphi - через дополнительный запрос проверял условие и там выполнял либо UPDATE либо INSERT

p.s.

Цитата:
Сообщение от iskurt Посмотреть сообщение
SELET id_report FROM grafics
нет такого слова
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.05.2019, 18:26   #3
iskurt
Форумчанин
 
Регистрация: 02.06.2009
Сообщений: 228
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
я бы копал в сторону создания STORED function в MySQL (дока на IF) и
вызова её в Delphi:

либо полностью решал задачу в Delphi - через дополнительный запрос проверял условие и там выполнял либо UPDATE либо INSERT

p.s.


нет такого слова
Сорян, очепятка
iskurt вне форума Ответить с цитированием
Старый 22.05.2019, 18:33   #4
iskurt
Форумчанин
 
Регистрация: 02.06.2009
Сообщений: 228
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
либо полностью решал задачу в Delphi - через дополнительный запрос проверял условие и там выполнял либо UPDATE либо INSERT
Я уже тоже к этому склоняюсь. Спасибо
iskurt вне форума Ответить с цитированием
Старый 22.05.2019, 21:03   #5
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

здесь тоже хороши пример https://www.xaprb.com/blog/2006/02/2...date-in-mysql/
xxbesoxx вне форума Ответить с цитированием
Старый 22.05.2019, 21:33   #6
iskurt
Форумчанин
 
Регистрация: 02.06.2009
Сообщений: 228
По умолчанию

ON DUBLICATE работает с индексами, а у меня набор данных объединенных логикой AND. Но все равно спасибо!
iskurt вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск