powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / ADODB в приложение Excel - очистка памяти
6 сообщений из 6, страница 1 из 1
ADODB в приложение Excel - очистка памяти
    #35848160
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Творческого дня уважаемые господа !

Проясните ситуацию, если сталкивались

В VBA коде ADODB компонентом описан коннект и запрос к текущей книге !
Запрос выполняеться прекрасно,сохранение книги и т.д., но при выходе из
Excel включаються дикие тормоза ????????
Допускаю что неверно грузиться память, полагаю неверно настроен RecordSet,
подскажите пожалуйста ...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Public Sub Exec()
  Dim RsExe As ADODB.Recordset
  Set RsExe = New ADODB.Recordset
  Call RsExe.Open("select ... from ......", "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=" & ActiveWorkbook.FullName)
  Call Sheet.Range("A2").Cells( 1 ,  1 ).CopyFromRecordset(RsExe)
  RsExe.Close
  Set RsExe = Nothing
End Sub


Вот такой интересный эксперимент

Взял свою Активную книгу - сделал два копии (a.xls,b.xls)

A.xls - активирую - стучусь из нею ADO запросом к b.xls
- отработка корректная (15-20 сек)
- закрытие книги a.xls - корректно и стандартное во времени

Вывод и причины сделать не могу ....!!!!!!!!!
Типа дуплиться некая ячейка памяти ....

Благодарен и признателен !
...
Рейтинг: 0 / 0
ADODB в приложение Excel - очистка памяти
    #35848391
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Set cn =New ADODB.Connection
cn.CursorLocation = adUseClient
cn.Open "Provider=Microsoft.Jet.OLEDB…"
RsExe.Open "select …", cn, adOpenStatic, adLockReadOnly
Set RsExe.ActiveConnection = Nothing
cn.Close
Set cn = Nothing
Call Sheet.Range("A2").Cells( 1 ,  1 ).CopyFromRecordset(RsExe)
…
...
Рейтинг: 0 / 0
ADODB в приложение Excel - очистка памяти
    #35848396
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тогда уж лучше так:


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Set cn =New ADODB.Connection
cn.CursorLocation = adUseClient
cn.Open "Provider=Microsoft.Jet.OLEDB…"

Set RsExe = New ADODB.Recorset
Set RsExe.ActiveConnection = cn
RsExe.Open "select …", , adOpenStatic, adLockReadOnly

Set RsExe.ActiveConnection = Nothing
cn.Close
Set cn = Nothing

Call Sheet.Range("A2").Cells( 1 ,  1 ).CopyFromRecordset(RsExe)

Set RsExe = Nothing
...
Рейтинг: 0 / 0
ADODB в приложение Excel - очистка памяти
    #35850689
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_One,

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Private Sub CommandButton1_Click()
  Dim I As Integer, Naim As String, Cell As String, Sheet As Worksheet, RsExe As ADODB.Recordset, CnExe As ADODB.Connection
  'On Error Resume Next
  I = CommandBars("SppQuery").FindControl(Tag:="cbList").ListIndex
  Naim = Split(Workbooks("SppQuery.xla").Sheets("Memo").Cells(I,  2 ).Value, "!")( 0 )
  Cell = Split(Workbooks("SppQuery.xla").Sheets("Memo").Cells(I,  2 ).Value, "!")( 1 )
  For Each Sheet In ActiveWorkbook.Worksheets
    If UCase(Sheet.Name) = UCase(Naim) Then Exit For
  Next
  If Sheet Is Nothing Then Set Sheet = ActiveWorkbook.Worksheets.Add(After:=ActiveWorkbook.Worksheets(ActiveWorkbook.Worksheets.Count))
  Sheet.Name = Naim
  If Sheet.UsedRange.Cells(Sheet.UsedRange.Rows.Count, Sheet.UsedRange.Columns.Count).Row >= Sheet.Range(Cell).Cells( 1 ,  1 ).Row And Sheet.UsedRange.Cells(Sheet.UsedRange.Rows.Count, Sheet.UsedRange.Columns.Count).Column >= Sheet.Range(Cell).Cells( 1 ,  1 ).Column Then Sheet.Range(Sheet.Range(Cell).Cells( 1 ,  1 ), Sheet.UsedRange.Cells(Sheet.UsedRange.Rows.Count, Sheet.UsedRange.Columns.Count)).ClearContents
  Set CnExe = New ADODB.Connection
  CnExe.CursorLocation = adUseClient
  Call CnExe.Open("Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=" & ActiveWorkbook.FullName)
  Set RsExe = New ADODB.Recordset
  Set RsExe.ActiveConnection = CnExe
  Call RsExe.Open(Workbooks("SppQuery.xla").Sheets("Memo").Cells(I,  3 ).Value, , adOpenStatic, adLockReadOnly)
  RsExe.Close
  Set RsExe.ActiveConnection = Nothing
  Set RsExe = Nothing
  CnExe.Close
  Set CnExe = Nothing

Сделано - эффект тот же .... !!!

Как только делаешь RsExe.Open .... зависыние процессора при закрытии файла ...???
Которая может быть причины такого поведения ?

Может есть еще мысли ...
...
Рейтинг: 0 / 0
ADODB в приложение Excel - очистка памяти
    #35850714
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
...
  Set RsExe = New ADODB.Recordset

rs.CursorLocation = adUseClient

  Set RsExe.ActiveConnection = CnExe
...
Может есть еще мысли ...[/quot]

попробуйте. а тормоза начинаются в какой момент? если при открытии рекордсета, то это нормально - выборка и закачка данных происходит, поэтому и память и проц юзаются. оптимизируйте свой запрос.
...
Рейтинг: 0 / 0
ADODB в приложение Excel - очистка памяти
    #35851766
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot Konst_One
попробуйте. а тормоза начинаются в какой момент?
[/quot]

Открыл - 20-30 сек стандартно
Снес на лист - 2-3 сек стандартно (можно и без этой команды - ПОКА)
Закрыл - без задержел
Сохранил книгу - стандартно

А вот когда выгружаешь книгу из Excelя - вот здесь тормоз РЕДКИЙ минут 5 -7
просто выгрузка из приложения
Допускаю что связано книга играет роль КЛИЕНТА и СЕРВЕРА ????????
но как их разграничить ?


Вот если сделать так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Вот такой интересный эксперимент 

Взял свою Активную книгу - сделал два копии (a.xls,b.xls)

A.xls - активирую - стучусь из нею ADO запросом к b.xls 
- отработка корректная ( 15 - 20  сек) 
- закрытие книги a.xls - корректно и стандартное во времени 

Вывод и причины сделать не могу ....!!!!!!!!!
Типа дуплиться некая ячейка памяти ....


Благодарен и признателен !
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / ADODB в приложение Excel - очистка памяти
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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