powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / накопительный эффект
24 сообщений из 24, страница 1 из 1
накопительный эффект
    #40102750
Serg197311
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Win 7- 64 office 32-2013
таблицы на сервере, формы на клиенте
при запуске базы открывается форма, на ней выбирается в списке нужный пункт и кнопкой запускается процедура
очистка временных таблиц
заполнение несколькими INSERTами их данными из таблиц на сервере
обработка данных несколькими UPDATEами
открытие на временной таблице рабочей формы
наблюдаю такой эффект:
первый раз процедура выполняется 4 сек
второй - 6 сек
четвертый - 25 сек
восьмой - больше минуты....
базу закрываю - открываю - снова первый - 4 сек и так далее....
с чем это может быть связано и можно ли это преодолеть?
accde пробовал - чуть лучше - но не существенно
...
Рейтинг: 0 / 0
накопительный эффект
    #40102831
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Serg197311
при запуске базы открывается форма, на ней выбирается в списке нужный пункт и кнопкой запускается процедура
очистка временных таблиц

Попробуй их (временные таблицы) вынести в отдельное хранилище...
Попробуй после очистки временных таблиц делать сжатие хранилища временных таблиц...
...
Рейтинг: 0 / 0
накопительный эффект
    #40102918
Eugene-LS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Serg197311
accde пробовал - чуть лучше - но не существенно

Я создаю временную базу локально (на клиенте), проблем не замечал, примерно так (DAO):
Код: vbnet
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.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
Public Sub CreateTempDB_DAO(Optional TempFileName As String = "TempDB.accdb")
'es - 28.09.2012 - 29.01.2021 v004
'--------------------------------------------------------------------
'Создает временную базу данных (MSA-2000-2003) в тек. папке приложения ,
' копирует туда эталонные таблицы  и подключает эти таблицы
'ПАРАМЕТРЫ ВЕРСИИ БД:
'    dbVersion20  - MSA-2
'    dbVersion30  - MSA-97 (compatible with version 3.5).
'    dbVersion40  - MSA-2000-2003
'    dbVersion120 - MSA-2007-2010
'--------------------------------------------------------------------
Dim TempDBPath As String
Dim db As DAO.Database
Dim strDBaseLink As String
Dim l As Long
Dim sTableNameTempalete$, sTableNameLocal$

On Error GoTo CreateTempDB_DAO_Err
'Получаем путь к создаваемой базе
    TempDBPath = CurrentProject.Path & "\" & TempFileName
        
'Сначала удаляем старую (If present)
    If Dir(TempDBPath) <> "" Then
        'On Error Resume Next
        Kill TempDBPath
        DoEvents
        Err.Clear
    End If

'Создаем базу версии MSA-2007
    Set db = DBEngine.CreateDatabase(TempDBPath, dbLangCyrillic, dbVersion120)
    strDBaseLink = ";DATABASE=" & TempDBPath


' Создадим таблицу во временной базе путем копирования эталонной
'01 = 00tp_TabelFromExcel
    sTableNameTempalete = "00tp_TabelFromExcel"
        sTableNameLocal = Mid(sTableNameTempalete, 3)
        DoCmd.CopyObject TempDBPath, sTableNameLocal, acTable, sTableNameTempalete
    'Присоединим созданную таблицу к текущей базе
    l = AttachTableDAO(strDBaseLink, sTableNameLocal)


'--------------------------------------------------------------------------
'Готово!
    'Обновляем список таблиц тек. базы (не обязательно)
    Application.RefreshDatabaseWindow

CreateTempDB_DAO_Bye:
    On Error Resume Next
    db.Close
    Set db = Nothing
    Err.Clear
    Exit Sub

CreateTempDB_DAO_Err:
    MsgBox "Error " & Err.Number & vbCrLf & Err.Description & vbCrLf & _
    "in procedure CreateTempDB_DAO", vbCritical, "Error!"
    Resume CreateTempDB_DAO_Bye
    
End Sub


Вспомогательная функция подключения ("линковки"):
Код: vbnet
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.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
Private Function AttachTableDAO(sConnectString As String, _
                sSrsTableName As String, _
                Optional sLocalTableName As String = "", _
                Optional bMakeTableHidden As Boolean = False) As Long
'----------------------------------------------------------------------------------------
' es 25.11.04 - 29.01.2021 v003
' Вспомогательная функция подключения конкрктной таблицы по аргументам::
'--------------------------------------------------------------------
'   sConnectString       = строка подключения вида: ";DATABASE=C:\DB.mdb"
'   sSrsTableName        = Исходное название таблицы в базе
'   bMakeTableHidden     = Сделать скрытой (по умолч. = нет)
'   sLocalTableName      = Новое имя таблицы (по умолч. = sSrsTableName)
'При ошибке возвращает ее код
'--------------------------------------------------------------------
Dim db As DAO.Database
Dim tdf As DAO.TableDef, sVal$
'--------------------------------------------------------------------
On Error GoTo AttachTableDAO_Err
    
'Имя создаваемой таблицы
    If sLocalTableName = "" Then sLocalTableName = sSrsTableName
    Set db = CurrentDb()
    
'Удаление старой (если есть)
    If DCount("*", "MSysObjects", "[Name]='" & sLocalTableName & "' AND Type=6") > 0 Then
        'Db.TableDefs.Delete sLocalTableName
        DoCmd.SetWarnings False
        DoCmd.DeleteObject acTable, sLocalTableName
        DoCmd.SetWarnings True
    End If

'Создание и подключение
    Set tdf = db.CreateTableDef(sLocalTableName)
    tdf.Connect = sConnectString
    tdf.SourceTableName = sSrsTableName
    db.TableDefs.Append tdf

'если указано что должна быть скрытая
    If bMakeTableHidden = True Then
        Application.SetHiddenAttribute acTable, tdf.Name, True
    End If

AttachTableDAO_End:
    On Error Resume Next
    Set tdf = Nothing
    db.Close
    Set db = Nothing
    Err.Clear
    Exit Function

AttachTableDAO_Err:
    AttachTableDAO = Err.Number
    sVal = "Error " & Err.Number & " (" & Err.Description & ") in Function" & _
           "AttachTableDAO - modConnection_DAO."
    'MsgBox sVal, vbCritical, "Произошла ошибка!"
    Debug.Print sVal
    'Debug.Print "AttachTableDAO_Line: " & Erl & "."
    Err.Clear
    Resume AttachTableDAO_End


...
Рейтинг: 0 / 0
накопительный эффект
    #40102946
Serg197311
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vmag
Serg197311
при запуске базы открывается форма, на ней выбирается в списке нужный пункт и кнопкой запускается процедура
очистка временных таблиц

Попробуй их (временные таблицы) вынести в отдельное хранилище...
Попробуй после очистки временных таблиц делать сжатие хранилища временных таблиц...

Пытаюсь делать и вот проблемы
1)
Код: vbnet
1.
DBEngine.CompactDatabase CompactingDBPathAndName, strTempFile, dbLangCyrillic

выдает ошибку 3170 "попытка открыть базу данных, приведенную пользователем таким-то в состояние препятствующее открытию"
2) если перед этим отключить таблицы , то такое же сообщение +
на последней строке - невозможно найти какой-то( то ли устанавливаемый то ли подключаемый) ISAM
Код: vbnet
1.
2.
3.
4.
    Set tdf = db.CreateTableDef(sLocalTableName)
    tdf.Connect = sConnectString
    tdf.SourceTableName = sSrsTableName
    db.TableDefs.Append tdf
...
Рейтинг: 0 / 0
накопительный эффект
    #40102956
Serg197311
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все ясно....пока на табличке открыта форма - она не удаляется и поэтому сжатие не происходит
...
Рейтинг: 0 / 0
накопительный эффект
    #40103083
Serg197311
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну вроде через отдельную базу для временных таблиц и ее удаление - создание получилось убрать этот эффект...
Спасибо всем кто помогалш!
...
Рейтинг: 0 / 0
накопительный эффект
    #40103092
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Serg197311, до 1-го рантайма. Думаю лучше создать шаблон, да копировать его.
...
Рейтинг: 0 / 0
накопительный эффект
    #40103095
Serg197311
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alecko
Serg197311, до 1-го рантайма. Думаю лучше создать шаблон, да копировать его.

я не понял.... можно поподробнее?
...
Рейтинг: 0 / 0
накопительный эффект
    #40103251
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Serg197311, из рантайма новый экземпляр Аксесс создать не получится, хоть createDatabase, хоть другим способом
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Public Sub CreateNewBase(newDb$)
Dim oAccess  As Object
    Set oAccess = CreateObject("Access.Application")    'Create a new Access instance
    With oAccess
        .NewCurrentDatabase (newDb)
       .CloseCurrentDatabase
    End With
 DoCmd.CopyObject newDb, "Module1", acModule, "Integros" ' put the modul in new database
Set oAccess = Nothing
End Sub


поэтому думаю, что проще создавать шаблон, даже просто пример .accdb, да копировать его хоть через фсо, хоть черз syscmd (с компиляцией).
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Public Function MakeACCDESysCmd(strAccdbPath$, strACCDEOutputPath$) As Boolean
On Error GoTo handle1
Dim app As New Access.Application, boolCompile As Boolean
boolCompile = True
app.AutomationSecurity = msoAutomationSecurityLow
app.SysCmd 603, strAccdbPath, strACCDEOutputPath
exithere:
MakeACCDESysCmd = boolCompile
Set app = Nothing
Exit Function
handle1:
boolCompile = False
GoTo exithere
End Function


...
Рейтинг: 0 / 0
накопительный эффект
    #40103286
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alecko
из рантайма новый экземпляр Аксесс создать не получится, хоть createDatabase, хоть другим способом
для каких целей применительно к данному топику нужно создавать новый экземпляр Аксесс?
...
Рейтинг: 0 / 0
накопительный эффект
    #40103290
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Панург, через CreateDatabase способ описан, показан альтернативный, учитывая что про рантайм только я заикнулся - тоже в тему.
...
Рейтинг: 0 / 0
накопительный эффект
    #40103301
alecko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пересмотрел код "Eugene-LS", смутило createdatabase, помню, была проблема, но тогда нужно было редактировать код в модуле, поэтому без создания экземпляра было не обойтись вот и осталось в памяти, что в рантайме ничего создать нельзя, ан нет. можно.
...
Рейтинг: 0 / 0
накопительный эффект
    #40103303
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alecko
помню, была проблема, но тогда нужно было редактировать код в модуле
YouTube Video
...
Рейтинг: 0 / 0
накопительный эффект
    #40103359
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Панург,

сейчас нужно делать скидки на ковид...

переболели уже все, причем многие по нескольку раз, причем многие даже не знают об этом...
и только память... память теперь самый конкретный индикатор при отсутствии возрастной деменции...
Вчера знакомого встретил, месяца два его не видел, обычно на день раза три на глаза попадался,
Гена говорю - как дела, куда пропал?
Ковид был, говорит, три недели то ивл, то реанимация чередовались...
Сейчас как говорю?
Да всё ничо, с памятью проблемы говорит, кто я, что я помню, где родился, как женился тоже помню...
Но вот утром не могу вспомнить какой фильм вчера вечером смотрел, с кем и о чем по телефону разговаривал...
...
Рейтинг: 0 / 0
накопительный эффект
    #40103375
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Serg197311
с чем это может быть связано

скорее всего с большими объемами записываемого, удаляемого и изменяемого в одном сеансе (экземпляре)...
когда идет массовое удаление, акцесс чаще всего это делает молча, при этом пишет себе в душу (тэмпы) протоколы типа журналов, а сами записи физически не удаляет а помечает как удаленные (будущий мусор)
Иногда он не в состоянии это сделать (слишком много изменений) и тогда мы получаем запрос на подтверждение типа:
Эту операцию невозможно будет отменить, данные будут удалены безвозвратно, подтвердите... бла... бла...
Ну и естественно он помечая, ещё и что-то куда-то пишет в свой журнал и база тоже пухнет...
Если всё это происходит в одном сеансе, то идут накладки по времени, нужно отслюнявить журнал, продолжить его и т.д.
При закрытии приложения и открытии нового экземляра, всё что было до этого считается мусором, журнал начинается с нуля и первые массовые изменения опять идут быстро...
Сжатие БД или её подмена на пустую (в одном экземпляре) приводит к сбросу журналов изменений для данного экземпляра...
Это трудно объяснить, но можно понять на пальцах как это работает на любом из офисных пакетов:
Мы можем после правок в ворде, экселе или акцессе увидеть стрелки туда - сюда, это и есть откаты по журналу...
При перезапуске экземпляра стрелки становятся не активными до первых изменений в предыдущем документе...
Правда мне до сих пор не понятно, зачем в эти журналы писать массовые изменения записей в акцессе...
Всё, что выше сказано, прикинуто лично мною чисто эмпирическим путём очень давно и отнюдь не претендует на истину, но лично меня вполне устраивает...
Если у кого есть другие мысли по поводу выше описанного полтергейста - было бы интересно выслушать
...
Рейтинг: 0 / 0
накопительный эффект
    #40103466
Serg197311
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vmag
Serg197311
с чем это может быть связано

скорее всего с большими объемами записываемого, удаляемого и изменяемого в одном сеансе (экземпляре)...

Там используется 2 временные таблицы
в первую из основной базы грузится до 300 записей. во вторую - 100 - 200 ...Может это и много....
...
Рейтинг: 0 / 0
накопительный эффект
    #40103571
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Serg197311
Там используется 2 временные таблицы
в первую из основной базы грузится до 300 записей. во вторую - 100 - 200 ...Может это и много....

нет, это не много... это вообще ни о чем...
по идее должно было хватить одного переноса временных таблиц в отдельное хранилище без сжатий и танцев с бубном (на пол года - год как минимум)...
А так получается что все туды-сюды были на фоне общей БД
Ну и выше уже говорили, что если времянка у каждого своя, то лучше её хранить на клиенте (так быстрее)
...
Рейтинг: 0 / 0
накопительный эффект
    #40104152
Serg197311
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Продолжу здесь.... О быстродействии
Добился я быстрого выполнения нужной процедуры, но... Как только в основной базе происходят изменения данных - вставка-удаление, изменения.... то выполнение снова замедляется в несколько раз....
С этим что-нибудь сделать можно? Или вперед на SQL-server?
Разнести по времени процессы изменения и считывания данных невозможно,это будет происходить в одно время...
...
Рейтинг: 0 / 0
накопительный эффект
    #40104173
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Serg197311, посмотри что у тебя происходит с памятью в результате твоих действий
...
Рейтинг: 0 / 0
накопительный эффект
    #40104251
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Serg197311
Как только в основной базе происходят изменения данных - вставка-удаление, изменения...


- размер базы?
- размер базы после сжатия и восстановления ?
- количество таблиц?
- порядок количества записей (тыщи, 100 тыщ, больше) ?
- сразу началось или через год-два ?
- сколько таблиц в схеме данных (например 35 из 50 ти) ?
- комп норм или так себе ?
- hdd тестировал ?
- без касперского пробовал работать (влияет только на mdb и accdb) ?
...
Рейтинг: 0 / 0
накопительный эффект
    #40104274
Serg197311
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vmag
Serg197311
Как только в основной базе происходят изменения данных - вставка-удаление, изменения...


- размер базы? до 100 мб
- размер базы после сжатия и восстановления ? 65 Мб
- количество таблиц? 100
- порядок количества записей (тыщи, 100 тыщ, больше) ? 10 рабочих таблиц, макс 100000 записей, остальные маленькие справочные, в схеме - 70
- сразу началось или через год-два ? через год-два
- сколько таблиц в схеме данных (например 35 из 50 ти) ? все основные таблицы в схеме, связь ко ключевому полю
- комп норм или так себе ? Win 7-64, Office 13-32, 3,4 Ггц, 20 Гб оперативка
- hdd тестировал ? не, но у нескольких человек эффект одинаковый
- без касперского пробовал работать (влияет только на mdb и accdb) ? попробовал - одинаково

...
Рейтинг: 0 / 0
накопительный эффект
    #40104275
Serg197311
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Панург
Serg197311, посмотри что у тебя происходит с памятью в результате твоих действий

Два параллельно запущенных процесса - один вносит изменения в основную базу, другой выполняет нужную мне процедуру( что тут выше писал) - оба жрут примерно по 50 Мб оперативки , свободной памяти - вагон, загрузка процессора - процесс в основной базе - % 6-9, выполнение процедуры + 4-6%
Эффект наблюдается не только когда я выполняю эти процессы с одного компа - если с другого кто-то меняет данные в основной базе - у меня сразу тормоза. Ну и у всех остальных
Скорость выполнения процедуры падает с 3-х до 20-30 секунд

На моем компе это бы и не критично,но там где эта процедура должна выполнять получается 2-3 минуты.....

Наблюдение - после остановки процесса в основной базе скорость выполнения процедуры возрастает только если закрыть базу с процедурой и открыть ее заново( сжать-восстановить)
...
Рейтинг: 0 / 0
накопительный эффект
    #40104307
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Serg197311,

выходов несколько:
1. очистка 10-ти рабочих таблиц от отработанной информации :
- например удаляем всё, что не относится к 2021 году.
- можно удалить всё, что было, например до 1. сентября...
- жмем бД
(Перед этим делаем копию того что было с возможностью подключения для анализа истории).
2. Разделяем БД на части, разводим в стороны Медведей и Быков :
Например, 70 справочников это будет одно хранилище.
То, что относится к приходу, это будет второе хранилище
То, что относится к расходу, это будет третье хранилище
Очистка мусора и сжатие тоже актуальны, но делать это придется реже примерно в три раза...

3. переход на другое хранилище типа MS SQL (крайний случай) , не желательный,
равносилен покупке мусорного ведра большего размера...
...
Рейтинг: 0 / 0
накопительный эффект
    #40104324
Serg197311
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо....
Начну сейчас с первых 2-х пунктов
п3 то же несомненно наступит, но позже...
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / накопительный эффект
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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