Независимый форум, посвященный системе БОСС-Кадровик и всему, что с ней связано
|
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Константин
Зарегистрирован: 02.05.2012 Сообщения: 39 Откуда: Красноярск
|
Добавлено: Пт Июл 20, 2012 08:39 Заголовок сообщения: Загрузка из Excel в Босс данных, большой объем |
|
|
Есть таблица с множеством столбцов.
1 - табельный номер
2- ФИО
...
25 - отпуск в днях
Подскажите как реализовать загрузку из Excel определенных столбцов в таблицу боса? |
|
Вернуться к началу |
|
|
Mike Большой шоколадный орден
Зарегистрирован: 07.04.2011 Сообщения: 255
|
Добавлено: Пт Июл 20, 2012 09:40 Заголовок сообщения: |
|
|
Вот вам пример. Не буду объяснять что именно, думаю принцип и так понятен:
Код: | --Создаем таблицу для закачки данных
if object_id('tempdb..#user_table10') IS NOT NULL THEN DROP TABLE #user_table10;
CREATE TABLE [dbo].[#user_table10](
[id] INTEGER IDENTITY(1,1),
[_kod] [varchar](255) COLLATE Cyrillic_General_CI_AS NULL,
[_fio] [varchar](255) COLLATE Cyrillic_General_CI_AS NULL,
[_variant] [varchar](255) COLLATE Cyrillic_General_CI_AS NULL,
[_variant_name] [varchar](255) COLLATE Cyrillic_General_CI_AS NULL,
) ON [PRIMARY];
-- Выбор файла
let FileName = '@@xFile(dlgopen ,"",0x8000c,"MS Excel Files (*.xls)|*.xls||","Выберите файл")';
if 'FileName' == '' then {
msg [\3Файл не выбран!]3,0x01;
DESTROY @choose;
};
--Сохраняем данные из файла во временную таблицу
Execute xLogin{Open {DSN=for_xls;UID=1;PWD=1;},
scan #ss
SELECT *
FROM [filename].[Лист1$] NO_HINT
execute{
CON @ss:1,@ss:2, @ss:3,@ss:4;
execute xLogin{@@,
INSERT #user_table10
( _kod, _fio, _variant)
VALUES (@ss:1,@ss:2[''],@ss:4);
};
};
};
CON; |
Чтобы вот эта строчка работала, надо добавить odbc соединение одноименное(for_xls) к excel'ю:
Код: | Execute xLogin{Open {DSN=for_xls;UID=1;PWD=1;}, |
|
|
Вернуться к началу |
|
|
Константин
Зарегистрирован: 02.05.2012 Сообщения: 39 Откуда: Красноярск
|
Добавлено: Пт Июл 20, 2012 12:18 Заголовок сообщения: |
|
|
код очень похож на тот что необходим, но появились проблемы:
Если в ODBC не указать файл xls, то вылазит форма регистрации подключения к RP-Server, если указать то ошибка "Dynamic cursor not supported by ODBC driver".
Может в DSN надо создавать на основе особого драйвера БД? |
|
Вернуться к началу |
|
|
Mike Большой шоколадный орден
Зарегистрирован: 07.04.2011 Сообщения: 255
|
Добавлено: Пт Июл 20, 2012 12:52 Заголовок сообщения: |
|
|
Да, надо указывать определенный драйвер.
Driver do Excel - так он называется.
В "настройках" нужно указать его имя "for_xls" (если не менять имя в процедуре), и указать любой файл эксель, в поле, где это требуется. |
|
Вернуться к началу |
|
|
Константин
Зарегистрирован: 02.05.2012 Сообщения: 39 Откуда: Красноярск
|
Добавлено: Пт Июл 20, 2012 13:07 Заголовок сообщения: |
|
|
тогда ошибка появляется:"Dynamic cursor not supported by ODBC driver"
при том ругается на строки:
Код: | scan @ss SELECT * FROM [filename].[Лист1$] NO_HINT execute{
CON @ss:1,@ss:2, @ss:3;
execute xLogin{@@, INSERT #user_table10 (_kod, _fio, _variant) VALUES (@ss:1,@ss:2[''],@ss:3);
};
}; |
_________________ return @@tMonth[%m] |
|
Вернуться к началу |
|
|
Константин
Зарегистрирован: 02.05.2012 Сообщения: 39 Откуда: Красноярск
|
Добавлено: Пт Июл 20, 2012 13:11 Заголовок сообщения: |
|
|
файл Excel выглядит примерно так
т.н. ФИО ЗП
123 А 10000
234 Б 20000
125 С 30000 _________________ return @@tMonth[%m] |
|
Вернуться к началу |
|
|
Vitaly Большой шоколадный орден
Зарегистрирован: 29.07.2008 Сообщения: 281 Откуда: Санкт-Петербург
|
Добавлено: Пт Июл 20, 2012 13:14 Заголовок сообщения: |
|
|
Эту тему тут уже обсуждали... вот пример загрузки Код: | 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 - полный путь к файлу |
|
Вернуться к началу |
|
|
Константин
Зарегистрирован: 02.05.2012 Сообщения: 39 Откуда: Красноярск
|
Добавлено: Пт Июл 20, 2012 13:31 Заголовок сообщения: |
|
|
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$]'); |
Модифицировал код из примера, но стала появляться ошибка
_________________ return @@tMonth[%m] |
|
Вернуться к началу |
|
|
Vitaly Большой шоколадный орден
Зарегистрирован: 29.07.2008 Сообщения: 281 Откуда: Санкт-Петербург
|
Добавлено: Пт Июл 20, 2012 13:34 Заголовок сообщения: |
|
|
Закройте файл, с открытым файлом загрузка не хочет работать |
|
Вернуться к началу |
|
|
Константин
Зарегистрирован: 02.05.2012 Сообщения: 39 Откуда: Красноярск
|
Добавлено: Пт Июл 20, 2012 13:39 Заголовок сообщения: |
|
|
Закрыл, перезапустил код - ошибка та же. _________________ return @@tMonth[%m] |
|
Вернуться к началу |
|
|
Mike Большой шоколадный орден
Зарегистрирован: 07.04.2011 Сообщения: 255
|
Добавлено: Пт Июл 20, 2012 13:49 Заголовок сообщения: |
|
|
Константин писал(а): | тогда ошибка появляется:"Dynamic cursor not supported by ODBC driver"
при том ругается на строки:
Код: | scan @ss SELECT * FROM [filename].[Лист1$] NO_HINT execute{
CON @ss:1,@ss:2, @ss:3;
execute xLogin{@@, INSERT #user_table10 (_kod, _fio, _variant) VALUES (@ss:1,@ss:2[''],@ss:3);
};
}; |
|
DSn правильно сделали?
Может обновить драйвер нужно? |
|
Вернуться к началу |
|
|
Константин
Зарегистрирован: 02.05.2012 Сообщения: 39 Откуда: Красноярск
|
Добавлено: Пт Июл 20, 2012 14:01 Заголовок сообщения: |
|
|
Mike писал(а): | Константин писал(а): | тогда ошибка появляется:"Dynamic cursor not supported by ODBC driver"
при том ругается на строки:
Код: | scan @ss SELECT * FROM [filename].[Лист1$] NO_HINT execute{
CON @ss:1,@ss:2, @ss:3;
execute xLogin{@@, INSERT #user_table10 (_kod, _fio, _variant) VALUES (@ss:1,@ss:2[''],@ss:3);
};
}; |
|
DSn правильно сделали?
Может обновить драйвер нужно? |
Ещё раз проверил наименование DSN.
код
Код: | --Создаем таблицу для закачки данных
if object_id('tempdb..#user_table10') IS NOT NULL THEN DROP TABLE #user_table10;
CREATE TABLE [dbo].[#user_table10](
[id] INTEGER IDENTITY(1,1),
[_kod] [varchar](255) COLLATE Cyrillic_General_CI_AS NULL,
[_fio] [varchar](255) COLLATE Cyrillic_General_CI_AS NULL,
[_variant] [varchar](255) COLLATE Cyrillic_General_CI_AS NULL,
[_variant_name] [varchar](255) COLLATE Cyrillic_General_CI_AS NULL,
) ON [PRIMARY];
-- Выбор файла
let FileName = '@@xFile(dlgopen ,"",0x8000c,"MS Excel Files (*.xls)|*.xls||","Выберите файл")';
if 'FileName' == '' then {
msg [\3Файл не выбран!]3,0x01;
DESTROY @choose;
};
--Сохраняем данные из файла во временную таблицу
Execute xLogin{Open {DSN=to_xls;UID=1;PWD=1;},
scan @ss SELECT * FROM [filename].[Лист1$] NO_HINT
execute{
CON @ss:1,@ss:2, @ss:3;
execute xLogin{@@, INSERT #user_table10 (_kod, _fio, _variant) VALUES (@ss:1,@ss:2[''],@ss:3);
};
};
};
CON; |
_________________ return @@tMonth[%m] |
|
Вернуться к началу |
|
|
Константин
Зарегистрирован: 02.05.2012 Сообщения: 39 Откуда: Красноярск
|
Добавлено: Пт Июл 20, 2012 14:04 Заголовок сообщения: |
|
|
Т.к. предположить какой офис пользует клиент мы не можем , поэтому все разрабатываем под 2003. _________________ return @@tMonth[%m] |
|
Вернуться к началу |
|
|
Vitaly Большой шоколадный орден
Зарегистрирован: 29.07.2008 Сообщения: 281 Откуда: Санкт-Петербург
|
Добавлено: Пт Июл 20, 2012 14:20 Заголовок сообщения: |
|
|
Константин писал(а): | Закрыл, перезапустил код - ошибка та же. |
Проверьте, может у кого-то другого файл открыт... у нас была такая же ошибка при открытом файле |
|
Вернуться к началу |
|
|
Mike Большой шоколадный орден
Зарегистрирован: 07.04.2011 Сообщения: 255
|
Добавлено: Пт Июл 20, 2012 14:24 Заголовок сообщения: |
|
|
Судя по ошибке (следуя тому, что я писал) - дело в драйвере, я бы попробовал:
1. Попробовать это сделать на компе, где стоит как минимум офис 2007. Дело в том, что когда устанавливается офисе, с ним устанавливается пакет драйверов. Может быть 2003 драйвера действительно не будут работать с такими вот вещами, а 2007 работает - это точно.
2. Если получилось, то посоветовал бы переустановить офис клиенту, если клиент переодически будет выполнять данные операции. |
|
Вернуться к началу |
|
|
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|