|   |   | 
| 
 | Проблема с ADO | ☑ | ||
|---|---|---|---|---|
| 0
    
        Начинающий Восьмерочн 05.07.17✎ 15:13 | 
        Есть выгрузка данных из 1с в Postgresql с таким кодом
 Состояние("Выгружаются товары"); cmd = Новый COMОбъект("ADODB.command"); cmd.ActiveConnection = ADOConnection; cmd.CommandText = "DELETE FROM product"; cmd.Execute(); cmd.CommandText = АдоПараметры; cmd.Prepared = true; cmd.Parameters.Append(cmd.CreateParameter("@id", 3, 1,,)); cmd.Parameters.Append(cmd.CreateParameter("@name", 130, 1,128,)); cmd.Parameters.Append(cmd.CreateParameter("@pid", 3, 1,,)); cmd.Parameters.Append(cmd.CreateParameter("@base", 130, 1,3,)); cmd.Parameters.Append(cmd.CreateParameter("@fk_group", 3, 1,,)); cmd.Parameters.Append(cmd.CreateParameter("@grp", 11, 1,,)); cmd.Parameters.Append(cmd.CreateParameter("@barcode", 130, 1,16,)); cmd.Parameters.Append(cmd.CreateParameter("@popular", 3, 1,,)); cmd.Parameters.Append(cmd.CreateParameter("@price", 3, 1,,)); //id,name,pid,base,fk_group,grp,barcode,popular //INSERT INTO product (id,name,pid,base,fk_group,grp,barcode,popular) VALUES (?,?,?,?,?,?,?,?); Для каждого СтрокаТЗ из АДО_Запрос Цикл Сп = ИзСтрокиСРазделителями(СтрокаТЗ.Значения); cmd.Parameters.item(0).value = Число(Сп.Получить(0).Значение); cmd.Parameters.item(1).value = Сп.Получить(1).Значение; cmd.Parameters.item(2).value = Число(Сп.Получить(2).Значение); cmd.Parameters.item(3).value = Сп.Получить(3).Значение; cmd.Parameters.item(4).value = Число(Сп.Получить(4).Значение); cmd.Parameters.item(5).value = ?(Сп.Получить(5).Значение="0","false","true"); Штрихкод = СокрЛП(СтрЗаменить(Сп.Получить(6).Значение," ","")); Если СтрДлина(Штрихкод)>16 Тогда Штрихкод = Сред(Штрихкод,0,16); КонецЕсли; cmd.Parameters.item(6).value = Штрихкод;//СтрЗаменить(Сп.Получить(6).Значение," ",""); cmd.Parameters.item(7).value = Число(Сп.Получить(7).Значение); cmd.Parameters.item(8).value = Число(Сп.Получить(8).Значение); попытка cmd.Execute(); Исключение Сообщить(" " + ОписаниеОшибки()+" "+Число(Сп.Получить(0).Значение)); КонецПопытки КонецЦикла; Параметр grp имеет тип булево и в 2003 нормально работал этот код, при переходе на 2008 получаю ошибку {ВнешняяОбработка.такаято.Форма.Форма.Форма(1269)}: Ошибка при вызове метода контекста (Execute): Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): ERROR: column "grp" is of type boolean but expression is of type "char"; Error while preparing parameters причем ошибка происходит на в драйвере PostgreSQL а в провайдере Microsoft, как эту ситуацию исправить непонятно, не хочется переписывать этот кусок ведь ошибок в нем нет, может кто то сталкивался с подобным, что посоветуете. | |||
| 1
    
        Лефмихалыч 05.07.17✎ 15:14 | 
        "false","true" - это не булево. Это строка с изображением булева
 истина, ложь вместо этого используй | |||
| 2
    
        Лефмихалыч 05.07.17✎ 15:15 | 
        точнее - наоборот их местами поменяй.
 Ну, ты понял | |||
| 3
    
        Начинающий Восьмерочн 05.07.17✎ 15:25 | 
        Это уже измененный код в оригинале там false и true конечно, но то что указано строкой это никак не мешает, параметр видится верно http://clip2net.com/s/3LThDyX     | |||
| 4
    
        Ёпрст гуру 05.07.17✎ 15:38 | 
        та едет ?
 cmd.Parameters.item(5).value = ?(Сп.Получить(5).Значение="0",0,-1); | |||
| 5
    
        Начинающий Восьмерочн 05.07.17✎ 15:59 | 
        (4) Нет не работает.     | |||
| 6
    
        Ёпрст гуру 05.07.17✎ 16:06 | 
        (5) ну, тогда забей на передачу параметров, просто в тексте запроса пиши свои false/true     | |||
| 7
    
        Ёпрст гуру 05.07.17✎ 16:07 | 
        просто составляя динамически текст запроса     | |||
| 8
    
        Начинающий Восьмерочн 05.07.17✎ 16:12 | 
        (6)(7)  По видимому ничего не остается как отказаться от параметризованного запроса и переделать на динамическую строку, просто подумал, может есть простой выход.     | |||
| 9
    
        Начинающий Восьмерочн 06.07.17✎ 13:44 | 
        Динамическая строка запроса заработала нормально.     | |||
| 10
    
        Лефмихалыч 06.07.17✎ 13:52 | 
        (3) Да я прекрасно вижу, что cmd.Parameters.item(5).value - это true/false!
 У тебя причина всего этого в что, что ты в параметр, который должен быть true/false, суёшь строку. Причем, в момент, когда ты суёшь, ни чег оне происходит, т.к. проблема возникате тогда, когда ты выполняешь запрос с этим параметром. | |||
| 11
    
        Начинающий Восьмерочн 06.07.17✎ 15:13 | 
        (10) Это не так, там нормально видится параметр в отладчике 
 http://clip2net.com/s/3LThDyX и на скрине только один из вариантов сначала там было просто булево. | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |