Независимый форум, посвященный системе БОСС-Кадровик и всему, что с ней связано
|
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Константин
Зарегистрирован: 02.05.2012 Сообщения: 39 Откуда: Красноярск
|
Добавлено: Пт Июл 20, 2012 14:33 Заголовок сообщения: |
|
|
Mike писал(а): | Судя по ошибке (следуя тому, что я писал) - дело в драйвере, я бы попробовал:
1. Попробовать это сделать на компе, где стоит как минимум офис 2007. Дело в том, что когда устанавливается офисе, с ним устанавливается пакет драйверов. Может быть 2003 драйвера действительно не будут работать с такими вот вещами, а 2007 работает - это точно.
2. Если получилось, то посоветовал бы переустановить офис клиенту, если клиент переодически будет выполнять данные операции. |
В данном случае будет проще на асемблере операционную систему для выгрузки написать чем убедить обновить офис ( ). Хотя вариант с 2010 офисом проверю дома.
Остаются последний способ: считывания в цикле построчно, очень медленно но верно _________________ return @@tMonth[%m] |
|
Вернуться к началу |
|
 |
Vitaly Большой шоколадный орден

Зарегистрирован: 29.07.2008 Сообщения: 281 Откуда: Санкт-Петербург
|
Добавлено: Пт Июл 20, 2012 14:58 Заголовок сообщения: |
|
|
Vitaly писал(а): | Константин писал(а): | Закрыл, перезапустил код - ошибка та же. |
Проверьте, может у кого-то другого файл открыт... у нас была такая же ошибка при открытом файле |
Ещё вопрос, где лежит файл  |
|
Вернуться к началу |
|
 |
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 Откуда: Санкт-Петербург
|
|
Вернуться к началу |
|
 |
Константин
Зарегистрирован: 02.05.2012 Сообщения: 39 Откуда: Красноярск
|
Добавлено: Пн Июл 23, 2012 06:23 Заголовок сообщения: |
|
|
За выходные пересмотрел/перепробовал все упомянутые примеры тут. Сделать загрузку "скопом" с устаревшим ПО невозможно.
Средствами VB не получилось реализовать. Может есть у кого любой работающий пример на X-языке? _________________ return @@tMonth[%m] |
|
Вернуться к началу |
|
 |
Nemoxur
Зарегистрирован: 30.04.2010 Сообщения: 49
|
Добавлено: Ср Июл 25, 2012 11:43 Заголовок сообщения: |
|
|
Думаю, дальше разберетесь
Реализация на Х языке
Код: |
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 Заголовок сообщения: |
|
|
Вот оно что...
Ну сори тогда, я по сути гадал, так как проверить у меня не на чем =) |
|
Вернуться к началу |
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|