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