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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.01.2017, 16:58   #1
Ernest027
Форумчанин
 
Регистрация: 27.04.2015
Сообщений: 437
По умолчанию If not exists insert into else update

Всем привет)
Написал вот такую страшную штуку.

Код:
SQL.Add('if not exists (select * from Equipment ');
  SQL.Add('where [Оперативный номер]=('+quotedstr(sEdit16.Text)+') and [Заводской номер]=('+quotedstr(sedit18.Text)+'))');
  SQL.Add('insert into Equipment (ZavodID,[№ по договору],[Год],[Вид оборудования],[Место установки (корпус)],');
  SQL.Add('[Наименование позиции],[Оперативный номер],[Тип оборудования],[Заводской номер],[Год выпуска],');
  SQL.Add('[Дата последних замеров],[Техническое состояние],[Дата следующих замеров],[Мощность, кВт],');
  sql.Add('[Напряжение, кВ],[Класс изоляции],[Кол-во оборотов ЭД],[Кол-во оборотов механизма],');
  SQL.Add('[Тип подшипников],[Наименование подшипников задний],[Наименование подшипников передний],');
  sql.Add('[Мощность, кВА],[Напряжение ВН],[Напряжение СН],[Напряжение НН],[Oil temperature],');
  SQL.Add('[Потери ХХ],[Тип защиты],[Тип РПН])');
  sql.Add(' values (:ZID,:NPD,:G,:VO,:MU,:NP,:ON,:TO,:ZN,:GV,:DPZ,:TS,:DSZ,:P,:U,:CI,:KOED,:KOM,:TP,');
  SQL.Add(':NPZ,:NPP,:S,:Uvn,:Usn,:Unn,:OT,:Pxx,:TZ,:TRPN)');
  SQL.Add('else update Equipment set ([Дата последних замеров]=:NPZ,[Техническое состояние]=:TS,[Дата следующих замеров]=:NPP)');
  sql.Add('where [Оперативный номер]=('+quotedstr(sEdit16.Text)+') and [Заводской номер]=('+quotedstr(sedit18.Text)+')');
Если соответствующей записи нет, то вставить ее в таблицу, если есть то обновить запись.
Но опять выскакивает ошибка "Неправильно определен параметр".
Ernest027 вне форума Ответить с цитированием
Старый 23.01.2017, 17:34   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

А Вы не используйте параметры с одним именем более одного раза.

если не ошибаюсь, то всё повторные значения (у Вас это NPZ, TS, NPP ) будут не определены.
дайте им другие имена. и не забудьте присвоить значение, разумеется!

а вообще, я бы разбил это на два этапа - первый - делаем запрос и получаем результат, есть ли такое значение в таблице.
причём в запросе получал ID из таблицы Equipment
Код:
'select id from Equipment where [Оперативный номер]='+quotedstr(sEdit16.Text)+' and [Заводской номер]='+quotedstr(sedit18.Text);
дальше ветление: if есть_запись then Update (by ID) else Insert;

идея понятна?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.01.2017, 20:33   #3
Ernest027
Форумчанин
 
Регистрация: 27.04.2015
Сообщений: 437
По умолчанию

понятна)
а Ваш запрос системе проще обработать,чем мой кошмар?)
Ernest027 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Запрос с Insert и Update gigar SQL, базы данных 2 18.02.2016 12:37
Update or Insert и FireBird 2.5.2 Pashka_cool БД в Delphi 21 23.08.2013 23:55
Вставка в таблицу методом INSERT...... IF NOT EXISTS Nikolay88 БД в Delphi 0 26.05.2011 17:12
выполнение запросов(Insert,Update) Rio309 C# (си шарп) 1 20.03.2011 17:10
insert и update Tanusha SQL, базы данных 4 13.03.2009 14:47