Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / данные из sql server в excel / 10 сообщений из 10, страница 1 из 1
21.04.2011, 17:48
    #37227269
PlanB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
данные из sql server в excel
добрый день!

необходимо написать макрос, осуществляющий выгрузку данных из sql server на лист excel (макрос на миф в excel, разумеется)
встроенные средства не получится использовать, т.к. запросы нужно менять от случая к случаю, по сему последние будут формироваться строкой.

помогите, пожалуйста, с примером, ничего подходящего нет под рукой..

ps большая просьба учесть, что я при подключениик БД пишу
1. имя сервера: M2010012000501\SQLEXPRESS
2. учетные сведения
-использовать проверку подлинности Windows

запрос такой:
Код: plaintext
select * from sys_anl.catalog_bank
база называется Bank_RUR

спасибо большое!
...
Рейтинг: 0 / 0
21.04.2011, 18:21
    #37227338
скукотища
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
данные из sql server в excel
полуофф:
PlanB,
аллергия на "динозавров" ?
...
Рейтинг: 0 / 0
21.04.2011, 18:27
    #37227347
PlanB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
данные из sql server в excel
вот так работает мне бы только с шапкой скопировать... подсобите плиз.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
Sub Add_Results_Of_ADO_Recordset()
'This was set up using Microsoft ActiveX Data Components version 2.8

Dim cnt As ADODB.Connection
Dim rst As ADODB.Recordset
Dim stSQL As String
Dim wbBook As Workbook
Dim wsSheet As Worksheet
Dim rnStart As Range


Const stADO As String = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;" & _
"Initial Catalog=Bank_RUR;" & _
"Data Source=M2010012000501\SQLEXPRESS"
'where
'Initial Catalog        = SQL Database  (Bank_RUR);
'Data Source            = SQL Server    (M2010012000501\SQLEXPRESS)

Set wbBook = ActiveWorkbook
Set wsSheet = wbBook.Worksheets("CS_norm")

With wsSheet
    Set rnStart = .Range("A1")
End With

stSQL = "select * from sys_anl.balance201005 a"

Set cnt = New ADODB.Connection
With cnt
    .CursorLocation = adUseClient
    .Open stADO
    .CommandTimeout =  0 
Set rst = .Execute(stSQL)
End With

'Here we add the Recordset to the sheet from A1
rnStart.CopyFromRecordset rst

'Cleaning up.
rst.Close
cnt.Close
Set rst = Nothing
Set cnt = Nothing

End Sub
ps что знал по ntmt - давно забыл... да и знал я не много :))
...
Рейтинг: 0 / 0
21.04.2011, 18:29
    #37227348
PlanB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
данные из sql server в excel
скукотища полуофф:
PlanB,
аллергия на "динозавров" ?да там не понятно ничерта. по опыту, при записи подобного дела через рекордер в 2003 версиях и ниже, после сохранения файлда и последующегго открытия, все коды летят нах... с тех пор предпочитатю не пользовать.
...
Рейтинг: 0 / 0
21.04.2011, 18:57
    #37227389
скукотища
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
данные из sql server в excel
PlanB,
вот так работает мне бы только с шапкой скопировать... подсобите плиз.
"копирование" с "шапкой"
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Dim k As Integer
' ...

With wsSheet
   ' данные бу выгружать начиная со второй строки. В первой бу шапко
    Set rnStart = .Range("A2")
End With

' ...

' названия полей  - в первую строку листа
For k =  0  to rst.Fields.Count - 1 
    wsSheet.Cells( 1 , k+ 1 ).value = rst(k).Name
Next k

' Отформатировать первую строку по вкусу (можно и до выполнения загрузки, можно и вручную)
' ...

'Here we add the Recordset to the sheet from A2 (see above)
rnStart.CopyFromRecordset rst

' ...
...
Рейтинг: 0 / 0
21.04.2011, 19:33
    #37227443
PlanB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
данные из sql server в excel
ок! спасибо, скукотища!
...
Рейтинг: 0 / 0
22.04.2011, 08:42
    #37227915
HandKot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
данные из sql server в excel
зачем пиридумывать велосипед.
используйте стандартные объекты екселя, а именно QueryTable

только надо учесть где она находится. с седьмой версии она переехала с листа в другое место

и кож получится такой (для седьмой версии и выше)

Код: plaintext
1.
2.
    ws.ListObjects( 1 ).QueryTable.CommandType = xlCmdSql
    ws.ListObjects( 1 ).QueryTable.CommandText = "здесь запрос"
    ws.ListObjects( 1 ).QueryTable.Refresh
где ws - требуемый лист(там где находится запрос)
и имена полей тоже будут

для 2003 и ранее, все тоже сам ое, только работаем с объектом
Код: plaintext
ws.QueryTables(номер)
...
Рейтинг: 0 / 0
25.04.2011, 13:53
    #37231966
PlanB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
данные из sql server в excel
HandKot, как я понял, таблицу надо сначала создать и приаттачить к ней базу, после чего юзать этот код. или как? не очень понял, разжуйте, пожалуста.
...
Рейтинг: 0 / 0
26.04.2011, 08:17
    #37232929
HandKot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
данные из sql server в excel
да примерно так, только не аттач таблицы, а выбор "внешних данных"
выбираете в меню Данные-Внешние данные и т.д
создается QueryTable

а потом можно с ней делать что хочешь, приведенным кодом
...
Рейтинг: 0 / 0
26.04.2011, 12:39
    #37233488
PlanB
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
данные из sql server в excel
HandKotда примерно так, только не аттач таблицы, а выбор "внешних данных"
выбираете в меню Данные-Внешние данные и т.д
создается QueryTable

а потом можно с ней делать что хочешь, приведенным кодомок, спасибо!
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / данные из sql server в excel / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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