powered by simpleCommunicator - 2.0.39     © 2025 Programmizd 02
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Кто знает, как дернуть из Экселя хранимую процедуру MS SQL ?
18 сообщений из 18, страница 1 из 1
Кто знает, как дернуть из Экселя хранимую процедуру MS SQL ?
    #34758907
aureli
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Без параметров, или с фиксированными параметрами - умею.
А как сделать так, чтобы параметры, передаваемые хранимой процедуре, читались из ячейки???

Говорит, типа, нельзя использовать параметры, если запрос не представляется графически..
...
Рейтинг: 0 / 0
Кто знает, как дернуть из Экселя хранимую процедуру MS SQL ?
    #34759593
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1) Сделай запрос с жестко задаными параметрами
2) Сохрани книгу
3) БОЛЬШЕ НИКОГДА НЕ ЗАПУСКАЙ MS Query НА ЭТОЙ КНИГЕ
4) Запускай VBA (Alt+F11)
5) Иди в консоль (Ctrl+G)
6) Даешь команду:
Код: plaintext
 ? ActiveSheet.QueryTables( 1 ).CommandText
7) Получишь свою SQL команду с жесткими параметрами.
8) Даешь команду
Код: plaintext
ActiveSheet.QueryTables( 1 ).CommandText = "твоя sql команда"
И в этой команде заменяешь все свои параметры на знаки вопроса.
9) Закрываешь VBA
10) На листе Экселя ставишь курсор в одну из ячеек со старой таблицей и командуешь обновить ее.
Теперь Эксель на каждый вопрос встреченный в sql команде попросит ввести параметр. Там сможешь привязать параметры к ячейкам.
...
Рейтинг: 0 / 0
Кто знает, как дернуть из Экселя хранимую процедуру MS SQL ?
    #34768642
aureli
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо огромное, работает!
...
Рейтинг: 0 / 0
Кто знает, как дернуть из Экселя хранимую процедуру MS SQL ?
    #35281287
Сергей06
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Подскажите, в каком формате нужно заносить в ячейку параметр который я обозначил вопросом :
Код: plaintext
ActiveSheet.QueryTables( 1 ).CommandText = "SELECT ?,`Данные$`.Дата FROM `\\server\МД2008`.`Данные$` `Данные$`;"
Вместо вопроса было [`Данные$`.Количество]
2. Можно ли такимже образом изменять параметры запроса, если данные отображаются в ввиде сводной таблицы? В этом случае Команда ? ActiveSheet.QueryTables(1).CommandText выдает ошибку. Можно ли в Query изменить запрос, проставив вместо имен полей вопросы?
...
Рейтинг: 0 / 0
Кто знает, как дернуть из Экселя хранимую процедуру MS SQL ?
    #35281730
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей061. Подскажите, в каком формате нужно заносить в ячейку параметр который я обозначил вопросом :
Код: plaintext
ActiveSheet.QueryTables( 1 ).CommandText = "SELECT ?,`Данные$`.Дата FROM `\\server\МД2008`.`Данные$` `Данные$`;"
Вместо вопроса было [`Данные$`.Количество]В данном случае - никак в принципе. Имя колонки не может быть переменным. Формируй строку запроса в макросе, потом отдавай ее в QueryTable.CommandText.

Сергей062. Можно ли такимже образом изменять параметры запроса, если данные отображаются в ввиде сводной таблицы? В этом случае Команда ? ActiveSheet.QueryTables(1).CommandText выдает ошибку.Потому что сводная таблица это PivotTable а не QueryTable.
Сергей06Можно ли в Query изменить запрос, проставив вместо имен полей вопросы?Нет.
...
Рейтинг: 0 / 0
Кто знает, как дернуть из Экселя хранимую процедуру MS SQL ?
    #35799945
Vlaban
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Методом проб и ошибок я понял, что в VBA ActiveSheet.QueryTables(1).CommandText имеет ограничение в колличестве символов. Был запрос, отлично выполнялся через MS Query, но почему то выдавалась ошибка в VBA. Если я не прав, можете меня поправить. Количество мабудь не больше 1024.
...
Рейтинг: 0 / 0
Кто знает, как дернуть из Экселя хранимую процедуру MS SQL ?
    #35800061
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VlabanМетодом проб и ошибок я понял, что в VBA ActiveSheet.QueryTables(1).CommandText имеет ограничение в колличестве символов. Был запрос, отлично выполнялся через MS Query, но почему то выдавалась ошибка в VBA. Если я не прав, можете меня поправить. Количество мабудь не больше 1024.Возможная длина команды зависит от версии Экселя. В старых ограничение в 254, в новых больше.
В любом случае, если надо работать с очень длинной командой, которая превышает ограничение, ее надо разбить на несколько ячеек массива. И полученый массив отдать в .CommandText
Код: plaintext
1.
2.
3.
4.
Dim mysql As Variant ' переменная не должна быть жестким массивом.
mysql = Array("select field1, field2 ...... fi", _  ' 254 символа
                    "eild888, field889, field890, ..... f" , _ ' еще 254 символа
                    "rom sometable ")
ActiveSheet.QueryTables( 1 ).CommandText = mysql
...
Рейтинг: 0 / 0
Кто знает, как дернуть из Экселя хранимую процедуру MS SQL ?
    #35807014
Vlaban
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
возможно вопрос покажется слишком простым, но чтож я делаю не так
в VBA на Thisbook ввожу

Код: plaintext
1.
2.
3.
4.
Private Sub Workbook_Open()
Dim mysql As Variant
mysql = Array(".......")
ActiveSheet.QueryTables( 1 ).CommandText = mysql
End Sub

выдается сообщение Type mismatch
...
Рейтинг: 0 / 0
Кто знает, как дернуть из Экселя хранимую процедуру MS SQL ?
    #35807019
Vlaban
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
плюс, когда запрос все-таки не влазит в редактор, приходится переходить на вторую страку, даже есил после ", т.е. следующий параметр уже не воспринимается к этой Array,т.е.

Код: plaintext
1.
Array("SELECT .....",
".....") - эта строка уже не воспринмается, выдается ошибка....
...
Рейтинг: 0 / 0
Кто знает, как дернуть из Экселя хранимую процедуру MS SQL ?
    #35809049
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlabanвыдается сообщение Type mismatchУбедись что КАЖДАЯ строка массива равна по длине максимальной длине строки. Меньше может быть только последний элемент массива. Убедись что суммарная строка после склейки будет нормальной sql командой.
Vlaban
Код: plaintext
1.
Array("SELECT .....",
".....") - эта строка уже не воспринмается, выдается ошибка....
А подчеркивания кто ставить будет? У всех потомков VB разбивка одной команды на несколько строк делается при помощи знака подчерка.
Код: plaintext
1.
2.
3.
aaa= Array("fisrt", _
     "second", _
     "fird" _
) ' конец строки

А вообще, я очень не рекомендую играться с супер-длинными sql-командами. Слишком много проблем. Лучше сделай хранимую процедуру или вьюшку и зови их из клиента.
...
Рейтинг: 0 / 0
Кто знает, как дернуть из Экселя хранимую процедуру MS SQL ?
    #35809353
Vlaban
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасиб, действительно, составил строку из 4-х блоков mysql1+mysql2+mysql3+mysql4
прокатило, в консоли, похоже есть ограничения для ActiveSheet.QueryTables(1).CommandText на 1024 символа. Через функцию, все ок.
С радостью бы запихнул все в процедуру, да только базу трогать нельзя, не моя, возможно будет апгрейд, востановление с бекапа и т.п. и потом могут вылезти бока...
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Кто знает, как дернуть из Экселя хранимую процедуру MS SQL ?
    #38074251
Gues
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дико извиняюсь, но при вставке "? ActiveSheet.QueryTables(1).CommandText" в консоль и нажатии F5 вместо текста процедуры выскакивает диалоговое окно сохранения макроса. Может в описании пропущены какие то пункты которые не очевидны человеку впервые запустившему VBA ?

Заранее спасибо.
...
Рейтинг: 0 / 0
Кто знает, как дернуть из Экселя хранимую процедуру MS SQL ?
    #38074275
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не вчитываясь в предыдущее... в консоли для выполнения команды надо нажимать Enter а не F5
...
Рейтинг: 0 / 0
Кто знает, как дернуть из Экселя хранимую процедуру MS SQL ?
    #38074299
Gues
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Subscript out of range
...
Рейтинг: 0 / 0
Кто знает, как дернуть из Экселя хранимую процедуру MS SQL ?
    #38074306
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
значит на этом листе нет созданных QueryTable
...
Рейтинг: 0 / 0
Кто знает, как дернуть из Экселя хранимую процедуру MS SQL ?
    #38074367
Gues
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Логично, но таблица точно заполняется по скрипту - закрываю документ открываю по новой обновляю данные, все работает. Да и текст запроса вытащить можно если надо...
...
Рейтинг: 0 / 0
Кто знает, как дернуть из Экселя хранимую процедуру MS SQL ?
    #38074513
f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
ActiveSheet.QueryTables(1)


1 точно один?
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Кто знает, как дернуть из Экселя хранимую процедуру MS SQL ?
    #39326490
Гость321
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl Сергей062. Можно ли такимже образом изменять параметры запроса, если данные отображаются в ввиде сводной таблицы? В этом случае Команда ? ActiveSheet.QueryTables(1).CommandText выдает ошибку.Потому что сводная таблица это PivotTable а не QueryTable.

Значит ли это, что для этого нужно использовать ? ActiveSheet.PivotTables(1).CommandText или сводную таблицу получить по запросу с параметрами нельзя?
Не получается, пишет Object doesn't support this property or method
Не могу найти как для PivotTables это поле называется
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Кто знает, как дернуть из Экселя хранимую процедуру MS SQL ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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