Имя: Пароль:
1C
1С v8
Update в postgresql из 1с
, , ,
0 10kgcaxapa
 
31.08.17
11:14
Всем привет!
Возникла проблема при изменении записи в таблице sql. Запрос select к базе на сервере отрабатывает без ошибок,но вот update не работает,хотя в pgadmin на localhost та же конструкция работает. Может кто-что подскажет?Может есть какие-нибудь права на чтение-запись?


перем НаборЗаписей, ИдБаланса;
Процедура КнопкаВыполнитьНажатие(Кнопка)
    Connection = Новый COMОбъект("ADODB.CONNECTION");
    Connection.ConnectionString = "Driver={PostgreSQL ODBC Driver(Unicode)}; Server="+"172.21.3.251"+";Port=" +
    "5432"+";Database="+"set"+";Uid="+"postgres"+";Pwd="+"00PaSsMSSQL!"+";STMT="+"utf8";        
    Попытка            
        //Состояние("Подключение к базе PostgreSQL...");
        Connection.open();            
        //Сообщить("База PostgreSQL подключена");
    Исключение            
        Сообщить("Не могу подключиться к базе PostgreSQL ");
    КонецПопытки;  
    
    
    НаборЗаписей = Новый ComObject("ADODB.RecordSet");
    Команда = Новый COMОбъект("ADODB.Command");
    Попытка    
        Команда.ActiveConnection = Connection;
        ТекстЗапроса=
        "SELECT
        |cards_bonusaccounts_balance.bonusaccounts_id
        |FROM
        | public.cards_bonusaccounts_balance,
        |public.card_cards,
        | public.card_internalcard_bonusaccount
        |WHERE
        |cards_bonusaccounts_balance.bonusaccounts_id = card_internalcard_bonusaccount.bonusaccountid AND
        |card_internalcard_bonusaccount.cardid = card_cards.id AND
        |cards_bonusaccounts_balance.balancetype = 0 and
        |card_cards.numberfield='"+НомерКарты+"'";
        
        Команда.CommandText =ТекстЗапроса;
        НаборЗаписей = Команда.Execute();
        ИдБаланса=НаборЗаписей.Fields(0).Value;

            Исключение    
        Сообщить("Нет данных.");
                Возврат;
    КонецПопытки;
          Сообщить(ИдБаланса);
          
          
          
Команда = Новый COMОбъект("ADODB.Command");
    Попытка    
Команда.ActiveConnection = Connection;
ТекстЗапроса =
"UPDATE cards_bonusaccounts_balance
|set ammount=0
|WHERE cards_bonusaccounts_balance.balancetype = 0 and
|cards_bonusaccounts_balance.bonusaccounts_id = '"+Формат(ИдБаланса,"ЧГ=0")+"'";
Команда.Execute(ТекстЗапроса);
Исключение
Сообщить("Не получилось");
КонецПопытки;

КонецПроцедуры
1 Вафель
 
31.08.17
11:15
id разве строка?
2 10kgcaxapa
 
31.08.17
11:16
(1) Это формат числа
3 10kgcaxapa
 
31.08.17
11:26
4 LuciferArh
 
31.08.17
11:31
(0) А какой ошибкой матерится? Сам текст запроса, который отдается в команду, можешь привести?
5 LuciferArh
 
31.08.17
11:32
(4) + ошибка - это не та, которая "Не получилось", а реальная, которую сервер сообщает.
6 10kgcaxapa
 
31.08.17
11:35
(5) А как узнать? Я не в куре...Где-то в логах видно?
7 arsik
 
гуру
31.08.17
11:38
(6) ОписаниеОшибки()
8 Вафель
 
31.08.17
11:40
да просто попытку убрать
9 10kgcaxapa
 
31.08.17
11:42
{Форма.Форма.Форма(52)}: Ошибка при вызове метода контекста (Execute): Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): Не был задан текст команды для объекта команды.
10 Вафель
 
31.08.17
11:44
А если так
Команда.CommandText =ТекстЗапроса;
Команда.Execute()
11 Господин ПЖ
 
31.08.17
11:47
Команда.CommandText =ТекстЗапроса;
НаборЗаписей = Команда.Execute();
    

Команда.Execute(ТекстЗапроса);

ничего не смущает?

Команда про свой тип: Команда.CommandType = adCmdText;

сама догадываться должна?
12 10kgcaxapa
 
31.08.17
11:49
(10) Так работает,спасибо)