Имя: Пароль:
1C
1С v8
ADO MySQL
,
0 abuca
 
30.10.13
11:34
Вот текст модуля

ПарамСоедСайт = Новый ПараметрыСоединенияВнешнегоИсточникаДанных;
    Соединение = Новый COMОбъект("ADODB.Connection");
    ПарамСоедСайт= "DRIVER={MySQL ODBC 3.51 Driver};SERVER=SERVER;DATABASE=DATABASE;UID=UID;PWD=PWD;Option=3";
    Соединение.Open(ПарамСоедСайт);
    НаборЗаписей = Новый COMОбъект("ADODB.RecordSet");                                                    
    НаборЗаписей.CursorLocation = 3;
    НаборЗаписей.LockType = 3;
    НаборЗаписей.ActiveConnection = Соединение;
    НаборЗаписей.Open("SELECT * FROM " + Таблица + ";");
    Для Каждого Стр Из МассивСтрок2 Цикл
        НаборЗаписей.AddNew();        
        Для Каждого Кл Из Товары.Колонки Цикл    
            Если Кл.Имя = "Синхронизировать" Тогда // добавлена нами
                Стр[кл.Имя]=Ложь;
                Продолжить;
            КонецЕсли;
            Зн = Стр[кл.Имя];
            НаборЗаписей.Fields(кл.Заголовок).value=Зн;
        КонецЦикла;
    КонецЦикла;
    НаборЗаписей.Update();
    НаборЗаписей.Close();
    Соединение.Close();

Ошибка:
{Форма.Форма.Форма(547)}: Ошибка при вызове метода контекста (AddNew)
        НаборЗаписей.AddNew();        
по причине:
Произошла исключительная ситуация (Microsoft Cursor Engine): Поставщик данных или другая служба вернули состояние E_FAIL.

Проследил в отладчике, ошибка возникает после выполнения запроса.
Запрос ВЫПОЛНЯЕТСЯ! Записи в набор попадают.

Аналогичная проблема разбиралась:
v8: V8: Работа с ADO

Попытка установить     НаборЗаписей.CursorLocation = 2 или 1

Позволяет работать AddNew() но, перестает работать
НаборЗаписей.Fields(кл.Заголовок).value=Зн;
на строковых полях неограниченной длины:
{Форма.Форма.Форма(552)}: Ошибка при установке значения атрибута контекста (Value)
            НаборЗаписей.Fields(кл.Заголовок).value=Зн;
по причине:
Произошла исключительная ситуация (Provider): Произошли ошибки во время выполнения многошаговой операции OLE DB. По возможности, проверьте значения всех состояний OLE DB. Работа не выполнена.

Надо заметить, что с другой похожей по структуре таблицей все проходит на ура и со строками неограниченной длины и с AddNew() с настройкой рекордсета  CursorLocation = 3;
Помогите! Третий день бьюсь!
1 abuca
 
30.10.13
11:48
UP
Можно воспользоваться INSERT INTO
но, там 62 столбца, надо ли прописывать значение каждого?
Я не силен в MySQL если кто знает подскажите как сделать с помощью INSERT
2 Jonny_Khomich
 
30.10.13
11:56
(1) можно прописать только те колонки, которые хочешь добавить.
3 Serginio1
 
30.10.13
12:01
(1) Там для длинных строк нужно размер указывать. Помню с Экселем мучался

Если Парам.Type=203 Тогда
                Парам.Size=СтрДлина(Значение)+1;
            КонецЕсли;    
            Парам.Value=Значение;
4 abuca
 
30.10.13
12:30
(2)
{Форма.Форма.Форма(542)}: Ошибка при вызове метода контекста (Execute)
    Соединение.Execute("INSERT INTO " + Таблица + " (product_id, product_quantity, name_ru-RU) values (22, 100, АбырвалГ);");
по причине:
Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [MySQL][ODBC 3.51 Driver][mysqld-5.1.70-log]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-RU) values (22, 100, АбырвалГ)' at line 1

поля, где в названии есть "-" ODBC начинает истерить
Можно ли INSERT INTO использовать не с названиями полей а с их порядковыми номерами? Подскажите синтаксис.

(3) сейчас в отладчике гляну что в типе возвращает
5 Серго62
 
30.10.13
12:36
Вот тут почитай, может поможет...
http://www.script-coding.com/ADO.html
6 abuca
 
30.10.13
12:37
(3) тип, я так понял 200 и видно, что Value недоступно ни для чтения ни для записи:
Value        Неопределено

Выражение    Значение    Тип
ActualSize    0    Число
Attributes    8    Число
DataFormat        Неопределено
DefinedSize    255    Число
Name    "name_ru-RU"    Строка
NumericScale    255    Число
OriginalValue        Неопределено
Precision    255    Число
Properties    COMОбъект    COMОбъект
Status    0    Число
Type    200    Число
UnderlyingValue    Ошибка чтения значения    
Value        Неопределено
7 abuca
 
30.10.13
12:41
(5) Респект! Этого очень не хватало! В сети собирал все разрозненно.
Item(index) Возвращает элемент коллекции по имени или порядковому номеру.
попробую так.
8 1dvd
 
30.10.13
12:45
(4) разве АбырвалГ не должен быть в кавыках?
9 abuca
 
30.10.13
12:51
(8) пробовал и 'Абырвалг' но до него не доходит. Дефис не нравится в названии поля. Сразу оговоримся. Названия полей в MySQL править не будем.
10 Serginio1
 
30.10.13
13:32
Попрбуй для интереса
Соединение.Execute("INSERT INTO " + Таблица + " (product_id, product_quantity, [name_ru-RU]) values (22, 100, АбырвалГ);");
11 abuca
 
30.10.13
13:37
(10)
{Форма.Форма.Форма(11)}: Ошибка при вызове метода контекста (Execute)
    Соединение.Execute(ТекстЗапроса);
по причине:
Произошла исключительная ситуация (Microsoft OLE DB Provider for ODBC Drivers): [MySQL][ODBC 3.51 Driver][mysqld-5.1.70-log]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '[name_ru-RU]) values (22, 100, АбырвалГ)' at line 1
12 Ёпрст
 
30.10.13
13:40
Соединение.Execute("INSERT INTO " + Таблица + " (product_id, product_quantity,name_ru-RU) values (22, 100, 'АбырвалГ');");
13 Ёпрст
 
30.10.13
13:41
Соединение.Execute("INSERT INTO " + Таблица + " (product_id, product_quantity, [name_ru-RU]) values (22, 100, 'АбырвалГ')");
14 Ёпрст
 
30.10.13
13:41
так точнее.
15 Ёпрст
 
30.10.13
13:46
ну или можно так еще попробовать
Соединение.Execute("INSERT INTO " + Таблица + " (product_id, product_quantity, `name_ru-RU`) values (22, 100, 'АбырвалГ')");
16 Ёпрст
 
30.10.13
13:46
с обратными ковычками для поля с дефисом
17 abuca
 
30.10.13
13:47
Ёпрст Ты Гений!!!! Кавычки!!!
18 abuca
 
30.10.13
13:48
Я уже форму написал куда запрос кидаю в виде строки.
Все перепробовал. Даже не знал где на клавиатуре есть такие ковычки ))))
19 Ёпрст
 
30.10.13
13:50
(17) это не я.. это гугля
:)
20 Ёпрст
 
30.10.13
13:52
надо бы это шнягу в базу знаний кинуть..
21 Ёпрст
 
30.10.13
13:52
мало ли.. кто будет еще искать
22 Serginio1
 
30.10.13
14:05
(21) Я тоже посмотрел на эти кавычки как какие то непривычные. Там и строки ими отделяют. А Вообще с My Sql тяжело работать, но многие его выбирают из-за бесплатности.

Блин у самого же есть

           ТекстЗапроса="SELECT name,part_number,description,description_russian,price,quantity
|FROM `zap_stocks`
|Where date_price<>'0000-00-00 00:00:00' and price>0 and
23 abuca
 
30.10.13
14:11
Кстати, по этой причине невозможно использовать Внешниеисточникиданных для загрузки данных с хостинга.
При получении полей 1С меняет все "-" на "_" и из поля уже ничего не вытащить. Ругается на синтаксис.
24 abuca
 
30.10.13
14:12
У меня задача наладить обмен с сайтом из УТ 10.3. Там базы на MySQL
25 Serginio1
 
30.10.13
14:30
(24) Кстати если сервер находится далеко, то можно сжать трафик добавив в строку соединения
COMPRESSED_PROTO=1
26 fly7
 
07.11.13
06:22
СПС !!!
тоже столкнулся с полем name_ru-RU
спасло `name_ru-RU`
2 дня убил...