powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Запрос в Excel возвращает пустоту((
22 сообщений из 22, страница 1 из 1
Запрос в Excel возвращает пустоту((
    #34758754
Nitrolis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В Excel (2003) SQL запросом подтягиваю данные. Как только в запрос добавляю переменные, в Excel получаю пустоту(( Причем запрос замечательно выполняется в Query! Получение данных через сводную таблицу выдает ошибку... В чем может быть дело? Неужели в Экселе нельзя использовать запросы с переменными?
...
Рейтинг: 0 / 0
Запрос в Excel возвращает пустоту((
    #34758767
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дело может быть в первую очередь в самом запросе, в данных, в версиях программ и т.д.;-)

Запрос в студию!

KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
Запрос в Excel возвращает пустоту((
    #34758854
Nitrolis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
declare @Var1 varchar( 10 )
declare @Var2 varchar( 10 )
set @Var1 = 177 
set @Var2= 507 
SELECT     ID_PLU
FROM         lentmp1
GROUP BY ID_PLU
HAVING      (ID_PLU IN (@Var1, @Var2))

на элементарном примере... возвращает пустоту и не сохраняет текст запроса, хотя установлена опция сохранения определения запроса. Если переменные заменить на их значения - всё ок!
...
Рейтинг: 0 / 0
Запрос в Excel возвращает пустоту((
    #34759006
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
могу и ошибаться, но в запросах нельзя определять переменные их можно только передавать
в таком случае переменные описываются символом "знак вопроса"
Код: plaintext
1.
2.
3.
SELECT     ID_PLU
FROM         lentmp1
GROUP BY ID_PLU
HAVING      (ID_PLU IN ?, ?))
и передавать их в порядке появления в запросе
вроде так

I Have Nine Lives You Have One Only
THINK!
...
Рейтинг: 0 / 0
Запрос в Excel возвращает пустоту((
    #34759144
Nitrolis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не представляю, как я передам переменные в порядке их следования в импорте внешних данных Excel (2003)).... Как понимаю ответ на мой вопрос: "Неужели в Экселе нельзя использовать запросы с переменными?" - НЕТ!((( Жаль! Через VBA обойду!)

Спасибо всем за участие!
...
Рейтинг: 0 / 0
Запрос в Excel возвращает пустоту((
    #34760201
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот White Owl очень доходчиво объяснил.
...
Рейтинг: 0 / 0
Запрос в Excel возвращает пустоту((
    #34760721
Nitrolis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
big-duke Вот White Owl очень доходчиво объяснил.


Спасибо за ответ! Очень полезная информация...
Только вопрос был не совсем в этом... Я думаю, не секрет - для чего нужны переменные? Запрос достаточно большой... много параметров, которые ни раз повторяются в тексте запроса, и если все значения параметров заменить на знак вопроса... этот вариант не применим - один и тот же параметр придется вводить много раз!((
...
Рейтинг: 0 / 0
Запрос в Excel возвращает пустоту((
    #34760868
f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Запрос к чему ?
...
Рейтинг: 0 / 0
Запрос в Excel возвращает пустоту((
    #34761119
Фотография HandKot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nitrolis big-duke Вот White Owl очень доходчиво объяснил.


Спасибо за ответ! Очень полезная информация...
Только вопрос был не совсем в этом... Я думаю, не секрет - для чего нужны переменные? Запрос достаточно большой... много параметров, которые ни раз повторяются в тексте запроса, и если все значения параметров заменить на знак вопроса... этот вариант не применим - один и тот же параметр придется вводить много раз!((

так если привязать параметры к ячейкам, то ничего страшного не будет, просто несколько "знаков вопросов", будут ссылаться на одну и туже ячейку
...
Рейтинг: 0 / 0
Запрос в Excel возвращает пустоту((
    #34761326
Nitrolis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всё неудобство сводится к тому, что исходный текст запроса НАДО РЕДАКТИРОВАТЬ!!! Но хотелось, чтобы это свелось к замене нескольких переменных в самом запросе... Через VBA всё понятно...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
    Sub Query_()
    Dim var1, var2, SQLstring As Variant
    var1 =  177 
    var2 =  507 
    SQLstring = Array( _
        "SELECT     ID_PLU " & Chr( 10 ), _
        "FROM lentmp1 " & Chr( 10 ), _
        "GROUP BY ID_PLU " & Chr( 10 ), _
        "HAVING      (ID_PLU IN (" & var1 & ", " & var2 & ")) " _
    )
    With ActiveSheet.QueryTables.Add(Connection:= _
        "ODBC;DSN=MyDSNBase;DATABASE=MyBase;", Destination:=Range("a1"))
        .CommandText = SQLstring
        .Refresh BackgroundQuery:=False
    End With
    End Sub
... но при изменениях текста запроса, приходится все переменные вклячивать заново, потому как Эксель не позволяет использовать переменные внутри самого запроса и возвращает пустоту((
...
Рейтинг: 0 / 0
Запрос в Excel возвращает пустоту((
    #34761833
f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На мой вопрос ответите ?
...
Рейтинг: 0 / 0
Запрос в Excel возвращает пустоту((
    #34762459
Nitrolis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FНа мой вопрос ответите ?
Сори!

Вас интересует источник данных? Если я правильно понял вопрос, овечаю: запрос к БД, которая крутится на SQL-Server 2000 и управляется с помощью Access....
...
Рейтинг: 0 / 0
Запрос в Excel возвращает пустоту((
    #34762511
f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В таком случае способов получить данные с сервера очень много.
Если, конечно, вам нужно просто прочитать данные с сервера.

Формируйте текст запроса динамически.
...
Рейтинг: 0 / 0
Запрос в Excel возвращает пустоту((
    #34762697
Nitrolis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
FФормируйте текст запроса динамически.

Можно чуть подробнее?..
...
Рейтинг: 0 / 0
Запрос в Excel возвращает пустоту((
    #34762717
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nitrolis... но при изменениях текста запроса, приходится все переменные вклячивать заново, потому как Эксель не позволяет использовать переменные внутри самого запроса и возвращает пустоту((Ничего не понимаю. Почему вдруг Эксель не позволяет использовать переменные внутри запроса? Какие переменные? Что ты такое пытаешься сделать?
Один вариант запроса с переменными ты только что сам показал - формируешь строку или массив строк с запросом в котором подставляешь параметры запроса из VBA-переменных.
Второй вариант я тебе описывал - заменить константы в запросе на вопросительные знаки и привязать их потом к ячейкам Экселя. В этом случае VBA уже вообще не нужно будет.

Или ты вот в этом макросе:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Sub Query_()
    Dim var1, var2, SQLstring As Variant
    var1 =  177 
    var2 =  507 
    SQLstring = Array( _
        "SELECT     ID_PLU " & Chr( 10 ), _
        "FROM lentmp1 " & Chr( 10 ), _
        "GROUP BY ID_PLU " & Chr( 10 ), _
        "HAVING      (ID_PLU IN (" & var1 & ", " & var2 & ")) " _
    )
    With ActiveSheet.QueryTables.Add(Connection:= _
        "ODBC;DSN=MyDSNBase;DATABASE=MyBase;", Destination:=Range("a1"))
        .CommandText = SQLstring
        .Refresh BackgroundQuery:=False
    End With
End Sub
Не знаешь как прочитать значения из ячеек листа или из юзерформы в VBA-переменные?
...
Рейтинг: 0 / 0
Запрос в Excel возвращает пустоту((
    #34762803
f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пример:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Public conn As New ADODB.Connection
Public rsIncomes As New ADODB.Recordset

Sub QueryCall()
      Call Query( 2111 ,  2112 )
End Sub

Sub Query(Var1 As Integer, Var2 As Integer)
SQLstr = "SELECT * FROM IncomesNew Where idIncomes in (" & Str(Var1) & "," & Str(Var2) & ")"

conn.ConnectionString = "Provider=SQLOLEDB.1;Password=1;Persist Security Info=True;User ID=ИмяЮзера;Initial Catalog=ИмяБазыДанных;Data Source=ИмяСервера"
conn.Open
rsIncomes.Open SQLstr, conn
Range("a1").CopyFromRecordset rsIncomes
End Sub

...
Рейтинг: 0 / 0
Запрос в Excel возвращает пустоту((
    #34762930
Nitrolis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще раз хочу поблагодарить за помощь и предложенные варианты! Еще раз повторюсь: вставить в текст запроса переменные через VBA - не проблема. И ответ на свой вопрос с помощью всех участвующих я получил - Excel не позволяет использовать переменные в тексте запроса (см. мой второй топик)...
VBA - позволяет)))

Постараюсь быть понятнее: частный случай - есть несколько запросов, у которых параметры одинаковы, количество и состав запросов может меняться, да и сами запросы могут меняться, но поля у всех одинаковы. Клею их влоб - Union ALL (текст запроса очень большой) и Ctr+C - Ctr+V напрямую в сводную таблицу Excel, где выборка >200000 строк превращается в человеческий вид быстро и результат не заставляет ждать. С использованием переменных непосредственно в самом запросе остается подставить параметры и объеденить запросы в нужном порядке... НО! Но с переменными пусто((( Конечно вчера обошел через VBA... сделал набор массивов с текстами запросов и с & переменная &)), которые объединяю в нужном порядке в единый массив (можно даже красиво через форму оформить)) и в сводную таблицу... но думал обойдусь Ctr+C - Ctr-V..

Спасибо всем.
...
Рейтинг: 0 / 0
Запрос в Excel возвращает пустоту((
    #34763156
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NitrolisИ ответ на свой вопрос с помощью всех участвующих я получил - Excel не позволяет использовать переменные в тексте запроса (см. мой второй топик)... Это неверный ответ. Эксель позволяет использовать переменные параметры в тексте запроса. Те самые вопросительные знаки.

NitrolisVBA - позволяет)))А VBA позволяет не только переменные параметры использовать, но и весь запрос может на лету конструировать и представлять переменные параметры константами. Как раз это (превращение переменных в константы) ты и делаешь в последнем показаном макросе.

NitrolisПостараюсь быть понятнее:
....
С использованием переменных непосредственно в самом запросе остается подставить параметры и объеденить запросы в нужном порядке... НО! Но с переменными пусто(((Понятнее быть не получилось.

Что такое переменные в твоем понимании? То что ты делаешь в запросе
Код: plaintext
1.
2.
3.
declare @Var1 varchar( 10 )
declare @Var2 varchar( 10 )
set @Var1 = 177 
set @Var2= 507 
Это переменные которых ты хочешь?
Если да, то вынужден тебя огорчить, эти переменные создаются на самом серевере базы данных и принадлежат ему. Эксель выступает в роли клиента БД и доступа до этих переменных не имеет в принципе.
Но можно объявить sql переменные в начале блочного запроса и потом использовать их вот например так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
    Dim var1, var2, SQLstring As Variant
    var1 =  177 
    var2 =  507 
    SQLstring = Array( _
        "begin" & Chr( 10 ), _
        "declare @Var1 varchar(10)" & Chr( 10 ), _
        "declare @Var2 varchar(10)" & Chr( 10 ), _
        "set @Var1=" & var1 & Chr( 10 ), _
        "set @Var2=" & var1 & Chr( 10 ), _
        "SELECT     ID_PLU " & Chr( 10 ), _
        "FROM lentmp1 " & Chr( 10 ), _
        "GROUP BY ID_PLU " & Chr( 10 ), _
        "HAVING      (ID_PLU IN (@Var1, @Var2)) " & Chr( 10 ), _
        "end", _
    )
Вот такой синтаксис возможен только через VBA, увы. Тут уже вопросики подставлять не получится.
...
Рейтинг: 0 / 0
Запрос в Excel возвращает пустоту((
    #34763686
Nitrolis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl Что такое переменные в твоем понимании? То что ты делаешь в запросе
Код: plaintext
1.
2.
3.
declare @Var1 varchar( 10 )
declare @Var2 varchar( 10 )
set @Var1 = 177 
set @Var2= 507 
Это переменные которых ты хочешь?
Если да, то вынужден тебя огорчить, эти переменные создаются на самом серевере базы данных и принадлежат ему. Эксель выступает в роли клиента БД и доступа до этих переменных не имеет в принципе.

Спасибо за разъяснение. Буду знать!
Но не понятно - как вы собрались использовать sql переменные в нижеследующем коде???? Очевидно противоречие!

White Owl Но можно объявить sql переменные в начале блочного запроса и потом использовать их вот например так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
    Dim var1, var2, SQLstring As Variant
    var1 =  177 
    var2 =  507 
    SQLstring = Array( _
        "begin" & Chr( 10 ), _
        "declare @Var1 varchar(10)" & Chr( 10 ), _
        "declare @Var2 varchar(10)" & Chr( 10 ), _
        "set @Var1=" & var1 & Chr( 10 ), _
        "set @Var2=" & var1 & Chr( 10 ), _
        "SELECT     ID_PLU " & Chr( 10 ), _
        "FROM lentmp1 " & Chr( 10 ), _
        "GROUP BY ID_PLU " & Chr( 10 ), _
        "HAVING      (ID_PLU IN (@Var1, @Var2)) " & Chr( 10 ), _
        "end", _
    )
Вот такой синтаксис возможен только через VBA, увы. Тут уже вопросики подставлять не получится.

Вернулись к исходному вопросу! КОД ВЕРНУЛ В EXCEL ПУСТОТУ!((
...
Рейтинг: 0 / 0
Запрос в Excel возвращает пустоту((
    #34765716
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NitrolisНо не понятно - как вы собрались использовать sql переменные в нижеследующем коде???? Очевидно противоречие!Никакого противоречия. Если присмотрется повнимательнее, я создаю не просто запрос, а пакет. И отсылаю в базу данных пакет в котором уже нету vba-шных переменных.
Этот vba код по существу сконструирует запрос:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
begin
    declare @Var1 varchar( 10 )
    declare @Var2 varchar( 10 )
    set @Var1= 177 
    set @Var2= 507 
    SELECT     ID_PLU
    FROM lentmp1
    GROUP BY ID_PLU
    HAVING      (ID_PLU IN (@Var1, @Var2))
end
И конечно остается вопрос, а этот запрос вообще может вернуть что-нибудь осмысленное? Запусти его через isql или какой у тебя там стандартный клиент к базе.


NitrolisВернулись к исходному вопросу! КОД ВЕРНУЛ В EXCEL ПУСТОТУ!((То что запрос возвращает пустоту это в 99% случаев ошибка в самом запросе. Забудь на время про Эксель, добейся чтобы твой гигантский и явно излишне усложненный запрос вообще вернул какие-то осмысленные данные. Потом скопируй его в Экселевский макрос.
...
Рейтинг: 0 / 0
Запрос в Excel возвращает пустоту((
    #34767461
Nitrolis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White OwlТо что запрос возвращает пустоту это в 99% случаев ошибка в самом запросе. Забудь на время про Эксель, добейся чтобы твой гигантский и явно излишне усложненный запрос вообще вернул какие-то осмысленные данные. Потом скопируй его в Экселевский макрос.
Это уже откровенная демагогия!
Запрос который рассмотрен в этой теме, РЕАЛЬНЫЙ ПОЛНОСТЬЮ РАБОЧИЙ ЗАПРОС и огромные запросы тут ни при чем! На примере этого запроса я и поднял эту тему. Понятное дело, что прежде чем носом землю рыть в огромном запросе, который отлично выполняется в Query (при добавлении текста запроса в Excel) и в Query Analyzer, проще было убедиться на элементарном примере.

Итак,
данные получены:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
    Dim var1, var2, SQLstring As Variant
    var1 =  177 
    var2 =  507 
    SQLstring = Array( _
        "SELECT     ID_PLU " & Chr( 10 ), _
        "FROM lentmp1 " & Chr( 10 ), _
        "GROUP BY ID_PLU " & Chr( 10 ), _
        "HAVING      (ID_PLU IN (" & var1 & ", " & var2 & ")) " _
    )

пусто:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
    Dim var1, var2, SQLstring As Variant
    var1 =  177 
    var2 =  507 
    SQLstring = Array( _
        "begin" & Chr( 10 ), _
        "declare @Var1 varchar(10)" & Chr( 10 ), _
        "declare @Var2 varchar(10)" & Chr( 10 ), _
        "set @Var1=" & var1 & Chr( 10 ), _
        "set @Var2=" & var1 & Chr( 10 ), _
        "SELECT     ID_PLU " & Chr( 10 ), _
        "FROM lentmp1 " & Chr( 10 ), _
        "GROUP BY ID_PLU " & Chr( 10 ), _
        "HAVING      (ID_PLU IN (@Var1, @Var2)) " & Chr( 10 ), _
        "end", _
    )
...
Рейтинг: 0 / 0
Запрос в Excel возвращает пустоту((
    #34769049
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nitrolis White OwlТо что запрос возвращает пустоту это в 99% случаев ошибка в самом запросе. Забудь на время про Эксель, добейся чтобы твой гигантский и явно излишне усложненный запрос вообще вернул какие-то осмысленные данные. Потом скопируй его в Экселевский макрос.
Это уже откровенная демагогия! Нет, это к демагогии не имеет отношения.

NitrolisЗапрос который рассмотрен в этой теме, РЕАЛЬНЫЙ ПОЛНОСТЬЮ РАБОЧИЙ ЗАПРОС и огромные запросы тут ни при чем!То есть ты считаешь, что запрос
Код: plaintext
select ID_PLU from lentmp1 group by ID_PLU having (ID_PLU in ( 177 ,  507 ))
Это реальный и полностью рабочий запрос? Ну если закрыть глаза на то что он кривой, нечитабельный и неэффективный, то да он действительно рабочий, он сможет показать тебе 177 и 507 если такие записи есть в таблице.... Читай учебник по SQL потом прийдешь еще раз.
Потом почитай учебник по ТВОЕМУ серверу, посмотри как там делаются пакеты запросов и блочные запросы.
И не забывай применять вон ту инструкцию которую ты так опрометчиво обозвал демагогией. Она тебя спасет... Если ты ею воспользуешься конечно.
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Запрос в Excel возвращает пустоту((
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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