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

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

KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
28.08.2007, 16:36:36
    #34758854
Nitrolis
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос в Excel возвращает пустоту((
Код: 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
28.08.2007, 17:09:35
    #34759006
HandKot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос в Excel возвращает пустоту((
могу и ошибаться, но в запросах нельзя определять переменные их можно только передавать
в таком случае переменные описываются символом "знак вопроса"
Код: 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
28.08.2007, 17:40:05
    #34759144
Nitrolis
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос в Excel возвращает пустоту((
Не представляю, как я передам переменные в порядке их следования в импорте внешних данных Excel (2003)).... Как понимаю ответ на мой вопрос: "Неужели в Экселе нельзя использовать запросы с переменными?" - НЕТ!((( Жаль! Через VBA обойду!)

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


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


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

так если привязать параметры к ячейкам, то ничего страшного не будет, просто несколько "знаков вопросов", будут ссылаться на одну и туже ячейку
...
Рейтинг: 0 / 0
29.08.2007, 13:39:14
    #34761326
Nitrolis
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос в Excel возвращает пустоту((
Всё неудобство сводится к тому, что исходный текст запроса НАДО РЕДАКТИРОВАТЬ!!! Но хотелось, чтобы это свелось к замене нескольких переменных в самом запросе... Через 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
29.08.2007, 15:14:53
    #34761833
f
f
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос в Excel возвращает пустоту((
На мой вопрос ответите ?
...
Рейтинг: 0 / 0
29.08.2007, 17:12:16
    #34762459
Nitrolis
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос в Excel возвращает пустоту((
FНа мой вопрос ответите ?
Сори!

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

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

Можно чуть подробнее?..
...
Рейтинг: 0 / 0
29.08.2007, 18:12:36
    #34762717
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос в Excel возвращает пустоту((
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
29.08.2007, 18:45:46
    #34762803
f
f
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос в Excel возвращает пустоту((
Пример:
Код: 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
29.08.2007, 19:56:23
    #34762930
Nitrolis
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос в Excel возвращает пустоту((
Еще раз хочу поблагодарить за помощь и предложенные варианты! Еще раз повторюсь: вставить в текст запроса переменные через VBA - не проблема. И ответ на свой вопрос с помощью всех участвующих я получил - Excel не позволяет использовать переменные в тексте запроса (см. мой второй топик)...
VBA - позволяет)))

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

Спасибо всем.
...
Рейтинг: 0 / 0
29.08.2007, 23:29:34
    #34763156
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос в Excel возвращает пустоту((
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
30.08.2007, 10:53:34
    #34763686
Nitrolis
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос в Excel возвращает пустоту((
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
30.08.2007, 17:57:34
    #34765716
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос в Excel возвращает пустоту((
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
31.08.2007, 12:36:03
    #34767461
Nitrolis
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос в Excel возвращает пустоту((
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
31.08.2007, 18:21:42
    #34769049
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос в Excel возвращает пустоту((
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
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Запрос в Excel возвращает пустоту(( / 22 сообщений из 22, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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