Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Откликнитесь, о знатаки Экселя / 12 сообщений из 12, страница 1 из 1
29.03.2007, 14:09:48
    #34424689
EzhDick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Откликнитесь, о знатаки Экселя
Помогите, пожалуйста, не могу понять принцип запросов SQL в экселе.
У меня есть вот такой запросик:
select
id_pam,
dbo.doUpper(pamname) as pamname,
(ato.name+' '+pammesto) as pammesto,
o.[name] as oxr
from main00
INNER JOIN [Памятники_России_НСИ].dbo.SPM04 o ON MAIN00.PAMOXR = o.KOD
where konfkod = 21
or konfkod = 20
or konfkod = 12
or konfkod = 38
or konfkod = 16
or konfkod = 17
or konfkod = 15

union
select
spm02gr01.newter,
spm02gr01.[name] as region,
id_pam,
dbo.doUpper(pamname) as pamname,
dbo.ArrToStr3(id_pam) as c_date ,
dbo.ArrToStr4(id_pam) as c_author,
(ato.name+' '+pammesto) as pammesto,
dbo.get_oxrA(id_pam) as c_oxrdoc,
o.[name] as oxr
from main00
INNER JOIN [Памятники_России_НСИ].dbo.SPM04 o ON MAIN00.PAMOXR = o.KOD
inner join [Памятники_России_Конфессии].dbo.mainisp as mainisp
on main00.id_pam = mainisp.ispid_pam
left outer join [Памятники_России_Конфессии].dbo.spm08 as spm08
on mainisp.ispkonfkod = spm08.epkod
where konfkod = 21
or konfkod = 20
or konfkod = 12
or konfkod = 38
or konfkod = 16
or konfkod = 17
or konfkod = 15

union

select
spm02gr01.newter,
spm02gr01.[name] as region,
id_pam,
dbo.doUpper(pamname) as pamname,
dbo.ArrToStr3(id_pam) as c_date ,
dbo.ArrToStr4(id_pam) as c_author,
(ato.name+' '+pammesto) as pammesto,
dbo.get_oxrA(id_pam) as c_oxrdoc,
o.[name] as oxr
from main00
INNER JOIN [Памятники_России_НСИ].dbo.SPM04 o ON MAIN00.PAMOXR = o.KOD
where (pamname like '%лютер%' or pamname like '%евангел%' )
order by spm02gr01.newter,pamname

Вот подскажите, как сделать так чтобы всё это работало в экселе???
Как нужно поменять запрос???
...
Рейтинг: 0 / 0
29.03.2007, 19:35:50
    #34425845
f
f
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Откликнитесь, о знатаки Экселя
Расшифруй, откуда берешь данные и чем.
...
Рейтинг: 0 / 0
30.03.2007, 09:23:31
    #34426428
EzhDick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Откликнитесь, о знатаки Экселя
Проще говоря мне нужно чтобы этот запрос написанный на SQLe выполнялся в экселе.
Мне нужно чтобы чтобы он из бд извлекал данные и формировал их в экселе...
...
Рейтинг: 0 / 0
30.03.2007, 10:17:31
    #34426591
f
f
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Откликнитесь, о знатаки Экселя
Повторю вопрос.
Откуда должны браться данные ? Из какой базы данных ?
...
Рейтинг: 0 / 0
30.03.2007, 10:42:51
    #34426708
EzhDick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Откликнитесь, о знатаки Экселя
FПовторю вопрос.
Откуда должны браться данные ? Из какой базы данных ?

Из SQL...
Извеняюсь за непонимание, я только начинающий...
...
Рейтинг: 0 / 0
30.03.2007, 11:15:58
    #34426826
f
f
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Откликнитесь, о знатаки Экселя
Из SQL...
Извеняюсь за непонимание, я только начинающий...

Где хранятся данные ?
В файле Excel.
На SQL Server.
Где-нибудь еще ?
...
Рейтинг: 0 / 0
30.03.2007, 14:12:43
    #34427549
EzhDick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Откликнитесь, о знатаки Экселя
F Из SQL...
Извеняюсь за непонимание, я только начинающий...

Где хранятся данные ?
В файле Excel.
На SQL Server.
Где-нибудь еще ?


На SQL Server.
...
Рейтинг: 0 / 0
30.03.2007, 16:08:30
    #34428001
f
f
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Откликнитесь, о знатаки Экселя
В таком случае данные получаются через Данные - Импорт внешних данных-
Создать запрос
и дальше пройти все шаги.
Необходимо правильно ввести название SQLServer- а, логин и пароль пользователя,
название базы данных.
Можно обратиться к существующим таблицам или View.

Если в самом конце выбрать опцию "Редактировать запрос в MS Query",
то текст запроса можно там вписать руками (не все виды запросов поддерживаются).
Вообщем, думаю, что если вы только что узнали, что такое SQLServer,
для вас это будет трудно.
...
Рейтинг: 0 / 0
30.03.2007, 20:15:36
    #34428733
lena_####
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Откликнитесь, о знатаки Экселя
EzhDick

Гляньте в сторону ADO. Создайте Recordset на основе Вашего SQL-запроса (если он конечно валидный), а в Excel данные вставьте с помощь метода CopyFromRecordset. В общем как-то так:
Код: 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.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
Sub s_01()
  Dim v_Cnn, v_Rst, v_CnnString, v_SQL
  
  Set v_Cnn = CreateObject("ADODB.Connection")
  Set v_Rst = CreateObject("ADODB.Recordset")
  
  v_CnnString = "PROVIDER=MSDASQL;DRIVER={SQL Server};" & _
                "SERVER=<yourserver>;" & _
                "DATABASE=<yourdb>;" & _
                "UID=<yourlogin>;" & _
                "PWD=<yourpasswd>;" & _
                "Network=DBMSSOCN;" & _
                "Address=<ip-address,port-number>;" & _
                "UseProcForPrepare=0;" & _
                "AutoTranslate=No"
  
  v_Cnn.Open v_CnnString
  
  v_SQL = v_SQL & "select"
  v_SQL = v_SQL & "id_pam,"
  v_SQL = v_SQL & "dbo.doUpper(pamname) as pamname,"
  v_SQL = v_SQL & "(ato.name+' '+pammesto) as pammesto,"
  v_SQL = v_SQL & "o.[name] as oxr"
  v_SQL = v_SQL & "from main00"
  v_SQL = v_SQL & "INNER JOIN [Памятники_России_НСИ].dbo.SPM04 o ON MAIN00.PAMOXR = o.KOD"
  v_SQL = v_SQL & "where konfkod = 21"
  v_SQL = v_SQL & "or konfkod = 20"
  v_SQL = v_SQL & "or konfkod = 12"
  v_SQL = v_SQL & "or konfkod = 38"
  v_SQL = v_SQL & "or konfkod = 16"
  v_SQL = v_SQL & "or konfkod = 17"
  v_SQL = v_SQL & "or konfkod = 15"
  v_SQL = v_SQL & "union"
  v_SQL = v_SQL & "select"
  v_SQL = v_SQL & "spm02gr01.newter,"
  v_SQL = v_SQL & "spm02gr01.[name] as region,"
  v_SQL = v_SQL & "id_pam,"
  v_SQL = v_SQL & "dbo.doUpper(pamname) as pamname,"
  v_SQL = v_SQL & "dbo.ArrToStr3(id_pam) as c_date ,"
  v_SQL = v_SQL & "dbo.ArrToStr4(id_pam) as c_author,"
  v_SQL = v_SQL & "(ato.name+' '+pammesto) as pammesto,"
  v_SQL = v_SQL & "dbo.get_oxrA(id_pam) as c_oxrdoc,"
  v_SQL = v_SQL & "o.[name] as oxr"
  v_SQL = v_SQL & "from main00"
  v_SQL = v_SQL & "INNER JOIN [Памятники_России_НСИ].dbo.SPM04 o ON MAIN00.PAMOXR = o.KOD"
  v_SQL = v_SQL & "inner join [Памятники_России_Конфессии].dbo.mainisp as mainisp"
  v_SQL = v_SQL & "on main00.id_pam = mainisp.ispid_pam"
  v_SQL = v_SQL & "left outer join [Памятники_России_Конфессии].dbo.spm08 as spm08"
  v_SQL = v_SQL & "on mainisp.ispkonfkod = spm08.epkod"
  v_SQL = v_SQL & "where konfkod = 21"
  v_SQL = v_SQL & "or konfkod = 20"
  v_SQL = v_SQL & "or konfkod = 12"
  v_SQL = v_SQL & "or konfkod = 38"
  v_SQL = v_SQL & "or konfkod = 16"
  v_SQL = v_SQL & "or konfkod = 17"
  v_SQL = v_SQL & "or konfkod = 15"
  v_SQL = v_SQL & "union"
  v_SQL = v_SQL & "select"
  v_SQL = v_SQL & "spm02gr01.newter,"
  v_SQL = v_SQL & "spm02gr01.[name] as region,"
  v_SQL = v_SQL & "id_pam,"
  v_SQL = v_SQL & "dbo.doUpper(pamname) as pamname,"
  v_SQL = v_SQL & "dbo.ArrToStr3(id_pam) as c_date ,"
  v_SQL = v_SQL & "dbo.ArrToStr4(id_pam) as c_author,"
  v_SQL = v_SQL & "(ato.name+' '+pammesto) as pammesto,"
  v_SQL = v_SQL & "dbo.get_oxrA(id_pam) as c_oxrdoc,"
  v_SQL = v_SQL & "o.[name] as oxr"
  v_SQL = v_SQL & "from main00"
  v_SQL = v_SQL & "INNER JOIN [Памятники_России_НСИ].dbo.SPM04 o ON MAIN00.PAMOXR = o.KOD"
  v_SQL = v_SQL & "where (pamname like '%лютер%' or pamname like '%евангел%' )"
  v_SQL = v_SQL & "order by spm02gr01.newter,pamname"

  v_Rst.Open v_SQL, v_Cnn

  ThisWorkbook.Sheets( 1 ).Range("A1").CopyFromRecordset v_Rst

  v_Rst.Close
  v_Cnn.Close
End Sub
...
Рейтинг: 0 / 0
30.03.2007, 20:24:30
    #34428743
lena_####
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Откликнитесь, о знатаки Экселя
Только когда формируете строку запроса v_SQL добавьте в конце каждой строки соответствующего фрагмента кода & vbCrLf, или пробел после открывающей кавычки или пробел перед закрывающей кавычкой. Что-то типа этого:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
  v_SQL = v_SQL & "select" & vbCrLf
  v_SQL = v_SQL & "id_pam," & vbCrLf
  v_SQL = v_SQL & "dbo.doUpper(pamname) as pamname," & vbCrLf
  v_SQL = v_SQL & "(ato.name+' '+pammesto) as pammesto," & vbCrLf
  v_SQL = v_SQL & "o.[name] as oxr" & vbCrLf
  v_SQL = v_SQL & "from main00" & vbCrLf
  v_SQL = v_SQL & "INNER JOIN [Памятники_России_НСИ].dbo.SPM04 o ON MAIN00.PAMOXR = o.KOD" & vbCrLf
  v_SQL = v_SQL & "where konfkod = 21" & vbCrLf
...
Рейтинг: 0 / 0
02.04.2007, 10:49:37
    #34430593
EzhDick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Откликнитесь, о знатаки Экселя
Огромное СПАСИБО!!!!
Вот как прописываются сами запросы я в принципе знаю (читал всякие самоучители по SQL), может кто нибудь что нибудь посоветует ещё умного почитать???
Буду примного благодарен, желательно если буду ссылки на взаимодействие с другими программами))))
...
Рейтинг: 0 / 0
30.04.2007, 20:12:54
    #34497821
Flaer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Откликнитесь, о знатаки Экселя
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Откликнитесь, о знатаки Экселя / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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