Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Как изменить строку подключения для всех внешних данных (Excel-2007) / 7 сообщений из 7, страница 1 из 1
27.07.2012, 16:22
    #37895729
кладовщик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как изменить строку подключения для всех внешних данных (Excel-2007)
На разных листах книги экселя-2007 есть несколько внешних данных из MS SQL (получены с помощью меню ДАННЫЕ-Из других источников-С сервера SQL Server).
Нужно менять строку подключения для всех них периодически.
Т.е. как-то надо по всем экземплярам коллекции QueryTables пройтись, но понять не могу. Просто получить число QueryTable на конкретном листе не получается:
Код: vbnet
1.
2.
Set ws = Sheets("AllTrades")
MsgBox ws.QueryTables.Count


возвращает ноль.
Как быть?!
-----
Не люблю Progress OpenEdge.
...
Рейтинг: 0 / 0
27.07.2012, 20:12
    #37896073
basicv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как изменить строку подключения для всех внешних данных (Excel-2007)
кладовщик,

смотри внутри ListObjects. Хотя, есть же коллекция подключений в книге (Workbook.Connections).
...
Рейтинг: 0 / 0
28.07.2012, 00:18
    #37896208
ElenHim
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как изменить строку подключения для всех внешних данных (Excel-2007)
По сабжу не подскажу, т.к. не доводилось работать конкретно с QueryTables(предпочитаю ADO),
но из опыта работы с БД в целом, если файл не одноразовый, лучше такие вещи как строки подключения собирать в одном месте.
Например, в глобальных переменных, или свойствах книги или на отдельный лист...Даже если для этого придётся кодить все QueryTables.
...
Рейтинг: 0 / 0
29.07.2012, 09:58
    #37896690
кладовщик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как изменить строку подключения для всех внешних данных (Excel-2007)
basicvкладовщик,

смотри внутри ListObjects. Хотя, есть же коллекция подключений в книге (Workbook.Connections).
С ListObjects вообще не смог разобраться, с Workbook.Connections худо-бедно получил ThisWorkbook.Connections(i).OLEDBConnection.Connection.
Но непонятно, как быть, если существуют помимо OLEDBConnection еще PivotCache.Connection и OLEDBConnection?
ElenHim По сабжу не подскажу, т.к. не доводилось работать конкретно с QueryTables(предпочитаю ADO),
но из опыта работы с БД в целом, если файл не одноразовый, лучше такие вещи как строки подключения собирать в одном месте.
Например, в глобальных переменных, или свойствах книги или на отдельный лист...Даже если для этого придётся кодить все QueryTables.Это я прототип по-быстрому сделал, чтобы в Экселе интерфейс отладить. Так-то в дальнейшем, скорее всего, большую часть внешних данных ч-з ADO буду получать.
...
Рейтинг: 0 / 0
29.07.2012, 10:06
    #37896692
кладовщик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как изменить строку подключения для всех внешних данных (Excel-2007)
кладовщиккак быть, если существуют помимо OLEDBConnection еще PivotCache.Connection и [s]OLEDBConnection?
... как быть, если существуют помимо OLEDBConnection еще PivotCache.Connection и ODBCConnection.Connection?
...
Рейтинг: 0 / 0
29.07.2012, 16:23
    #37896864
basicv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как изменить строку подключения для всех внешних данных (Excel-2007)
кладовщик,

незнаю почему у тебя получается худо-бедно. По-моему всё достаточно просто - 1. PivotCache должна изпользовать одно из глобальных подключений, 2. у Workbook.Connection есть два своиства: OLEDBConnection и ODBCConnection - смотри которое из них заполнено и меняй.

Замена через QueryTable:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
sCn = "OLEDB;Provider=MSDASQL.1;Persist Security Info=True;
Extended Properties=""DRIVER={MySQL ODBC 5.1 Driver};UID=root;PWD=*****;SERVER=localhost;DATABASE=ipfns;PORT=3306;"""
    For i = 1 To Sheet1.ListObjects.Count
        Sheet1.ListObjects(i).QueryTable.Connection = sCn
        Sheet1.ListObjects(i).QueryTable.BackgroundQuery = False
        Sheet1.ListObjects(i).QueryTable.Refresh
        
    Next i



Замена через Connection:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
sCn = "OLEDB;Provider=MSDASQL.1;Persist Security Info=True;
Extended Properties=""DRIVER={MySQL ODBC 5.1 Driver};UID=root;PWD=*****;SERVER=localhost;DATABASE=ipfns;PORT=3306;"""   
    For i = 1 To ThisWorkbook.Connections.Count
        a = ThisWorkbook.Connections(i).OLEDBConnection.Connection
        If a <> "" Then
            ThisWorkbook.Connections(i).OLEDBConnection.Connection = sCn
        Else
            ThisWorkbook.Connections(i).ODBCConnection.Connection = sCn
        End If
        ThisWorkbook.Connections(i).Refresh
    Next i
...
Рейтинг: 0 / 0
29.07.2012, 18:35
    #37896915
кладовщик
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как изменить строку подключения для всех внешних данных (Excel-2007)
basicv, вот спасибище. Думал, все вар-ты с исп-м ListObjects перепробовал, но до правильного вар-та Worksheets("temp").ListObjects(i).QueryTable.Connection не докрутил.
А насчет 2-го предложенного вар-та у меня уже потом, после написания поста, идеи возникли. Попробую завтра проверить на рабочем примере.
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Как изменить строку подключения для всех внешних данных (Excel-2007) / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]