из excel в MSSQL #733861


#0 by kodblack
Добрый день! Подскажите - как быть. Мне нужно из таблицы excel в автоматическом режиме производить выгрузку данных в БД SQL. На VBS - но выдает ошибку. Код Visual Basic Dim cn As ADODB.Connection     Dim strSQL As String     Dim lngRecsAff As Long     Set cn = New ADODB.Connection     cn.Open "Provider=SQLOLEDB;Data Source=<compsqlexpress>;" & _         "Initial Catalog=<test>;User ID=<sa>;Password=<pass>"     'Import by using OPENDATASOURCE.     strSQL = "SELECT * INTO XLImport6 FROM " & _         "OPENDATASOURCE('Microsoft.Jet.OLEDB.4.0', " & _         "'Data Source=D:111.xls;" & _         "Extended Properties=Excel 8.0')...[Customers$]"     Debug.Print strSQL     cn.Execute strSQL, lngRecsAff, adExecuteNoRecords     Debug.Print "Records affected: " & lngRecsAff     'Import by using OPENROWSET and object name.     strSQL = "SELECT * INTO XLImport7 FROM " & _         "OPENROWSET('Microsoft.Jet.OLEDB.4.0', " & _         "'Excel 8.0;Database=D:111.xls', " & _         "[Customers$])"     Debug.Print strSQL     cn.Execute strSQL, lngRecsAff, adExecuteNoRecords     Debug.Print "Records affected: " & lngRecsAff     'Import by using OPENROWSET and SELECT query.     strSQL = "SELECT * INTO XLImport8 FROM " & _         "OPENROWSET('Microsoft.Jet.OLEDB.4.0', " & _         "'Excel 8.0;Database=D:111.xls', " & _         "'SELECT * FROM [Customers$]')"     Debug.Print strSQL     cn.Execute strSQL, lngRecsAff, adExecuteNoRecords     Debug.Print "Records affected: " & lngRecsAff     cn.Close     Set cn = Nothing Таблица excel типа NO    ASD    Latitude    Longitude    DF    FG    Kod_OK    Pyncty_ 1    123    64.527386    40.561819    1545,55    55455,56    75.22    456546,56
#1 by Andrewww123
Видимо, сейчас намекнут на текст ошибки.
#2 by kodblack
хотелось бы :(
#3 by rsv
Мутно как то все .   Настройте для начала в скуле линкованный сервер на источник данных Exel. Через него будете читать через OpenQuery например. Постестите все в MS Manag Studio, а опосля уже ADO.
#4 by bolobol
что такое? Ошибка есть, а текста ошибки нет, что ли?
#5 by Andrewww123
Раз хотелось, намекаю :) Напиши текст ошибки.
#6 by dk
при коннекте к Excel нужно указывать что названия колонок берется из 1-й строки попробуй HDR=Yes указать
#7 by kodblack
Сценарий d:123.vbs Строка 1 Символ 12 Ошибка Предполагается наличие окончания инструкции Код: 800А0401
#8 by rsv
Тренеруетесь ? :)
#9 by kodblack
Вы о чем? Может кто нибудь предложить нормальный способ импорта из excel в sql. Разве не у кого нет наработак. Буду очень признателен.
#10 by rsv
Правой кнопкой мыши на БД в Скуле . Все задачи .  Импорт Данных . Откроется мастер импорта  данных .
#11 by kodblack
- это не ответ. мне нужен автоматический режим. т.е Excel - будет обновляться время от времени, и надо что бы автоматически данные обновлялись в БД sql.
#12 by Andrewww123
Как я понимаю, это синтаксис не vbs, но могу ошибаться.
#13 by rsv
MS Скуль . Объекты сервера . Связанные серверы. Правой кнопокой мыши . Создать свзанный сервер. т.е.
#14 by kodblack
- а какой драйвер выбирать??? что то excel не нашел.
#15 by rsv
Что нить с Jet  там есть ?
#16 by kodblack
нет
#17 by rsv
попробуйте вот так  программно создать по аналогии : sp_addlinkedserver N'MyxlsServer', N'Jet 4.0',                    N'Microsoft.Jet.OLEDB.4.0',                    N'\10.0.0.252VShare_UserExcelTemplatesJourAssembly.xls', NULL, N'Excel 5.0'
#18 by kodblack
создан link server но драйвер OLE DB Provider for SQL server и путь до файла с xls - не прописан
#19 by N1kMZ
На стороне MS SQL проще делать. Через SSIS.
#20 by kodblack
SSIS пакет не нашел :(
#21 by Jaap Vduul
Вот тут есть подробная инструкция с картинками для SSIS 2012: Это если инициировать загрузку со стороны сервера. Можно конечно делать это, запуская скрипт из шедулера windows. Но ваш код в таком случае не годится, ибо он написан, не на VBS, а на VBA и движок vbscript его не понимает . Вообще в этом случае я бы порекомендовал использовать PowerShell - в нём можно заюзать класс Data.SqlClient.SqlBulkCopy для быстрой заливки больших объёмов данных. Пример:
#22 by kodblack
спасибо - буду делать через ssis
#23 by kodblack
т.е что бы добавить SSIS нужен VS?
#24 by N1kMZ
Со стороны сервера лучше запускать, JOBом
#25 by kodblack
а можно ссылку?
#26 by kodblack
нашел SSDTBI-VS2012 - написано что есть ssis
#27 by N1kMZ
А на что ссылку? Создаётся job на SQL, в нём в качестве шага созданный ранее SSIS пакет. Ну а так документацию читать надо, в пост не влезет всё :)
#28 by Господин ПЖ
>т.е что бы добавить SSIS нужен VS нужен нормальный скуль... или SSIS сейчас везде доступен по лицензии?
#30 by rsv
Так что с линком то не копали ?  Там буков и телодвижений меньше .
#31 by rsv
+ и скорее скуль в 64 разряда и не видит 32 разрядный Jet
#32 by N1kMZ
SSIS пакет можно запускать в 32-разрядной среде принудительно (в свойствах пакета).
#33 by kodblack
с линк сервером - не до понял что делать после добавления модуля.
#34 by kodblack
Добавил путем запроса. А вот дальше не понял что делать. EXEC sp_addlinkedserver      = 'ExcelServer1',     @srvproduct = 'Excel',     @provider = 'Microsoft.Jet.OLEDB.4.0',     @datasrc = 'd:111.xls',     @provstr = 'Excel 8.0;IMEX=1;HDR=YES;'
#35 by kodblack
И провайдер - выставился другой - OLE DB
#36 by kodblack
почему в связи сервера нет для выбора Microsoft.Jet.OLEDB.4.0    я установил AccessDatabaseEngine_x64
#37 by Jaap Vduul
Для Jet.OLEDB нет x64 провайдера, надо использовать строку подключения для ACE.OLEDB:
#38 by kodblack
Связь сделал. Но теперь сори за туп...ой вопрос - а как вогнать данные с таблицы в БД?
#39 by Jaap Vduul
Ну, вроде, по ссылке всё разжёвано. Чего непонятно-то?
#40 by kodblack
- т.е что по ACE.OLEDB или по SSIS - путь один?
#41 by Jaap Vduul
Вопрос звучит как "т.е. дизель и мерседес с одинаковой скоростью едут?".
#42 by kodblack
тогда вопрос при настройке связи SQL Statement простой запрос написал но выдает ошибку IF EXISTS (SELECT 1 FROM information_schema.tables where table_name like '1111')     DROP TABLE 1111 -- create a table to hold purchase ledger items CREATE TABLE 1111( PRIMARY KEY IDENTITY(1,1), Naimenovanie nchar, Latitude float, Longitude float, Factiheskyi nchar, inn nchar, Kod_OKVED nchar, Pyncty nchar ) [Задача "Выполнение SQL"] Ошибка: Сбой выполнения запроса "IF EXISTS (SELECT 1 FROM information_schema.tables..." со следующей ошибкой: "Неправильный синтаксис около конструкции "1111".". Возможные причины сбоя: проблемы с этим запросом, свойство "ResultSet" установлено неправильно, параметры установлены неправильно или соединение было установлено неправильно.
#43 by Jaap Vduul
Не могут идентификаторы объектов в MSSQL начинаться с цифровых символов.
#44 by kodblack
IF EXISTS (SELECT 1 FROM information_schema.tables where table_name like 'qwerty')     DROP TABLE qwerty -- create a table to hold purchase ledger items CREATE TABLE qwerty( PRIMARY KEY IDENTITY(1,1), Naimenovanie nchar, Latitude float, Longitude float, Factiheskyi nchar, inn nchar, Kod_OKVED nchar, Pyncty nchar ) [Задача "Выполнение SQL"] Ошибка: Сбой выполнения запроса "IF EXISTS (SELECT 1 FROM information_schema.tables..." со следующей ошибкой: "Неправильный синтаксис около ключевого слова "IDENTITY".". Возможные причины сбоя: проблемы с этим запросом, свойство "ResultSet" установлено неправильно, параметры установлены неправильно или соединение было установлено неправильно.
#45 by kodblack
удалил PRIMARY KEY IDENTITY(1,1), и все заработало
#46 by Jaap Vduul
Надо было не удалять, а указать наименование первичного ключа, типа: Id PRIMARY KEY IDENTITY(1,1) Хотя, если первичный ключ не нужен, то и так сойдёт.
#47 by kodblack
он должен быть указан в таблице или sql сама задаст этой строкой? если сама то конечно надо.
Тэги: Математика и алгоритмы
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С