Имя: Пароль:
1C
1С v8
1c adodb recordset на сервере 64
0 Noxvil
 
13.12.12
15:57
Добрый день win server 2008 x64, 1c 8.2.16.368.

Есть код, который делает запрос к файлику csv и создаёт из него таблицу значений...

Выглядит он так:

"Раз";"Раз";"Раз"
"Раз";"Раз";"Раз"

КолПолей = 3;

ДатаНач = ТекущаяДата();

Папка = Параметры.Папка;
ИмяФайла = Параметры.ИмяФайла;
КолПолей = 3;

Текст = "[" + ИмяФайла + "]

|ColNameHeader=false

|Format=Delimited(;)

|TextDelimiter=none

|CharacterSet=ANSI

|";


Текст = Текст + "Col" + 1 + "=Field" + 1 + " text" + Символы.ПС;    
Текст = Текст + "Col" + 2 + "=Field" + 2 + " text" + Символы.ПС;    
Текст = Текст + "Col" + 3 + "=Field" + 3 + " text" + Символы.ПС;    

Сообщить(Текст);

ТекстДок = Новый ТекстовыйДокумент;
ТекстДок.УстановитьТекст(Текст);
ТекстДок.Записать(Папка + "Schema.ini");


objRec = Новый COMОбъект("ADODB.Recordset");

strQuery = "SELECT * FROM [" + ИмяФайла + "]";
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Папка + ";Extended Properties=""text;""";
adOpenStatic = 3;
adLockOptimistic = 3;
adCmdText = 1;

ТаблЗнач = Новый ТаблицаЗначений;
Для ы = 1 По КолПолей Цикл    
   ТаблЗнач.Колонки.Добавить();    
КонецЦикла;

objRec.Open(strQuery, strConn, adOpenStatic, adLockOptimistic, adCmdText);
КолСтрок = objRec.RecordCount;

Ном = 1;

Пока Не objRec.EOF Цикл
   
   Если Ном % 500 = 0 Тогда
       
       Состояние(ИмяФайла + " " + Ном + " из " + КолСтрок);
       
   КонецЕсли;
   
   НовСтр = ТаблЗнач.Добавить();
   
   Для i=0 По objRec.Fields.Count-1 Цикл
       
       НовСтр[i] = Строка(objRec.Fields(i).Value);
       
   КонецЦикла;
   
   objRec.MoveNext();
   
   Ном = Ном + 1;
   
КонецЦикла;

objRec.Close();

Проблема в том, что если запускать на рабочей машине этот код - то всё ок, а в регламентном (т.е. х64) то выходит ошибка:

{ОбщийМодуль.УправлениеБиллингом.Модуль(616)}: Error calling context method (Open)
reason:
An exception has occurred: The stub received bad data.

Причём компоненты Microsoft.Jet.OLEDB.4.0 и ADODB.Recordset я зарегистрировал как полагается... (Книга знаний: Вызов 32-битных COM-объектов на стороне 64-битного сервера 1С

Уже второй день бьюсь... В чём проблема?
1 cw014
 
13.12.12
16:00
> запрос к файлику csv

А текстовые файлы отменили? Или теперь модно нагружать систему экземпляром объекта OLE для чтения текстового файла?
2 Noxvil
 
13.12.12
16:01
Это работает быстрее, по этому так и хочется оставить.
3 Noxvil
 
13.12.12
16:02
Кстати, это было обсуждено в ветке (v8: 1c подключение к csv...
4 Noxvil
 
13.12.12
16:10
Коллеги, есть ли дельные рекомендации?
5 Noxvil
 
13.12.12
16:19
Коллеги!!! Помогите 1снику, а то он дальше не может 1сничать...!!! ))
6 Noxvil
 
13.12.12
16:36
Это всё ещё актульно...
7 shuhard
 
13.12.12
16:37
(5) отряд не заметил потери бойца (с)
8 Noxvil
 
13.12.12
16:55
Нет ответов?
9 Serginio1
 
13.12.12
17:05
Ну вопервых поставь
Microsoft.ACE.OLEDB.12.0
но все офисные приложения должны быть 64 разрядными. и уже из 32 разрядно 8 ки у тебя к нему не будет доступа, только с 64 разрядно сервера приложений
10 Noxvil
 
13.12.12
17:21
Так но у меня нет офиса на сервере...
У меня есть только компоненты 32 разрядные...

Если я буду использовать "Microsoft.ACE.OLEDB.12.0" мне нужно будет менять код 1с?
11 Serginio1
 
13.12.12
17:23
Конечно,провайдер то другой. То есть поменять строку подключения
12 Serginio1
 
13.12.12
17:26
Компоненты  тоже все должны быть 64 разрядные.
http://www.microsoft.com/en-us/download/details.aspx?id=13255
13 Noxvil
 
13.12.12
17:28
А что именно кроме "povider=" мне надо поменять?
Там кардинально другое подключение?
14 Serginio1
 
13.12.12
17:31
strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Папка + ";Extended Properties=""text;""";
15 Serginio1
 
13.12.12
17:34
Для экселей типа
СтрокаПодключения = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source = "+ИмяФайла;
   СтрокаПодключения = СтрокаПодключения + "; Extended Properties = "+"""Excel 12.0"+";HDR=NO;IMEX=1"";";
Смотри по ссылке в 12.

Для создания экселя в нужном формате .xlsx
СтрокаПодключения = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source="+ИмяФайлаЭксель+";Extended Properties=Excel 12.0 Xml;";
16 Noxvil
 
13.12.12
17:44
Слушай, это вообще для файла csv, эксель здесь вообще не будет задействоваться...

Заранее - спасибо. Проверить смогу только в течении 2 дней, пока мне условия дадут... Т.к. новое программное обеспечение только после снапшота...
17 Noxvil
 
13.12.12
17:45
Кстати, напомню, что мне это надо именно для того, чтобы из таблицы csv сделать таблицу значений в 1с.

Ещё раз спасибо.
18 Serginio1
 
13.12.12
17:48
(17) Ну рано или позно все равно придется столкнуться с экселем. Ну а я ксв читаю v8: Обработка csv файла около 300 000 строк. смотри 26
Просто ты уже на сервере из 32 разрядного приложения не сможешь вызвать 32 разрядный драйвер
19 Noxvil
 
13.12.12
17:54
А этот метод выходит быстрее?

Это действие выполняется только на 64 сервере...
20 Noxvil
 
13.12.12
17:56
Я так понял, что это стандартный обход строк с выбором данных?
21 Serginio1
 
13.12.12
18:01
(18) Метод из 17 не может быть быстрее так как написан на 1С, но достаточно быстр. И ты не привязан к внешник драйверам, длл итд. Меня скорость устраивает а иногда приходится обрабатывать по 100 300 тысяч строк.