Список форумов BOSSForum.RU - Форум. БОСС-Кадровик
Независимый форум, посвященный системе БОСС-Кадровик
и всему, что с ней связано
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Загрузка из Excel в Босс данных, большой объем
На страницу Пред.  1, 2, 3  След.
 
Начать новую тему   Ответить на тему    Список форумов BOSSForum.RU - Форум. БОСС-Кадровик -> X-язык
Предыдущая тема :: Следующая тема  
Автор Сообщение
Константин



Зарегистрирован: 02.05.2012
Сообщения: 39
Откуда: Красноярск

СообщениеДобавлено: Пт Июл 20, 2012 14:33    Заголовок сообщения: Ответить с цитатой

Mike писал(а):
Судя по ошибке (следуя тому, что я писал) - дело в драйвере, я бы попробовал:
1. Попробовать это сделать на компе, где стоит как минимум офис 2007. Дело в том, что когда устанавливается офисе, с ним устанавливается пакет драйверов. Может быть 2003 драйвера действительно не будут работать с такими вот вещами, а 2007 работает - это точно.
2. Если получилось, то посоветовал бы переустановить офис клиенту, если клиент переодически будет выполнять данные операции.



В данном случае будет проще на асемблере операционную систему для выгрузки написать чем убедить обновить офис ( Sad ). Хотя вариант с 2010 офисом проверю дома.

Остаются последний способ: считывания в цикле построчно, очень медленно но верно
_________________
return @@tMonth[%m]
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Vitaly
Большой шоколадный орден
Большой шоколадный орден


Зарегистрирован: 29.07.2008
Сообщения: 281
Откуда: Санкт-Петербург

СообщениеДобавлено: Пт Июл 20, 2012 14:58    Заголовок сообщения: Ответить с цитатой

Vitaly писал(а):
Константин писал(а):
Закрыл, перезапустил код - ошибка та же.


Проверьте, может у кого-то другого файл открыт... у нас была такая же ошибка при открытом файле


Ещё вопрос, где лежит файл Question
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Vitaly
Большой шоколадный орден
Большой шоколадный орден


Зарегистрирован: 29.07.2008
Сообщения: 281
Откуда: Санкт-Петербург

СообщениеДобавлено: Пт Июл 20, 2012 15:26    Заголовок сообщения: Ответить с цитатой

Константин писал(а):
Vitaly писал(а):
Эту тему тут уже обсуждали... вот пример загрузки
Код:
INSERT INTO #USER_st_Nachisl (idVO, Dop_idVO, Project, Invers, Name_pers, Schet_D, KP_D, Vid_KP_D, Schet_K, KP_K, Vid_KP_K, Excp, No_group)
Select * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;IMEX=1;Database=g_spr_pass', 'SELECT [КОД ВО БОСС], [Доп# Код], [Без проекта], [Смена знака],[Группа персонала], Дебит, КП_Д, Вид_КП_Д, Кредит, КП_К, Вид_КП_К, Исчключение, [Без группировки] FROM [Начисления_Удержания$]');


где g_spr_pass - полный путь к файлу



Код:
let FileName = '@@xFile(dlgopen ,"",0x8000c,"MS Excel Files (*.xls)|*.xls||","Выберите файл")';
if 'FileName' == '' then  {
 msg [\3Файл не выбран!]3,0x01;
 DESTROY @choose;
};


SELECT object_id('tempdb..#tmptmp') INTO :id_;
IF id_ != 0 THEN DROP TABLE #tmptmp;
FREE id_;
CREATE TABLE #tmptmp (
   tabnum nvarchar(30) NULL,
   szp nvarchar(30) NULL,
   summa varchar(150) NULL,
);


INSERT INTO #tmptmp (tabnum,fio,summa)
Select * FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;IMEX=1;Database=file_name', 'SELECT tabnum,fio,summ FROM [Лист1$]');


Модифицировал код из примера, но стала появляться ошибка




Сорри... другая у нас ошибка была... Ещё тонкость, если файл лежит в сети, то надо указывать полный путь.... т.е. \\Server\Имя сетевого диска\папка...\имя.xls
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Vitaly
Большой шоколадный орден
Большой шоколадный орден


Зарегистрирован: 29.07.2008
Сообщения: 281
Откуда: Санкт-Петербург

СообщениеДобавлено: Пт Июл 20, 2012 15:34    Заголовок сообщения: Ответить с цитатой

http://www.sql.ru/forum/actualthread.aspx?bid=1&tid=904836&pg=1&hl=distributed%20queries%20provider%20configured%20run%20single%20threaded%20apartment%20mode
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Константин



Зарегистрирован: 02.05.2012
Сообщения: 39
Откуда: Красноярск

СообщениеДобавлено: Пн Июл 23, 2012 06:23    Заголовок сообщения: Ответить с цитатой

За выходные пересмотрел/перепробовал все упомянутые примеры тут. Сделать загрузку "скопом" с устаревшим ПО невозможно.

Средствами VB не получилось реализовать. Может есть у кого любой работающий пример на X-языке?
_________________
return @@tMonth[%m]
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Nemoxur



Зарегистрирован: 30.04.2010
Сообщения: 49

СообщениеДобавлено: Ср Июл 25, 2012 11:43    Заголовок сообщения: Ответить с цитатой

Думаю, дальше разберетесь Very Happy
Реализация на Х языке Wink
Код:

Alias last_row as Long;
execute xOcxFree(*);
ALIAS FileToOpen = @@xFile(Dlgopen "","",1,"Worksheet Files (*.xls)|*.xls||; *.xls","Открыть файл для импорта") AS string;
IF FileToOpen == '' THEN error;
ADODB.Connection as AutoCon;
ADODB.Recordset as AutoSet;
Excel.Application as Excel;
AutoCon.Open('@@xUtil{dsq}');
AutoSet.MaxRecords = 0;
AutoSet.CursorLocation = 1;
Excel.Workbooks.Open('FileToOpen');
Excel.Worksheets(1).Activate;
Execute xSql{$
DELETE FROM user_imp_excel
};
execute xocx{
last_row = Excel.ActiveSheet.Cells.SpecialCells(11).Row;
};

Execute xocx{
AutoSet.Open('user_imp_excel',:AutoCon,0,3,2);
};
local vb.Connection==&AutoCon;
local vb.DestTable==&AutoSet;
local vb.Excel==&Excel;
local vb.last=last_row;
vb{
For r = 1 To last
            DestTable.AddNew
            DestTable("str1") = Excel.ActiveSheet.Cells(r,1)
            DestTable("str2") = Excel.ActiveSheet.Cells(r,2)
         DestTable("str3") = Excel.ActiveSheet.Cells(r,3)
         DestTable("str4") = Excel.ActiveSheet.Cells(r,4)
         DestTable("str5") = Excel.ActiveSheet.Cells(r,5)
         DestTable("str6") = Excel.ActiveSheet.Cells(r,6)
            DestTable.MoveNext
Next
DestTable.UpdateBatch
};
AutoSet.Close;
AutoCon.Close;
Excel.Workbooks.Close;
execute xOcxFree(AutoSet,AutoCon,Excel);
RETURN Импорт был произведен успешно!;
browser{select str1,str2,str3,str4,str5,str6 from user_imp_excel;};
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Константин



Зарегистрирован: 02.05.2012
Сообщения: 39
Откуда: Красноярск

СообщениеДобавлено: Пн Июл 30, 2012 07:57    Заголовок сообщения: Ответить с цитатой

Nemoxur, Спасибо) работает
_________________
return @@tMonth[%m]
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Denis



Зарегистрирован: 01.06.2011
Сообщения: 39

СообщениеДобавлено: Ср Сен 19, 2012 09:08    Заголовок сообщения: Ответить с цитатой

Добрый день!
Допишу сюда и свой вопросик.

Подскажите, как переменную из VBA перебросить обратно к SQL для дальнейшей обработки

Вот примерчик, где переменную "закидываем" в excel

vb
{
Dim tst
};
Let _tst:=123123 as string;
alias vb.tst=_tst;
vb {
Set Ex = GetObject(,"Excel.Application")
Set Sh = Ex.ActiveSheet
Sh.Cells (2,2)=tst
};

Если проделать с ячейкой (2,2) несколько операций, то потом как вытащить оттуда полученное значение обратно?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Mike
Большой шоколадный орден
Большой шоколадный орден


Зарегистрирован: 07.04.2011
Сообщения: 255

СообщениеДобавлено: Ср Сен 19, 2012 09:44    Заголовок сообщения: Ответить с цитатой

Написал наобум, может сработает =)
Цитата:
ALIAS bbb = vb.Sh.Cells(2,2).Value;
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Denis



Зарегистрирован: 01.06.2011
Сообщения: 39

СообщениеДобавлено: Ср Сен 19, 2012 10:21    Заголовок сообщения: Ответить с цитатой

Так не хочет.
Return выдает сообщение вот такого содержания vb.Sh.Cells(2,2).Value
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Mike
Большой шоколадный орден
Большой шоколадный орден


Зарегистрирован: 07.04.2011
Сообщения: 255

СообщениеДобавлено: Ср Сен 19, 2012 13:33    Заголовок сообщения: Ответить с цитатой

Ну а если после того, как что-то сделано с ячейкой
сделать:
Код:

vb{
Dim sss
sss = Sh.Cells(2,2).Value
};
ALIAS bbb = vb.sss;
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Denis



Зарегистрирован: 01.06.2011
Сообщения: 39

СообщениеДобавлено: Ср Сен 19, 2012 14:25    Заголовок сообщения: Ответить с цитатой

и так ненравится
опять же выдает через Return не значение ячейки а надпись "vb.sss"
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Mike
Большой шоколадный орден
Большой шоколадный орден


Зарегистрирован: 07.04.2011
Сообщения: 255

СообщениеДобавлено: Ср Сен 19, 2012 15:06    Заголовок сообщения: Ответить с цитатой

вместо alias попробуй Let
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Denis



Зарегистрирован: 01.06.2011
Сообщения: 39

СообщениеДобавлено: Ср Сен 19, 2012 15:13    Заголовок сообщения: Ответить с цитатой

Let bbb = vb.sss;

1ое сообщение
The multi-part identifer "vb.sss" could be bound

2ое сообщение
В операторе Let не совпадает число переменных и полей в запросе



При
Let bbb := vb.sss;

return "vb.sss"
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Mike
Большой шоколадный орден
Большой шоколадный орден


Зарегистрирован: 07.04.2011
Сообщения: 255

СообщениеДобавлено: Ср Сен 19, 2012 15:18    Заголовок сообщения: Ответить с цитатой

Вот оно что...
Ну сори тогда, я по сути гадал, так как проверить у меня не на чем =)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов BOSSForum.RU - Форум. БОСС-Кадровик -> X-язык Часовой пояс: GMT + 4
На страницу Пред.  1, 2, 3  След.
Страница 2 из 3

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Pоwerеd by рhpВB © 2001, 2005 рhpВB Grouр
Русская поддержка phрВB
Rambler's Top100 Рейтинг@Mail.ru Список форумов BOSSForum.RU