|
|
|
Как отключить Excel от SQL-сервера после выполнения запроса
|
|||
|---|---|---|---|
|
#18+
на SQL-сервере находятся данные (1С, но это не принципиально) из книги Excel SQL-запросом я вытягиваю данные (в сводную таблицу или на лист). Как закрыть соединение с SQL-сервером, не закрывая книгу Excel? (эта книга должна постоянно висеть открытой у пользователя. Каждая выборка данных попадает на новый лист, поэтому закрывать книгу нельзя). Пробовал (при формировании сводной таблицы): 1.MaintainConnection = False - не помогает 2. MaintainConnection = True PivotCache.Connection.Close - не помогает 3. сохранить книгу Excel - не помогает Как я определяю, что соединение открыто? Пытаюсь открыть базу в однопользовательском режиме - не разрешает, закрываю книгу Excel - разрешает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2006, 09:02:21 |
|
||
|
Как отключить Excel от SQL-сервера после выполнения запроса
|
|||
|---|---|---|---|
|
#18+
Ну если в лоб и побыстрому то мона так use master CREATE procedure _Kill_Base_Connections @BaseName nvarchar(500) as declare @ProcID int,@strSQL nvarchar(500) declare kill_cursor Cursor for select spid from master.dbo.[sysprocesses] where db_name(dbid) in (@BaseName) open kill_cursor FETCH NEXT FROM kill_cursor INTO @procid WHILE @@FETCH_STATUS = 0 BEGIN set @strSQL= 'Kill ' + cast(@ProcID as nvarchar(500)) exec sp_executesql @strSQL FETCH NEXT FROM kill_cursor INTO @procid END CLOSE kill_cursor DEALLOCATE kill_cursor после этого ни один коннект не выживет GO ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2006, 10:06:33 |
|
||
|
Как отключить Excel от SQL-сервера после выполнения запроса
|
|||
|---|---|---|---|
|
#18+
Так не закрывает? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2006, 10:13:54 |
|
||
|
Как отключить Excel от SQL-сервера после выполнения запроса
|
|||
|---|---|---|---|
|
#18+
Ashton, а так еще не пробовал (с импользование ADODB.Recordset) я пробовал так, как макрос записывается сейчас начну экспериментировать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2006, 10:42:20 |
|
||
|
Как отключить Excel от SQL-сервера после выполнения запроса
|
|||
|---|---|---|---|
|
#18+
а чтобы работать с объектом ADODB.Connection, какую библиотеку нужно к проекту подключить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2006, 10:45:28 |
|
||
|
Как отключить Excel от SQL-сервера после выполнения запроса
|
|||
|---|---|---|---|
|
#18+
"Microsoft ActiveX Data Objects". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2006, 11:06:22 |
|
||
|
Как отключить Excel от SQL-сервера после выполнения запроса
|
|||
|---|---|---|---|
|
#18+
У меня выскакивает "Ошибка, определенная объектом" на этой строке: Set PivotCache.Recordset = rstRecordset Ashton, ты не мог бы бросить весь рабочий пример целиком? буду ОЧЕНЬ признателен ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2006, 12:11:43 |
|
||
|
Как отключить Excel от SQL-сервера после выполнения запроса
|
|||
|---|---|---|---|
|
#18+
Код: 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. P.S. В справочной системе есть пример создания сводной таблицы с данными из внешнего источника с использованием ADO. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2006, 23:40:33 |
|
||
|
Как отключить Excel от SQL-сервера после выполнения запроса
|
|||
|---|---|---|---|
|
#18+
спасибо большое, Ashton пример абсолютно рабочий, когда код находится в Workbook, но когда я пытаюсь выполнить этот код в dll-ке на VB6(заменив, естественно, все соответствующите ActiveWorkbook на внутрнние переменные), то всё спотыкается на Set glWorkBook.PivotCaches.Add(SourceType:=xlExternal).Recordset = rst хотя все переменные определены и инициализированы. Видимо, OLE не безграничен. PS а этот вариант действительно НЕ оставляет зависшее соединение, жаль, что его не получается использовать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2006, 09:25:16 |
|
||
|
Как отключить Excel от SQL-сервера после выполнения запроса
|
|||
|---|---|---|---|
|
#18+
Так если у тебя код в dll, то и вытягивай данные в самой dll! Зачем ты это Экселю поручаешь? Весь код работы с БД оставь внутри dll, вытягиваешь рекродсет, копируешь его в Эксель на пустой лист, закрываешь соединение с базой. Потом строишь сводные таблицы на основе данных уже лежащих в книге. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2006, 17:56:58 |
|
||
|
Как отключить Excel от SQL-сервера после выполнения запроса
|
|||
|---|---|---|---|
|
#18+
Была такая мысль, но остановило вот что: 1. двойная работа - потеря скорости 2. бывают случаи, когда данные на лист не помещаются (например, слишком много уникальных пар Склад-Товар, больше 65536), а если сразу в сводную таблицу (склады горизонтально), то все прекрасно помещается. А копировать данные на лист это CopyFromRecordset? Эх, хотелось бы весь код в dll "заковырять" - от пытливых взоров. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2006, 19:38:45 |
|
||
|
Как отключить Excel от SQL-сервера после выполнения запроса
|
|||
|---|---|---|---|
|
#18+
Яровенко1. двойная работа - потеря скоростиВ нормальной системе - нет. Яровенко2. бывают случаи, когда данные на лист не помещаются (например, слишком много уникальных пар Склад-Товар, больше 65536), а если сразу в сводную таблицу (склады горизонтально), то все прекрасно помещается.Кошмар какой! Тащить на клиента более сотни записей это уже неправильно. Лучше переложить задачу составления сводной таблицы на сервер. Он для этого специально предназначен собственно говоря :) Лучше усложни свой SQL запрос чтобы получать цифры как можно более готовые для показа юзеру. ЯровенкоА копировать данные на лист это CopyFromRecordset?Если вытягиваешь данные макросом, то да. А если из dll то лучше использовать что-то вроде: Код: 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2006, 20:09:35 |
|
||
|
Как отключить Excel от SQL-сервера после выполнения запроса
|
|||
|---|---|---|---|
|
#18+
если я правильно понял, ты из рекордсета заполняешь массив, а массив присваеваешь диапазону. А зачем, ведь это двойная работа? Set rstRecordset = New ADODB.Recordset ................................. заполнение рекордсета Dim tempRanje As Range Set tempRanje = glSheet.Range("A1") tempRanje.CopyFromRecordset rstRecordset ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2006, 09:21:48 |
|
||
|
Как отключить Excel от SQL-сервера после выполнения запроса
|
|||
|---|---|---|---|
|
#18+
То, что я написал в предыдущем посте - прекрасно работает в dll-ке. А вот конструкция Set objPivotCache.Recordset = MyRecordset работает ТОЛЬКО непосредственно в книге Excel, а в dll-ке выдает невразумительную ошибку "определенную объектом". А так хочется заполнять сводную таблицу из dll. Помогите, Братья! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2006, 09:29:23 |
|
||
|
Как отключить Excel от SQL-сервера после выполнения запроса
|
|||
|---|---|---|---|
|
#18+
ЯровенкоА вот конструкция Set objPivotCache.Recordset = MyRecordset работает ТОЛЬКО непосредственно в книге Excel, а в dll-ке выдает невразумительную ошибку "определенную объектом".Вот именно по этому, я и делаю двойную работу с промежуточным массивом :) Реальный рекордсет у меня может быть каким угодно и приходить откуда угодно (хоть из ADO, хоть из ODBC, хоть самостоятельно рассчитаным). Но чтобы перекинуть данные в Эксель их надо привести в форму понятную Экселю. Вот для этого я и использую Variant-массив. Это не вопрос двойной работы, это вопрос приведения типов данных :) Если перекидывать данные по одной ячейке за раз, то можно обойтись и без промежуточного массива, можно будет работать напрямую с резалтсетом, но тогда ты будешь делать ту же самую конвертацию непосредственно перед посылкой данных в Эксель. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.04.2006, 18:24:12 |
|
||
|
|

start [/forum/topic.php?fid=61&msg=33678256&tid=2184947]: |
0ms |
get settings: |
4ms |
get forum list: |
8ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
131ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 195ms |
| total: | 392ms |

| 0 / 0 |
