Как передать значение параметра decimal из 1с в mysql через ADO? #678169


#0 by al_zzz
Подскажите, по вопросу в сабже. Если передаю значение типа "Число", то получаю такую ошибку: А если пытаюсь использовать функцию "Формат", то ругается на неверный тип.
#1 by shuhard
а если число меньше 1000, конечно работает ?
#2 by al_zzz
Нет, только ноль без проблем передается
#3 by Rie
Что значит "передать"? Как параметр?
#4 by al_zzz
#5 by al_zzz
В тз[0][к] и лежит число, либо отформатированное число.
#6 by shuhard
обойдись без параметрf, склеивай строку запроса и Where
#7 by Rie
А тип параметра - точно 14?
#8 by al_zzz
Такой вариант не подойдет в силу того, что в названии некоторых колонок мускула есть символ "-" и поэтому единственный допустимый синтаксис запроса "Insert into <Table_name> values(?,?,...?)" Тип читается из набора записей этой же таблицы - должен соответствовать.
#9 by al_zzz
В отладчике глянул - тип = 131.
#10 by Rie
Это несущественно. В 5-й версии MySQL разницы нет (по крайней мере, быть не должно).
#11 by Rie
А на каком из этих операторов валится?
#12 by al_zzz
Получается, ADODB.Recordset возвращает неправильный тип для decimal?
#13 by al_zzz
На Execute
#14 by Rie
А точно ли в decimal дело? Как выглядит Execute?
#15 by Rie
+ Даже так - если он 0 безболезненно кушает, то тип у 0 - точно такой же, как и у, скажем, 10.2. Значит, тип его устраивает. А не устраивает что-то другое.
#16 by al_zzz
Я пытался локализовать проблему, когда execute отказалось выполняться. Получилось выполнить команду только когда закомментировал установку параметра. В таблице три поля decimal, но в остальные два поля передавались нули и всё по ним нормально отрабатывалось. Тогда я поменял значения для этих полей в 1с на числа и ошибка снова появилась уже для них.
#17 by Rie
А если сменить тип, к примеру, на 5? И передать число. А MySQL - пусть уж сам преобразует?
#18 by al_zzz
Попробовал передавать 14(decimal) вместо типа из НаборЗаписей - та же ошибка. Вот с таким синтаксисом отработало:    но все русские символы превратились в кракозябры и даты не встали. Попробовал тогда так: Если Массив.Найти(тз.Колонки[к].Имя)=Неопределено Тогда   в массиве названия полей с датами и русскими символами - та же ошибка. Пробовал наоборот - передавать в массиве только decimal и использовать для них Команда.Parameters.Item(к).Value = тз[0][к];  - та же ошибка. Что ещё можно попробовать?
#19 by Rie
Попробуйте тип 5 - это double. А MySql пусть его сам преобразует. Русские символы? Попробуйте в начале запроса явно указать кодировку (set names).
#20 by al_zzz
На указание кодировки ругается: "Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [MySQL][ODBC 5.1 Driver][mysqld-5.1.67-log]SET NAMES not allowed by driver"
#21 by al_zzz
С 5 та же ошибка
#22 by Rie
А если (в качестве теста) указать тип 3 и присвоить целое значение?
#23 by Jaap Vduul
В 5.1 убрали поддержку SET NAMES Попробуй явно указать charset в строке подключения.
#24 by al_zzz
Указал и явно в строке подключения - кракозябры вместо русских символов.
#25 by Torquader
1С при работе с ADO переводит русские символы в Unicode, так как по OLE передаются только строки Unicode - попробуйте поработать в Unicode. P.S. можно создать объект MSScriptControl и в нём через VbScript код лазить в ADO, не уверен, что VbScript переварит CDec (в VbScript такого типа тоже нет), но в остальных случаях осечки быть не должно.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С