powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Откликнитесь, о знатаки Экселя
12 сообщений из 12, страница 1 из 1
Откликнитесь, о знатаки Экселя
    #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
Откликнитесь, о знатаки Экселя
    #34425845
f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Расшифруй, откуда берешь данные и чем.
...
Рейтинг: 0 / 0
Откликнитесь, о знатаки Экселя
    #34426428
EzhDick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проще говоря мне нужно чтобы этот запрос написанный на SQLe выполнялся в экселе.
Мне нужно чтобы чтобы он из бд извлекал данные и формировал их в экселе...
...
Рейтинг: 0 / 0
Откликнитесь, о знатаки Экселя
    #34426591
f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Повторю вопрос.
Откуда должны браться данные ? Из какой базы данных ?
...
Рейтинг: 0 / 0
Откликнитесь, о знатаки Экселя
    #34426708
EzhDick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FПовторю вопрос.
Откуда должны браться данные ? Из какой базы данных ?

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

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

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


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

Если в самом конце выбрать опцию "Редактировать запрос в MS Query",
то текст запроса можно там вписать руками (не все виды запросов поддерживаются).
Вообщем, думаю, что если вы только что узнали, что такое SQLServer,
для вас это будет трудно.
...
Рейтинг: 0 / 0
Откликнитесь, о знатаки Экселя
    #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
Откликнитесь, о знатаки Экселя
    #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
Откликнитесь, о знатаки Экселя
    #34430593
EzhDick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Огромное СПАСИБО!!!!
Вот как прописываются сами запросы я в принципе знаю (читал всякие самоучители по SQL), может кто нибудь что нибудь посоветует ещё умного почитать???
Буду примного благодарен, желательно если буду ссылки на взаимодействие с другими программами))))
...
Рейтинг: 0 / 0
Откликнитесь, о знатаки Экселя
    #34497821
Flaer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Откликнитесь, о знатаки Экселя
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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