|
Добавление (или обновление) данных в SQL-таблице | ☑ | ||
---|---|---|---|---|
0
Caesar
26.09.12
✎
12:25
|
Добрый день.
Вот какая задачка: Есть SQL-база данных, информация в которую попадает из 1с 8.2 В базе данных имеется таблица, скажем, Actions, с двумя полями - BAR и Quantity, в которую надо либо добавлять записи, либо обновлять существующие в зависимости от содержимого BAR. Заранее благодарен за подсказки. |
|||
1
ДенисЧ
26.09.12
✎
12:28
|
подсказываю - надо установить соединение с скуль-базой и писать/обновлять данные в ней, а так же читать оные данные.
|
|||
2
ДенисЧ
26.09.12
✎
12:28
|
А что ещё ты хотел услышать на такой вопрос?
|
|||
3
MadHead
26.09.12
✎
12:30
|
наверное еще тригер подойдет
|
|||
4
Caesar
26.09.12
✎
12:30
|
Соединение я установить умею) Отдельно добавлять данные могу, отдельно модифицировать - тоже. Можно ли это сделать единой операцией? Как в таком случае будет выглядеть запрос?
|
|||
5
Caesar
26.09.12
✎
12:31
|
(3) А триггер как тут подойдет?
|
|||
6
Caesar
26.09.12
✎
12:35
|
то есть задача такова:
Исходная таблица Bar Quantity 123456 2 234567 3 345678 4 Входящие данные: Bar Quantity 123456 7 456789 8 567890 8 234567 12 то есть две строки обновить, две добавить. |
|||
7
shuhard
26.09.12
✎
12:37
|
(6) проблема то в чем ?
|
|||
8
ДенисЧ
26.09.12
✎
12:46
|
update where
insert () одним оператором не обойдёшься |
|||
9
Caesar
26.09.12
✎
13:39
|
не пинайте ногами в лицо сильно, делаю так:
рез = Запрос.Выполнить().Выбрать(); НаборЗаписей.ActiveConnection = Подключение; НаборЗаписей.CursorType = 3; Пока рез.Следующий() Цикл НаборЗаписей.Open("SELECT * FROM zActionBar Where (zActionBar.BAR_ID = '"+СокрЛП(рез.Штрихкод)+"')",Подключение,1,4); Если НаборЗаписей.EOF и НаборЗаписей.BOF Тогда //добавляем новую запись НаборЗаписей.addNew(); НаборЗаписей.Fields("Bar_ID").value = СокрЛП(рез.Штрихкод); НаборЗаписей.Fields("Bar_ID_GROOP").value = Число(рез.Владелец.ГруппаТоваров.Код); НаборЗаписей.Fields("Bar_Price").value = рез.Цена; НаборЗаписей.Fields("Bar_Quantity").value = рез.Ограничение; НаборЗаписей.Fields("Bar_Factor").value = 1; НаборЗаписей.Fields("BAR_CHANGE").value = ТекущаяДата(); НаборЗаписей.Fields("Bar_Lock").value = ?(рез.Владелец.ВАкции,0,1); НаборЗаписей.update(); НаборЗаписей.UpdateBatch(); НаборЗаписей.Close(); флОбновлять = Истина; Иначе //обновляем существующую ТекстЗапроса="UPDATE zActionBar |SET zActionBar.BAR_Price="+рез.Цена+" |WHERE (zActionBar.BAR_ID = '"+СокрЛП(рез.Штрихкод)+"')"; подключение.Execute(ТекстЗапроса); Сообщить("Цена установлена "+рез.Цена+" у товара "+рез.Владелец.Наименование); НаборЗаписей.Close(); КонецЕсли; КОнецЦикла; Подключение = ""; Все работает, но есть большие сомнения с точки зрения оптимальности - может, кто-то подскажет что-то? С уважением. |
|||
10
kolanych
26.09.12
✎
13:42
|
(8) вы не поверите - можно обойтись
|
|||
11
Sammo
26.09.12
✎
13:46
|
Сделай хранилку и вызывай ее из 1с :)
|
|||
12
shuhard
26.09.12
✎
13:46
|
(9) НаборЗаписей.UpdateBatch(); - это лишнее
|
|||
13
Sammo
26.09.12
✎
13:47
|
Или вьюху
|
|||
14
Caesar
26.09.12
✎
13:47
|
(10) а как?
(11) Пока не умею. Подскажешь примерно как? |
|||
15
Caesar
26.09.12
✎
13:47
|
(12) понял, попробую сейчас
|
|||
16
Caesar
26.09.12
✎
13:48
|
(13) вьюха - это, прошу прощения, что?))
|
|||
17
Caesar
26.09.12
✎
13:55
|
(12) без updatebatch новые строки в БД не добавляются, решил оставить.
|
|||
18
Ненавижу Неопределен
26.09.12
✎
14:00
|
СУБД какая?
|
|||
19
Caesar
26.09.12
✎
14:12
|
MS SQL
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |