|   |   | 
| 
 | Добавление (или обновление) данных в 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     | 
 
 | Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |