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


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

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

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

незнаю почему у тебя получается худо-бедно. По-моему всё достаточно просто - 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
Как изменить строку подключения для всех внешних данных (Excel-2007)
    #37896915
кладовщик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
basicv, вот спасибище. Думал, все вар-ты с исп-м ListObjects перепробовал, но до правильного вар-та Worksheets("temp").ListObjects(i).QueryTable.Connection не докрутил.
А насчет 2-го предложенного вар-та у меня уже потом, после написания поста, идеи возникли. Попробую завтра проверить на рабочем примере.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Как изменить строку подключения для всех внешних данных (Excel-2007)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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