|
Модераторы: Akina |
|
Alex870 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 28.3.2016 Репутация: нет Всего: нет |
Доброго времени суток всем.
Столкнулся с такой проблемой: В хранимке загружается Excel в таблицу, но перед этим надо его немного поправить. Для этого решил написать скрипт на vbs. Проверил, из командной строки скрипт работает, а вот внутри процедуры:
Выдает ошибку, что не может получить доступ к файлу c:\myexcel.xlsx. Решил, что это особенности работы cscript, написал программку на delphi, делающую то же самое. Ситуация сохраняется, из командной строки программка отрабатывает, а из хранимки - не может получить доступ к файлу excel. Что может быть? Всё запускается под админом сервера. |
|||
|
||||
Akina |
|
|||
Советчик Профиль Группа: Модератор Сообщений: 20570 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 25 Всего: 453 |
Что, и процесс MS SQL Server тоже? можно, я буду сомневаться? Поправь просто права доступа к файлу, дай для группы аутентифицированных пользователей (или для группы "Все") доступ на хотя бы чтение файла (ну и содержимого каталога есссно). Для проверки - запусти из того же скрипта командный процессор и посмотри, от имени какой учётки он работает. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
Alex870 |
|
||||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 28.3.2016 Репутация: нет Всего: нет |
Конечно можно . Процесс sqlservr.exe запущен от имени админа. Он (админ) имеет доступ ко всем файлам. Но!... Я могу приведенным выше способом обратиться к любому файлу на сервере. Могу его (файл) удалить например:
А вот если я вызываю какую-то внешнюю программу, например cscript, которая в свою очередь пытается открыть какой-то файл, то у неё доступа к файлу уже нет. При этом сама программа (или скрипт) запускаются. С cmd.exe проверил. Сделал его запуск из скрипта. Cmd.exe запустился под админом. На папку доступ "Всем" тоже не помог. Думаю здесь дело в настройках именно самого MS SQL. Я пробовал аналогичную операцию сделать на 3-х разных серверах, естественно файлы там клал в разные каталоги. Везде результат одинаковый. |
||||
|
|||||
Alex870 |
|
||||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 28.3.2016 Репутация: нет Всего: нет |
Попробуйте пожалуйста у себя.
Сделайте вот такой простейший скрипт. Он заполняет в первой строке Excel первые сорок ячеек значениями.
Кладем его например в c:\1\script.vbs (куда доступ есть всем) Туда же кладем файл c:\1\excel.xlsx Пробуем из командной строки - всё должно работать, в excel.xlsx в первой строке появляются значения. А теперь пробуем вот это с сервера:
Если у кого-то это отработает -напишите пожалуйста. В смысле SQL запрос пройдет без ошибок, но вернет он информацию о том, что не удалось получить доступ к файлу c:\1\excel.xlsx Это сообщение отредактировал(а) Alex870 - 29.3.2016, 15:15 |
||||
|
|||||
Akina |
|
|||
Советчик Профиль Группа: Модератор Сообщений: 20570 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 25 Всего: 453 |
Тэк-с... постарайтесь получить более полную информацию об ошибке - хотя бы её расширенный код. Совсем хорошо, если запустите icacls и получите сведения об эффективных правах на нужный файл. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
Alex870 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 28.3.2016 Репутация: нет Всего: нет |
Да никакого кода нет. Запрос в MS SQL выполняется без ошибок.
Но, как результат, выводит сообщение "Приложению MS Excel не удалось получить доступ к файлу (и имя файла)" Попробуйте у себя запустить скрипт из моего предыдущего поста, Вы сами всё увидите. Это сообщение отредактировал(а) Alex870 - 29.3.2016, 14:09 |
|||
|
||||
Akina |
|
|||
Советчик Профиль Группа: Модератор Сообщений: 20570 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 25 Всего: 453 |
КТО выводит это сообщение? Cscript? Значит, отлаживайте скрипт. Дробите цепочки, выводите всё в дебаг-инфо (хоть msgbox-ами). Код поправьте (строка 6, например - нет у Excel.Application коллекции Workbook, есть коллекция Workbooks). В итоге ошибка должна быть максимально точно локализована. Как минимум. Ну нет у меня сейчас в доступе MS SQL, на котором я бы мог это проделать. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
Alex870 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 28.3.2016 Репутация: нет Всего: нет |
Это сообщение выводит скрипт, запущенный xp_cmdshell. Если скрипт запустить из командной строки он работает отлично. На счет ошибки в коде - виноват, я здесь (на форуме) его набирал вручную, а не копировал свой, т.к. не могу его перенести с сервера на машину, имеющую доступ в инет. Как же мне точно локализовать ошибку, если скрип рабочий (100%) и ошибку я вижу, но при запуске его из под xp_cmdshell, а уж как в нем локализовать - не знаю. Вообще думал, что xp_cmdshell запускается под тем пользователем, под которым запущен SQL сервер. Это же подтвердил эксперимент с cmd.exe, который Вы мне посоветовали. Однако запуск другой программы это одно, а доступ на запись к файлам - другое. Это сообщение отредактировал(а) Alex870 - 29.3.2016, 15:24 |
|||
|
||||
Akina |
|
|||
Советчик Профиль Группа: Модератор Сообщений: 20570 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 25 Всего: 453 |
Раздробить скрипт на неделимые куски, и разбавить выводом отладочной информации. Например, начало скрипта может выглядеть так:
и так далее... и смотрим, что сыплется в консолю. Добавлено через 1 минуту и 52 секунды Кстати, мне вот не нравится обращение к книге по номеру в коллекции. Особенно с учётом того, что ссылка на неё УЖЕ есть в переменной objWorkBook. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
Alex870 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 28.3.2016 Репутация: нет Всего: нет |
Попробовал, до set objWorkBook=objWorkBook.Open(fPath) всё отрабатывает корректно (в MS SQL). после скрипт выдает ошибку которую описывал 2 поста назад. В смысле запрос exce... выводит таблицу отчета о работе внешнего модуля, в которой указано, что Excel не смог получить доступ к файлу и написано имя и путь к файлу xlsx
Это сообщение отредактировал(а) Alex870 - 29.3.2016, 16:06 |
|||
|
||||
Akina |
|
|||
Советчик Профиль Группа: Модератор Сообщений: 20570 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 25 Всего: 453 |
То есть к ошибке приводит попытка выполнить оператор
И сообщение выдаётся именно cscript-ом... При этом - процесс EXCEL.Application запущен? проверь... влепи в скрипте минутную паузу перед этой строкой и посмотри дерево процессов. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
Alex870 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 28.3.2016 Репутация: нет Всего: нет |
Поставил паузу. В процессах появляются cmd.exe и Excel.exe запущенные под администраторской учеткой.
|
|||
|
||||
Alex870 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 28.3.2016 Репутация: нет Всего: нет |
Проблему решил!!!
Вот описание её решения: https://social.msdn.microsoft.com/Forums/en...server-2008-x64 Ну кто бы мог догадаться до такого!!! Это сообщение отредактировал(а) Alex870 - 30.3.2016, 16:34 |
|||
|
||||
Правила форума "MS SQL" | |
|
Запрещается! Публиковать ссылки и обсуждать взлом чего бы то ни было.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | MS SQL Server | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |