Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

insert или update


xyz ©   (2009-07-30 22:06:00) 

Надо занести данные (множество записей, я их в цикле заношу) в непустую таблицу. У некоторых вносимых записей значение кл. поля может повторяться с уже имеющимся в базе. В этом случае надо просто обновить запись. Как сделать? Предварительно проверять select'ом есть ли уже там такое значение ключа?


Anatoly Podgoretsky   (2009-07-31 11:20:00) [1]

> xyz  (31.07.2009 09:52:12)  [12]

А синтаксис откуда взял?


xyz   (2009-07-31 10:23:00) [2]

Все, сделал с помощью исключений. А merge так и не работает, хотя я там исправил UPDATE SET.


xyz   (2009-07-31 10:03:00) [3]


> Это при условии, что вносимые записи полностью заполняют
> записи целевой таблицы, а не часть полей. Если так, то конечно.
>

нет, не полностью. так что пара delete-insert не подходит


xyz   (2009-07-31 09:52:00) [4]

Вот такой код:
for i:=listbox1.Items.Count-1 downto 0 do begin
s:='MERGE INTO [Параметры вагона] USING [Параметры вагона] ON ([№ вагона]='+
listbox1.Items.Strings[i]+
') WHEN MATCHED THEN UPDATE SET [№ вагона] ='+
listbox1.Items.Strings[i]+
', [номер состава] ='+
quotedstr(edit1.text)+
'WHEN NOT MATCHED THEN INSERT ([№ вагона] , [номер состава]) VALUES ('+
listbox1.Items.Strings[i]+', '+quotedstr(edit1.text)+')';
form9.ADOCommand1.CommandText:=s;
form9.ADOCommand1.Execute;
                                         end;

Выдает "ошибочная конструкция SQL, ожидалось 'DELETE', 'INSERT', ...
А что, можно и не в цикле заносить?


Sergey13   (2009-07-31 09:50:00) [5]

> [9] Anatoly Podgoretsky ©   (31.07.09 09:43)

Это при условии, что вносимые записи полностью заполняют записи целевой таблицы, а не часть полей. Если так, то конечно.


Anatoly Podgoretsky   (2009-07-31 09:45:00) [6]


> Откуда ты их заносишь?

Неважно, все равно он их в цикле заносит.


Anatoly Podgoretsky   (2009-07-31 09:43:00) [7]

> Sergey13  (31.07.2009 09:32:08)  [8]

Иногда выгоднее пара Delete затем Insert (update по сути так и делает)


Sergey13   (2009-07-31 09:32:00) [8]

> [0] xyz   (30.07.09 22:06)
> Надо занести данные (множество записей

Откуда ты их заносишь? Возможно будет правильнее занести их все без разбора в отдельную таблицу, а потом двумя отдельными запросами (insert и update) перенести в боевую.


xyz   (2009-07-31 09:03:00) [9]


> Не озвучена база данных

mdb


sniknik   (2009-07-30 23:10:00) [10]

> что вопрос по базам делает в начинающих? :)
это ловушка для бана "подобнолюбопытствующих"...

p.s. контр вопрос "а почему уравнение вида 2 + 2 = ? до сих пор не разбирается на семинаре по высшей математике?"


Игорь Шевченко   (2009-07-30 23:01:00) [11]


> какой способ лучше в плане быстродействия?


4-ый.

Не озвучена база данных, без этого разговоры о быстродействии - пустой треп


antonn   (2009-07-30 22:57:00) [12]

что вопрос по базам делает в начинающих? :)


antonn   (2009-07-30 22:53:00) [13]

а если replace? :)


xyz   (2009-07-30 22:14:00) [14]

какой способ лучше в плане быстродействия? Я имею в виду способы с 1-3 :)


Игорь Шевченко   (2009-07-30 22:10:00) [15]

1. предварительно проверять select'ом
2. вставлять без проверки, получив ошибку обновлять
3. использовать merge
4. пересмотреть задачу


Наверх

Титульная страница Поиск, карта сайта Написать письмо