Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Ошибка при  [new]
Lexx_SQL
Member

Откуда:
Сообщений: 566
Добрый день!
Загружаю программно файл Excel в БД SQLServer. Столкнулся с одним файлом , на котором вылетает ошибка:
Public ConnectionString As String = "Data Source=Server;Initial Catalog=Base;User ID=***;Password=***"
conn.Open("Provider=SQLOLEDB;" + ConnectionString)
conn.Execute("Select * into [table] FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;HDR=YES;Database=D:Program\Excel.xlsx','SELECT * FROM [Лист1$]')")

Поставщик OLE DB "Microsoft.ACE.OLEDB.12.0" для связанного сервера "(null)" вернул сообщение "External table is not in the expected format.".

Подскажите, пожалуйста, что делать. Файл Excel2007.Загрузка идет из директория сервера.
Спасибо.
2 июл 15, 17:03    [17844698]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
Lexx_SQL,
откройте книгу, Сохранить как... в Excel2007 или что там серверу требуется.
2 июл 15, 17:56    [17845041]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при  [new]
Lexx_SQL
Member

Откуда:
Сообщений: 566
Владислав Колосов,

Пробовал и пересохранять тоже
Проверил FileFormat=51, т.е. Excel2007.
Запрос в SQL manager выполняется, а с клиента нет. Не понимаю где копать, возможно в строке соединения коннекта.
Возможно конечно создать хранимую процедуру, чтоб запрос от сервера выполнялся, но хочется понять в чем тут проблема.
3 июл 15, 14:02    [17848755]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при  [new]
Glory
Member

Откуда:
Сообщений: 104760
Lexx_SQL
Возможно конечно создать хранимую процедуру, чтоб запрос от сервера выполнялся, но хочется понять в чем тут проблема.

Все переданные серверу запросы и так всегда выполняются на сервере

Lexx_SQL
Запрос в SQL manager выполняется, а с клиента нет.

И в запущенном на клиентской машине SQL manager вы авторизовались под тем же User ID=***;Password=*** ?
И используя SQLOLEDB ?
3 июл 15, 14:07    [17848778]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при  [new]
Lexx_SQL
Member

Откуда:
Сообщений: 566
Glory,

да, пользователь один, что в SQLменеджере , что в программе клиента.
SQL Менеджер и программа на одной машине.
SQLOLEDB прописываю в соединении программы "Provider=SQLOLEDB"
В SQL Менеджер просто выполняю запрос.
3 июл 15, 14:24    [17848877]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при  [new]
Glory
Member

Откуда:
Сообщений: 104760
Lexx_SQL
SQLOLEDB прописываю в соединении программы "Provider=SQLOLEDB"

И как вы его прописываете в SQL Менеджер-е ?

Lexx_SQL
В SQL Менеджер просто выполняю запрос.

А какой запрос сервер получает из клиентского приложения ?
3 июл 15, 14:29    [17848928]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20585
Lexx_SQL
conn.Execute("Select * into [table] FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;HDR=YES;Database=D:Program\Excel.xlsx','SELECT * FROM [Лист1$]')")
3 июл 15, 14:57    [17849104]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20585
Блин...
Lexx_SQL
conn.Execute("Select * into [table] FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;HDR=YES;Database=D:Program\Excel.xlsx','SELECT * FROM [Лист1$]')")

Вы задаёте ОТНОСИТЕЛЬНЫЙ путь. А вот какой каталог в этот момент на этом устройстве текущий - ХЗ... укажите абсолютный путь.
3 июл 15, 14:58    [17849113]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
Akina
Блин...
Lexx_SQL
conn.Execute("Select * into [table] FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;HDR=YES;Database=D:Program\Excel.xlsx','SELECT * FROM [Лист1$]')")

Вы задаёте ОТНОСИТЕЛЬНЫЙ путь. А вот какой каталог в этот момент на этом устройстве текущий - ХЗ... укажите абсолютный путь.



так он вроде и пытается указать абсолютный путь?

правда пропущен слэш

D:Program\Excel.xlsx
3 июл 15, 15:00    [17849129]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 20585
Winnipuh, я понятия не имею, что он пытается. Но я вижу, что он делает.
3 июл 15, 15:10    [17849208]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при  [new]
Lexx_SQL
Member

Откуда:
Сообщений: 566
Akina,

это путь к файлу относительно SQLServer. Т.е. он лежит на той же машине где и SQLServer.
3 июл 15, 16:45    [17849884]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31431
Lexx_SQL
Akina,

это путь к файлу относительно SQLServer. Т.е. он лежит на той же машине где и SQLServer.
У вас указан путь относительно текущего каталога. А нужно указать путь от корня диска, тома файловой системы.
3 июл 15, 17:04    [17850004]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при  [new]
Lexx_SQL
Member

Откуда:
Сообщений: 566
alexeyvg,

я не понимаю...D:\Program\Excel.xlsx и есть абсолютный путь.
Я с клиентской машины копирую файл на SQL сервер, а затем SQLServer забирает его у себя из директория D:\Program\Excel.xlsx.
3 июл 15, 17:15    [17850054]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31431
Lexx_SQL
я не понимаю...D:\Program\Excel.xlsx и есть абсолютный путь.
У вас в коде написано не D:\Program, а D:Program
Выясните, какой всё таки точно код у вас написан.
3 июл 15, 17:32    [17850132]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при  [new]
Lexx_SQL
Member

Откуда:
Сообщений: 566
alexeyvg,

всем спасибо...за полдня мучений выяснил, что когда программно закрываю файл требуется n-количество времени на закрытие.
Ошибка возникала тогда , когда файл еще не был закрыт. Пауза в программе 5 сек решила проблему.
3 июл 15, 19:09    [17850481]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при  [new]
СТУДЕНТ123
Guest
Lexx_SQL
alexeyvg,

всем спасибо...за полдня мучений выяснил, что когда программно закрываю файл требуется n-количество времени на закрытие.
Ошибка возникала тогда , когда файл еще не был закрыт. Пауза в программе 5 сек решила проблему.

Печальная ошибка, обычно перед открытием файла проверяют на поссивное состояние т.е. не активность
3 июл 15, 19:17    [17850502]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31431
СТУДЕНТ123
Lexx_SQL
alexeyvg,

всем спасибо...за полдня мучений выяснил, что когда программно закрываю файл требуется n-количество времени на закрытие.
Ошибка возникала тогда , когда файл еще не был закрыт. Пауза в программе 5 сек решила проблему.

Печальная ошибка, обычно перед открытием файла проверяют на поссивное состояние т.е. не активность
Можно ещё при появлении ошибки делать пару попыток открыть файл, с таймаутом.
3 июл 15, 19:30    [17850535]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при  [new]
Winnipuh
Member [заблокирован]

Откуда: Київ
Сообщений: 10428
СТУДЕНТ123
Lexx_SQL
alexeyvg,

всем спасибо...за полдня мучений выяснил, что когда программно закрываю файл требуется n-количество времени на закрытие.
Ошибка возникала тогда , когда файл еще не был закрыт. Пауза в программе 5 сек решила проблему.

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


а что это - "поссивное состояние"?
3 июл 15, 20:33    [17850721]     Ответить | Цитировать Сообщить модератору
 Re: Ошибка при  [new]
СТУДЕНТ123
Guest
Winnipuh
СТУДЕНТ123
пропущено...

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


а что это - "поссивное состояние"?

Сори за ожидание, не видел вопроса =) пора мне зарегистрироваться!
Я имел в виду проверку ХЕНДЛа файла в системе где размещен, ранее проверял блокировку, но не все программы блокируют источник при открытии ( к примеру тот же блакнот).
А для конкретного типа файла (EXCEL по описанию ТС) можно еще проще - FileOpen('C:\...\namefile.xls', fmShareExclusive)

вернет "-1" файл открыт другим пользователем при условии того, что файл присутствует по указанному пути, если его нет анологично функция вернет значение "-1"
6 июл 15, 19:17    [17859039]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить