Excel 2003. Заполнение ячеек листа результатами запроса

Программирование на Visual Basic for Applications
КрузенштернИ.Ф.
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 26.03.2007 (Пн) 8:22

Excel 2003. Заполнение ячеек листа результатами запроса

Сообщение КрузенштернИ.Ф. » 14.05.2007 (Пн) 6:52

Приветствую!
есть необходимость в цикле выводить результаты запросов в ячейки листа Excel(запрос выводит одно значение). Запросы направляются в базу MS SQL 2000. Для решения задачи был использован следующий кусок кода:
Код: Выделить всё
sCommandText = " blablabla "
        Worksheets(sList).Cells(iY, iX).ClearContents
        Worksheets(sList).Cells(iY, iX).Formula = ""
        Sheets(sList).Select
        Cells.Select
        Range("A1").Select
        With ActiveSheet.QueryTables.Add(Connection:= _
        "ODBC;DRIVER=SQL Server;SERVER=" + sServName + ";UID=" + sServName + ";APP=Microsoft Office 2003;WSID=" + _
sServName + ";DATABASE=" + sDBName + ";Trusted_Connection=Yes" _
            , Destination:=Sheets(sList).Cells(iY, iX))
            .CommandText = sCommandText
            .Name = "bla"
            .FieldNames = False
            .RowNumbers = False
            .FillAdjacentFormulas = False
            .PreserveFormatting = True
            .RefreshOnFileOpen = False
            .BackgroundQuery = True
            .RefreshStyle = xlOverwriteCells 'xlInsertDeleteCells
            .SavePassword = False
            .SaveData = True
            .AdjustColumnWidth = False
            .RefreshPeriod = 0
            .PreserveColumnInfo = True
            .Refresh BackgroundQuery:=False
        End With
всё вроде бы хорошо, но цикл большой (сотни итераций), а данные выводятся крайне медленно, так как видимо для каждого запроса устанавливать каждый раз соединение к базе накладно по времени. Вопрос знатокам - есть ли возможность как-то ускорить этот процесс? может быть можно один раз установить соединение для всех запросов или вообще как-то по-другому данные тащить?...

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 14.05.2007 (Пн) 7:08

Каждая QueryTable тянет в своём (новом) connection.

Либо написать запрос, возвращающий все записи сразу, либо использовать ADO вручную.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

КрузенштернИ.Ф.
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 26.03.2007 (Пн) 8:22

Сообщение КрузенштернИ.Ф. » 14.05.2007 (Пн) 9:31

спасибо
Приведите, пожалуйста, кратенький кусок кода на соединение с базой MSSQL2000 и работой с RecordSet (+ вытряхивание результата запроса на лист Excel )
PS: пробую пример из справки - система ругается "User-defined type not defined" - видимо какая-то библиотека нужна?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 14.05.2007 (Пн) 9:35

Видимо нужна (неужели были сомнения...)
И в списке библиотек подходящих не так много. Там, где ActiveX Data Objects встречается...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

КрузенштернИ.Ф.
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 26.03.2007 (Пн) 8:22

Сообщение КрузенштернИ.Ф. » 14.05.2007 (Пн) 14:09

Господа, во время коннекта к базе использую следующий код:

Код: Выделить всё

    Dim Conn As New ADODB.Connection
    Conn.Open "Provider=SQLOLEDB;Password=1;Persist Security Info=True;User ID=sa;Initial Catalog=" + sDBName + ";Data Source=" + sServName + ";Network Library=dbmssocn"


можно ли использовать вместо логина\пароля горячо любимый Trusted Connection во время соединения?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 14.05.2007 (Пн) 14:20

Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 14.05.2007 (Пн) 14:23

На www.connectionstrings.com есть различные примеры строки подключения. В том числе и с Windows-авторизацией.
Lasciate ogni speranza, voi ch'entrate.


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 59

    TopList