Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Связка SQL Server + Excel - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, китин  
Связка SQL Server + Excel
LightZ Дата: Четверг, 13.06.2013, 15:38 | Сообщение № 1
Группа: Авторы
Ранг: Форумчанин
Сообщений: 120
Репутация: 48 ±
Замечаний: 0% ±

Всем привет!
Ребят, подскажите, пожалуйста.
Пробовал кто-то делать запросы с Join из ADODB (Excel) к SQL Server'у?
Т.е. такой запрос (ниже) нормально работает с Аксессом, а вот переделать его на SQL Server у меня никак не получается.

[vba]
Код
    sRngExc = "[Excel 12.0;Database=" & ActiveWorkbook.FullName & ";HDR=Yes].[" & sRng & "]"
      sConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & sSource
      Set pConn = CreateObject("ADODB.Connection"): pConn.Open sConn
      sSql = "SELECT t2.* " & _
            "FROM " & sRngExc & " AS t1 " & _
            "LEFT JOIN " & sqlTab & " As t2 " & _
                  "ON (t1." & sqlFindPole & " = t2." & sqlFindPole & ");"
[/vba]


E-mail: overseerpower@gmail.com
Skype: Bogdan_Rud
WMR: R166238237296


Сообщение отредактировал LightZ - Пятница, 14.06.2013, 12:10
 
Ответить
СообщениеВсем привет!
Ребят, подскажите, пожалуйста.
Пробовал кто-то делать запросы с Join из ADODB (Excel) к SQL Server'у?
Т.е. такой запрос (ниже) нормально работает с Аксессом, а вот переделать его на SQL Server у меня никак не получается.

[vba]
Код
    sRngExc = "[Excel 12.0;Database=" & ActiveWorkbook.FullName & ";HDR=Yes].[" & sRng & "]"
      sConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & sSource
      Set pConn = CreateObject("ADODB.Connection"): pConn.Open sConn
      sSql = "SELECT t2.* " & _
            "FROM " & sRngExc & " AS t1 " & _
            "LEFT JOIN " & sqlTab & " As t2 " & _
                  "ON (t1." & sqlFindPole & " = t2." & sqlFindPole & ");"
[/vba]

Автор - LightZ
Дата добавления - 13.06.2013 в 15:38
AndreTM Дата: Четверг, 13.06.2013, 16:35 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 1762
Репутация: 501 ±
Замечаний: 0% ±

2003 & 2010
Запрос к SQL-серверу обрабатывается другим провайдером OLEDB/ODBC, к Jet не имеющим отношения smile
Так что и коннект надо делать соответствующий (см. http://connectionstrings.com/)
Скажешь версию сервера?


Skype: andre.tm.007
Donate: Qiwi: 9517375010
 
Ответить
СообщениеЗапрос к SQL-серверу обрабатывается другим провайдером OLEDB/ODBC, к Jet не имеющим отношения smile
Так что и коннект надо делать соответствующий (см. http://connectionstrings.com/)
Скажешь версию сервера?

Автор - AndreTM
Дата добавления - 13.06.2013 в 16:35
LightZ Дата: Пятница, 14.06.2013, 12:09 | Сообщение № 3
Группа: Авторы
Ранг: Форумчанин
Сообщений: 120
Репутация: 48 ±
Замечаний: 0% ±

Версия сервера SQL Server 2008 R2 (SP2)
Подключение, которое выше – я привел просто для примера каким образом я делаю запросы к mdb.
А вот с помощью этого подключения «Provider=SQLOLEDB.1; …» – я пытался сделать тот же запрос, только уже к базе на сервере.
Но у меня ничего не вышло.

Вообще суть моего вопроса заключается в том, возможно ли взаимодействовать Экселем с SQL Server'ом?
Интересуют такие манипуляции как: Join и Insert

Примерные запросы:

[vba]
Код
INSERT INTO SqlTab (Column1, Column2)
SELECT Column1, Column2
FROM ExcelTab
[/vba]

[vba]
Код
SELECT *
FROM ExcelTab AS t1
LEFT JOIN SqlTab As t2
ON (t1.Column1 = t2.Column1)
[/vba]


E-mail: overseerpower@gmail.com
Skype: Bogdan_Rud
WMR: R166238237296
 
Ответить
СообщениеВерсия сервера SQL Server 2008 R2 (SP2)
Подключение, которое выше – я привел просто для примера каким образом я делаю запросы к mdb.
А вот с помощью этого подключения «Provider=SQLOLEDB.1; …» – я пытался сделать тот же запрос, только уже к базе на сервере.
Но у меня ничего не вышло.

Вообще суть моего вопроса заключается в том, возможно ли взаимодействовать Экселем с SQL Server'ом?
Интересуют такие манипуляции как: Join и Insert

Примерные запросы:

[vba]
Код
INSERT INTO SqlTab (Column1, Column2)
SELECT Column1, Column2
FROM ExcelTab
[/vba]

[vba]
Код
SELECT *
FROM ExcelTab AS t1
LEFT JOIN SqlTab As t2
ON (t1.Column1 = t2.Column1)
[/vba]

Автор - LightZ
Дата добавления - 14.06.2013 в 12:09
Gustav Дата: Пятница, 14.06.2013, 16:27 | Сообщение № 4
Группа: Админы
Ранг: Участник клуба
Сообщений: 2793
Репутация: 1160 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
Цитата (LightZ)
суть моего вопроса заключается в том, возможно ли взаимодействовать Экселем с SQL Server'ом?

Возможности взаимодействия с любой СУБД определяются возможностями соответствующего провайдера OLEDB/ODBC для этой СУБД. Запросы при этом пишутся в синтаксисе того диалекта SQL, который поддерживается данной СУБД. И эти запросы могут быть невероятно сложными, подстраиваемыми практически под любой разработческий каприз (конечно, в рамках позволенного синтаксисом).

В качестве "среды запуска" провайдера может выступать любое приложение Windows, грубо говоря, допускающее программирование: хоть Excel, хоть Word, хоть Outlook, хоть VBscript, хоть отдельно компилируемая программа на C++. Никаких особых команд в Excel, ставящих его выше других, для работы с провайдерами нет. Правда, есть замечательная, истинно экселевская команда Range.CopyFromRecordset, позволяющая одним махом вставить на рабочий лист данные, возвращаемые запросом.

Цитата (LightZ)
Примерные запросы:
INSERT INTO SqlTab (Column1, Column2)
SELECT Column1, Column2
FROM ExcelTab

Так в Excel не получится, если под ExcelTab понимать некий диапазон на рабочем листе. Но получится использование однострочных операторов INSERT с явно заданными значениями:
[vba]
Код
INSERT INTO SqlTab (Column1, Column2) VALUES (115, 'Вася')
[/vba]
Причем подобные операторы можно конструировать как в коде VBA, так и формулами на рабочем листе, типа для C1:
Код
="INSERT INTO SqlTab (Column1, Column2) VALUES (" & A1 &", '" & B1 &"')"

Дальше из C1 можно скопиировать, хотя бы и вручную, и вставить в какой-нибудь Query Analyzer SQL Server'а и там исполнить.

А вот именно так, как вы написали, чтобы в одном запросе были и Excel, и SQL Server, можно сделать в Access. Для этого надо сначала присоединить таблицы Excel и SQL Server к файлу базы данных Access. После присоединения c этими таблицами можно работать как с таблицами "из одного хранилища". Разумеется, если нужны запросы действия (т.е. не только select), то должны быть обеспечены соответствующие права доступа.


МОИ: Ник, Tip box: 41001663842605

Сообщение отредактировал Gustav - Пятница, 14.06.2013, 16:47
 
Ответить
Сообщение
Цитата (LightZ)
суть моего вопроса заключается в том, возможно ли взаимодействовать Экселем с SQL Server'ом?

Возможности взаимодействия с любой СУБД определяются возможностями соответствующего провайдера OLEDB/ODBC для этой СУБД. Запросы при этом пишутся в синтаксисе того диалекта SQL, который поддерживается данной СУБД. И эти запросы могут быть невероятно сложными, подстраиваемыми практически под любой разработческий каприз (конечно, в рамках позволенного синтаксисом).

В качестве "среды запуска" провайдера может выступать любое приложение Windows, грубо говоря, допускающее программирование: хоть Excel, хоть Word, хоть Outlook, хоть VBscript, хоть отдельно компилируемая программа на C++. Никаких особых команд в Excel, ставящих его выше других, для работы с провайдерами нет. Правда, есть замечательная, истинно экселевская команда Range.CopyFromRecordset, позволяющая одним махом вставить на рабочий лист данные, возвращаемые запросом.

Цитата (LightZ)
Примерные запросы:
INSERT INTO SqlTab (Column1, Column2)
SELECT Column1, Column2
FROM ExcelTab

Так в Excel не получится, если под ExcelTab понимать некий диапазон на рабочем листе. Но получится использование однострочных операторов INSERT с явно заданными значениями:
[vba]
Код
INSERT INTO SqlTab (Column1, Column2) VALUES (115, 'Вася')
[/vba]
Причем подобные операторы можно конструировать как в коде VBA, так и формулами на рабочем листе, типа для C1:
Код
="INSERT INTO SqlTab (Column1, Column2) VALUES (" & A1 &", '" & B1 &"')"

Дальше из C1 можно скопиировать, хотя бы и вручную, и вставить в какой-нибудь Query Analyzer SQL Server'а и там исполнить.

А вот именно так, как вы написали, чтобы в одном запросе были и Excel, и SQL Server, можно сделать в Access. Для этого надо сначала присоединить таблицы Excel и SQL Server к файлу базы данных Access. После присоединения c этими таблицами можно работать как с таблицами "из одного хранилища". Разумеется, если нужны запросы действия (т.е. не только select), то должны быть обеспечены соответствующие права доступа.

Автор - Gustav
Дата добавления - 14.06.2013 в 16:27
LightZ Дата: Пятница, 14.06.2013, 18:39 | Сообщение № 5
Группа: Авторы
Ранг: Форумчанин
Сообщений: 120
Репутация: 48 ±
Замечаний: 0% ±

Gustav, спасибо.
Т.е. если я правильно понял - можно сделать импортированную связанную xls-таблицу в Аксессе, и уже исходя из этой связанной xls-таблицы сделать добавление (Insert) в таблицу на SQL сервере?


E-mail: overseerpower@gmail.com
Skype: Bogdan_Rud
WMR: R166238237296
 
Ответить
СообщениеGustav, спасибо.
Т.е. если я правильно понял - можно сделать импортированную связанную xls-таблицу в Аксессе, и уже исходя из этой связанной xls-таблицы сделать добавление (Insert) в таблицу на SQL сервере?

Автор - LightZ
Дата добавления - 14.06.2013 в 18:39
Gustav Дата: Пятница, 14.06.2013, 21:27 | Сообщение № 6
Группа: Админы
Ранг: Участник клуба
Сообщений: 2793
Репутация: 1160 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
Цитата (LightZ)
можно сделать импортированную связанную xls-таблицу в Аксессе

Можно:

ЛИБО импортировать таблицу Excel в Access и она в Access заживет самостоятельной жизнью - как новый (второй) экземпляр исходных данных, а исходная таблица Excel при этом останется в своей независимой жизни;

ЛИБО привязать таблицу Excel к файлу Access, при этом Access фактически будет подглядывать в Excel через предоставленное "окошко"; при этом все последующие изменения, вносимые в файл Excel, будут видны и в Access; но изменять исходные данные файла Excel из Access нельзя (хотя в ранних версиях можно было делать и это - потом Микрософт ужесточил и отрезал эту возможность)
К сообщению приложен файл: 6894054.jpg (56.3 Kb)


МОИ: Ник, Tip box: 41001663842605

Сообщение отредактировал Gustav - Пятница, 14.06.2013, 21:29
 
Ответить
Сообщение
Цитата (LightZ)
можно сделать импортированную связанную xls-таблицу в Аксессе

Можно:

ЛИБО импортировать таблицу Excel в Access и она в Access заживет самостоятельной жизнью - как новый (второй) экземпляр исходных данных, а исходная таблица Excel при этом останется в своей независимой жизни;

ЛИБО привязать таблицу Excel к файлу Access, при этом Access фактически будет подглядывать в Excel через предоставленное "окошко"; при этом все последующие изменения, вносимые в файл Excel, будут видны и в Access; но изменять исходные данные файла Excel из Access нельзя (хотя в ранних версиях можно было делать и это - потом Микрософт ужесточил и отрезал эту возможность)

Автор - Gustav
Дата добавления - 14.06.2013 в 21:27
LightZ Дата: Суббота, 15.06.2013, 10:16 | Сообщение № 7
Группа: Авторы
Ранг: Форумчанин
Сообщений: 120
Репутация: 48 ±
Замечаний: 0% ±

Спасибо, это я и имел ввиду
А подскажите еще, пожалуйста, каким образом менять данные в SQL таблицах через Аксесс?


E-mail: overseerpower@gmail.com
Skype: Bogdan_Rud
WMR: R166238237296
 
Ответить
СообщениеСпасибо, это я и имел ввиду
А подскажите еще, пожалуйста, каким образом менять данные в SQL таблицах через Аксесс?

Автор - LightZ
Дата добавления - 15.06.2013 в 10:16
Gustav Дата: Понедельник, 17.06.2013, 17:32 | Сообщение № 8
Группа: Админы
Ранг: Участник клуба
Сообщений: 2793
Репутация: 1160 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
Цитата (LightZ)
каким образом менять данные в SQL таблицах через Аксесс?

ну это Гуглу лучше задать вопрос, я сам этим давненько занимался - еще в связке Access 2000 и SQL Server 7, подзабыл подробности. Подозреваю, что что-то могло измениться; и, возможно, не в лучшую сторону... Т.е., конечно, в лучшую с точки зрения безопасности, и - наоборот с точки зрения разработчика.


МОИ: Ник, Tip box: 41001663842605
 
Ответить
Сообщение
Цитата (LightZ)
каким образом менять данные в SQL таблицах через Аксесс?

ну это Гуглу лучше задать вопрос, я сам этим давненько занимался - еще в связке Access 2000 и SQL Server 7, подзабыл подробности. Подозреваю, что что-то могло измениться; и, возможно, не в лучшую сторону... Т.е., конечно, в лучшую с точки зрения безопасности, и - наоборот с точки зрения разработчика.

Автор - Gustav
Дата добавления - 17.06.2013 в 17:32
LightZ Дата: Понедельник, 17.06.2013, 18:26 | Сообщение № 9
Группа: Авторы
Ранг: Форумчанин
Сообщений: 120
Репутация: 48 ±
Замечаний: 0% ±

Спасибо, буду разбираться!


E-mail: overseerpower@gmail.com
Skype: Bogdan_Rud
WMR: R166238237296
 
Ответить
СообщениеСпасибо, буду разбираться!

Автор - LightZ
Дата добавления - 17.06.2013 в 18:26
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!