powered by simpleCommunicator - 2.0.54     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / QueryTable в офисе 2007
15 сообщений из 15, страница 1 из 1
QueryTable в офисе 2007
    #37420566
GeneralMotors
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!

стоит задача выгрузить данные в excel с sql server, сделал через динамический массив, хочу попробовать
сделать через querytable-может будет быстрее.

следующий код дает ошибку на строке Set qt =... :

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Set oExcel = CreateObject("Excel.Application")
Set oBook = oExcel.Workbooks.Open("C:\AisNalog\PrintJournal04.xlsx")
Set oSheet = oBook.Worksheets.Item( 1 )
Dim ConnectionString As String


ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=sspi;Initial Catalog=Taxes01;Data Source=NN-DB01;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=RODINAM;Use Encryption for Data=False;Tag with column collation when possible=False"
Dim sqlstring As String
Dim qt As Object

sqlstring = "select top 1000 * from fn1812"
Set qt = oSheet.ListObjects( 1 ).QueryTable(Connection:=ConnectionString, _
         Destination:=oSheet.Range("A1"), Sql:=sqlstring)
qt.Refresh False

oExcel.Visible = True

лажаю в синтиксисе, но как правильно - не знаю...
спасибо огромное всем ответившим!
Модератор: учимся использовать тэги оформления кода
...
Рейтинг: 0 / 0
QueryTable в офисе 2007
    #37420925
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще неплохо бы указать текст ошибки...
...
Рейтинг: 0 / 0
QueryTable в офисе 2007
    #37420952
GeneralMotors
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

run-time error '448'
named argument not found


непонятно на какой аргумент ругается
...
Рейтинг: 0 / 0
QueryTable в офисе 2007
    #37420969
Фотография qwrqwr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GeneralMotorsнепонятно на какой аргумент ругается
Попробуйте оставить аргументов в строке подключения по-минимуму
Код: plaintext
1.
ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=sspi;Initial Catalog=Taxes01;Data Source=NN-DB01"
...
Рейтинг: 0 / 0
QueryTable в офисе 2007
    #37420989
GeneralMotors
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwrqwr,

пробую...ошибка не уходит....
думаю, что-то не то с инициализацией самого querytable
...
Рейтинг: 0 / 0
QueryTable в офисе 2007
    #37421022
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
Set qt = oSheet.ListObjects( 1 ).QueryTable(ConnectionString, oSheet.Range("A1"), sqlstring)
...
Рейтинг: 0 / 0
QueryTable в офисе 2007
    #37421058
GeneralMotors
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_One,

на это выдается :

run-time error '9'
subscript out of range
...
Рейтинг: 0 / 0
QueryTable в офисе 2007
    #37421072
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GeneralMotorsKonst_One,

на это выдается :

run-time error '9'
subscript out of range

разбирайтесь со своим диапазоном, который вы в ф-ю передаёте
...
Рейтинг: 0 / 0
QueryTable в офисе 2007
    #37421077
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а вообще , проверьте наличие объекта:

Код: plaintext
oSheet.ListObjects( 1 )
...
Рейтинг: 0 / 0
QueryTable в офисе 2007
    #37421144
GeneralMotors
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_One,
пишу так :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
 Set oExcel = CreateObject("Excel.Application")
Set oBook = oExcel.Workbooks.Open("C:\AisNalog\PrintJournal04.xlsx")
Set oSheet = oBook.Worksheets.Item( 1 )
Dim ConnectionString As String


ConnectionString = "Provider=SQLOLEDB.1;Integrated Security=sspi;Initial Catalog=MYDataBase;Data Source=MyServer;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=MyID;Use Encryption for Data=False;Tag with column collation when possible=False"
Dim sqlstring As String
Dim qt As Object

sqlstring = "select top 1000 * from fn1812"
Set qt = oSheet.ListObjects( 1 ).QueryTable(ConnectionString, oSheet.Range("A5"), sqlstring)

qt.Refresh False 
если перед Set qt = ... воткнуть oSheet.ListObjects.Add , то вылетает
run-time error '1004'
application-defined or object-defined error
...
Рейтинг: 0 / 0
QueryTable в офисе 2007
    #37421193
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вы бы сначала в самом excel потренировались бы с объектной моделью, а уже потом код писали.


пример из документации: http://msdn.microsoft.com/en-us/library/bb211863(v=office.12).aspx
Код: plaintext
1.
2.
3.
'это работает только внутри excel 2007 VBA
Set objListObject = ActiveWorkbook.Worksheets( 1 ).ListObjects.Add(SourceType:= xlSrcExternal, _
	Source:= Array(strServerName, strListName, strListGUID), LinkSource:=True, _
	TableStyleName:=xlGuess, Destination:=Range("A10"))
...
Рейтинг: 0 / 0
QueryTable в офисе 2007
    #37421212
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
QueryTable в офисе 2007
    #37421228
GeneralMotors
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_One,

а толку-то...в самом excel, средствами мастера, объект создать просто , код его ( в excel выглядит так 0):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
With ActiveSheet.ListObjects.Add(SourceType:= 0 , Source:=Array( _
        "OLEDB;Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Data Source=ServerName;Use Procedure for Prepare=1;Auto Tra" _
        , _
        "nslate=True;Packet Size=4096;Workstation ID=MyHOstName;Use Encryption for Data=False;Tag with column collation when possible=False;" _
        , "Initial Catalog=MyDbName"), Destination:=Range("$A$1")).QueryTable
        .CommandType = xlCmdTable
        .CommandText = Array("""MyDbName"".""dbo"".""MyTableName""")
        .RowNumbers = False
        .FillAdjacentFormulas = False
        '.PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod =  0 
        .PreserveColumnInfo = True
        .SourceConnectionFile = _
        "C:\Documents and Settings\dsgvsdsd\Ìîè äîêóìåíòû\Ìîè èñòî÷íèêè äàííûõ\serverName DBName TableName.odc"
        .ListObject.DisplayName = "Òàáëèöà_servername_dbname_tablename"
        .Refresh BackgroundQuery:=False
    End With
проблема-то как раз в этом - как это все добро из VB запустить....
...
Рейтинг: 0 / 0
QueryTable в офисе 2007
    #37421307
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
так вот теперь замените все именнованные параметры на их числовые значения и вызов приведите к нормлаьному виду и всё у вас заработает.
...
Рейтинг: 0 / 0
QueryTable в офисе 2007
    #37421898
GeneralMotors
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_One,

всем спасибо, все получилось!
вот код, может кому поможет , VB6, office 2007
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
      oExcel = CreateObject("Excel.Application")
        oBook = oExcel.WorkBooks.Open("C:\Book1.xlsx")
        oSheet = oBook.WorkSheets.Item( 1 )

        Dim ConnectionString As String


        ConnectionString = "OLEDB;Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Data Source=MYSTATION2\SQLEXPRESS;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=MYSTATION2;Use Encryption for Data=False;Tag with column collation when possible=False;Initial Catalog=Filial2"
        Dim sqlstring As String
        Dim qt As Object

        sqlstring = "select * from ruTable1"
        qt = oSheet.ListObjects.Add(SourceType:= 0 , Source:=ConnectionString, Destination:=oSheet.Range("A1")).QueryTable
        With qt
            .CommandText = "exec exGetDateFromTable"
            .Refresh(False)
        End With

        oExcel.Visible = True
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / QueryTable в офисе 2007
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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