|
Как передать значение параметра decimal из 1с в mysql через ADO? | ☑ | ||
---|---|---|---|---|
0
al_zzz
24.08.13
✎
13:20
|
Подскажите, по вопросу в сабже. Если передаю значение типа "Число", то получаю такую ошибку:http://vfl.ru/fotos/140c81932956011.html
А если пытаюсь использовать функцию "Формат", то ругается на неверный тип. |
|||
1
shuhard
24.08.13
✎
13:21
|
(0) а если число меньше 1000, конечно работает ?
|
|||
2
al_zzz
24.08.13
✎
13:26
|
(0)Нет, только ноль без проблем передается
|
|||
3
Rie
24.08.13
✎
13:26
|
(0) Что значит "передать"? Как параметр?
|
|||
4
al_zzz
24.08.13
✎
13:29
|
(3)Пар = Команда.CreateParameter(,НаборЗаписей.Fields.item(к).Type,1,НаборЗаписей.Fields.item(к).DefinedSize,тз[0][к]);
Команда.Parameters.Append(Пар); |
|||
5
al_zzz
24.08.13
✎
13:30
|
В тз[0][к] и лежит число, либо отформатированное число.
|
|||
6
shuhard
24.08.13
✎
13:32
|
(1) обойдись без параметрf, склеивай строку запроса и Where
|
|||
7
Rie
24.08.13
✎
13:36
|
(4) А тип параметра - точно 14?
|
|||
8
al_zzz
24.08.13
✎
13:42
|
(1) Такой вариант не подойдет в силу того, что в названии некоторых колонок мускула есть символ "-" и поэтому единственный допустимый синтаксис запроса "Insert into <Table_name> values(?,?,...?)"
(7) Тип читается из набора записей этой же таблицы - должен соответствовать. |
|||
9
al_zzz
24.08.13
✎
13:44
|
(7) В отладчике глянул - тип = 131.
|
|||
10
Rie
24.08.13
✎
13:49
|
(9) Это несущественно. В 5-й версии MySQL разницы нет (по крайней мере, быть не должно).
|
|||
11
Rie
24.08.13
✎
13:49
|
(4) А на каком из этих операторов валится?
|
|||
12
al_zzz
24.08.13
✎
13:50
|
Получается, ADODB.Recordset возвращает неправильный тип для decimal?
|
|||
13
al_zzz
24.08.13
✎
13:50
|
(11) На Execute()
|
|||
14
Rie
24.08.13
✎
13:51
|
(13) А точно ли в decimal дело? Как выглядит Execute?
|
|||
15
Rie
24.08.13
✎
13:53
|
+(14) Даже так - если он 0 безболезненно кушает, то тип у 0 - точно такой же, как и у, скажем, 10.2. Значит, тип его устраивает. А не устраивает что-то другое.
|
|||
16
al_zzz
24.08.13
✎
13:59
|
(15)Я пытался локализовать проблему, когда execute() отказалось выполняться. Получилось выполнить команду только когда закомментировал установку параметра.
В таблице три поля decimal, но в остальные два поля передавались нули и всё по ним нормально отрабатывалось. Тогда я поменял значения для этих полей в 1с на числа и ошибка снова появилась уже для них. |
|||
17
Rie
24.08.13
✎
14:20
|
(16) А если сменить тип, к примеру, на 5? И передать число. А MySQL - пусть уж сам преобразует?
|
|||
18
al_zzz
24.08.13
✎
14:37
|
Попробовал передавать 14(decimal) вместо типа из НаборЗаписей - та же ошибка.
Вот с таким синтаксисом отработало: Команда.Parameters.Item(к).Value = тз[0][к]; но все русские символы превратились в кракозябры и даты не встали. Попробовал тогда так: Если Массив.Найти(тз.Колонки[к].Имя)=Неопределено Тогда Команда.Parameters.Item(к).Value = тз[0][к]; Иначе Тип = НаборЗаписей.Fields.item(к).Type; Размер = НаборЗаписей.Fields.item(к).DefinedSize; Пар = Команда.CreateParameter(,Тип,1,Размер,тз[0][к]); Команда.Parameters.Append(Пар); КонецЕсли; в массиве названия полей с датами и русскими символами - та же ошибка. Пробовал наоборот - передавать в массиве только decimal и использовать для них Команда.Parameters.Item(к).Value = тз[0][к]; - та же ошибка. Что ещё можно попробовать? |
|||
19
Rie
24.08.13
✎
14:40
|
(18) Попробуйте тип 5 - это double. А MySql пусть его сам преобразует.
Русские символы? Попробуйте в начале запроса явно указать кодировку (set names). |
|||
20
al_zzz
24.08.13
✎
14:56
|
(19) На указание кодировки ругается: "Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [MySQL][ODBC 5.1 Driver][mysqld-5.1.67-log]SET NAMES not allowed by driver"
|
|||
21
al_zzz
24.08.13
✎
15:00
|
С 5 та же ошибка
|
|||
22
Rie
24.08.13
✎
15:08
|
(21) А если (в качестве теста) указать тип 3 и присвоить целое значение?
|
|||
23
Jaap Vduul
24.08.13
✎
15:41
|
(20) В 5.1 убрали поддержку SET NAMES
Попробуй явно указать charset в строке подключения. http://dev.mysql.com/doc/refman/5.1/en/charset.html |
|||
24
al_zzz
24.08.13
✎
16:23
|
(23) Указал и явно в строке подключения - кракозябры вместо русских символов.
|
|||
25
Torquader
24.08.13
✎
22:14
|
(24) 1С при работе с ADO переводит русские символы в Unicode, так как по OLE передаются только строки Unicode - попробуйте поработать в Unicode.
P.S. можно создать объект MSScriptControl и в нём через VbScript код лазить в ADO, не уверен, что VbScript переварит CDec (в VbScript такого типа тоже нет), но в остальных случаях осечки быть не должно. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |