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