powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / По какой причине Аксесс может не закрываться?
25 сообщений из 52, страница 2 из 3
По какой причине Аксесс может не закрываться?
    #32170131
RT++
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2Senin Viktor
Не катит. Переменная msoFileTypeAllFiles не определена.

2Лох Позорный
При чем здеся ексель?? (у меня его нетути)
...
Рейтинг: 0 / 0
По какой причине Аксесс может не закрываться?
    #32170154
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
хоть и поздно, но для статистики:
необходимо ззакрывать рекордсеты. в 97 намучился, он , собака, работает нормально, а как закрываться ни какую. а в 2002 не закроешь вовремя - работает не правильно.
...
Рейтинг: 0 / 0
По какой причине Аксесс может не закрываться?
    #32170165
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Вот обещанное. Форма, на ней два контрола:

текстбокс, звать его Text0, его ControlSource задан так:

Код: plaintext
= 10 



кнопка, звать ее Command2, и у нее событие:

Код: plaintext
1.
2.
3.
4.
Private Sub Command2_Click()
Select Case True
    Case Text0 =  1 , Text0 =  2 
End Select
End Sub


Надо нажать на кнопку, а потом попытаться закрыть Аксесс. Всё!

Только Аксесс нужен 97-й.
...
Рейтинг: 0 / 0
По какой причине Аксесс может не закрываться?
    #32170169
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
слава богу 97 отходит в мир иной...
надо учиться бороться с ХР...

да в 97 есть построитель или как его называют, который позволяет в VB вставлять всякие выражения, в 2002 его нет встроенного. есть отдельная приблуда, где-то нашел кому надо - обращайтесь.
...
Рейтинг: 0 / 0
По какой причине Аксесс может не закрываться?
    #32170200
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ээээ....
Построитель - это такая штука которая пишет код для тех людей которые сами не умеют (или не хотят) писать? Хорошо что его в XP нет. У меня на работе в одной базе из 10 мегабайт исходников мега 3 кажется этим построителем и построено. На фиг на фиг.. Хуже только построитель макросов в экселе. Уж напишет так напишет...
...
Рейтинг: 0 / 0
По какой причине Аксесс может не закрываться?
    #32170215
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Лох
ты не понял. у меня это когда тебе надо в VB правильно написать обращение к полю в какойто форме. вызываешь его и выбираешь формму/отчет , далее поле, можно нужное свойство , жмешь кнопку и он вставляет к примеру Forms!jdsfjj.kjjfj.Form.recordsuurse но только правильно.
...
Рейтинг: 0 / 0
По какой причине Аксесс может не закрываться?
    #32170288
RT++
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2Владимир Саныч

Спасибо за фокус!! Слава богу, он мне жить не мешает....
...
Рейтинг: 0 / 0
По какой причине Аксесс может не закрываться?
    #32170297
Фотография wara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадя,
"необходимо ззакрывать рекордсеты"
А зачем их закрывать, если они сами при выходе из проуедуры уничтожаются?
...
Рейтинг: 0 / 0
По какой причине Аксесс может не закрываться?
    #32170303
Фотография wara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"слава богу 97 отходит в мир иной"
Не согласен.
Мы вот все делаем в 97, а затем конвертируем в 2000 или XP.
В 97 весь контекстный Help по-русски, очень удобно, и есть построитель выражений, я вообще не знаю как люди без него в 2000 и XP живут. Они что, по-памяти синтаксис выражений пишут?
...
Рейтинг: 0 / 0
По какой причине Аксесс может не закрываться?
    #32170318
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 wara
А зачем их закрывать, если они сами при выходе из проуедуры уничтожаются?
Ты это... прочитай о чем тут три десятка постов накидали.
В том то все и дело что они должны уничтожаться, но не уничтожаются. И не только рекордсеты.
...
Рейтинг: 0 / 0
По какой причине Аксесс может не закрываться?
    #32170321
Michael Vasilev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To Владимир Саныч
Да, интересный эффект. Это просто баг Accessa. Причем если использовать сравнение один раз то все закрывается нормально:

Private Sub Command2_Click()
Select Case True
Case Text0 = 1
End Select
End Sub

Кстати такое применение Case мне в голову не приходило.
Если рисовать так:

Private Sub Command2_Click()
Select Case Text0
Case = 1, 2
End Select
End Sub
То все работает нормально.
А вы всегда пользуетесь как привели пример или это просто как пример "незакрывания Accessa"?
...
Рейтинг: 0 / 0
По какой причине Аксесс может не закрываться?
    #32170323
Фотография wara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как так не уничтожаются? В Help, вроде, написано, что уничтожаются.
Все, бегу везде ставить
rst.close
...
Рейтинг: 0 / 0
По какой причине Аксесс может не закрываться?
    #32170332
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О как человек испугался :))
Поправка. Они иногда не уничтожаются. Соответственно, rs.Close стало привычкой (выработанной годами). Не знаю, может какой из сервис паков чего и вылечил, возможности проверить нет, ибо у меня уже идет параноидальное закрытие все что только можно закрыть. Главное - не дать аксесу шанс обосраться
...
Рейтинг: 0 / 0
По какой причине Аксесс может не закрываться?
    #32170406
Фотография TatianaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
из своего опыта:
проэкт по наследству достался(А 97) и писал его такой оптимист как вара
в общем однозначно после закрытия и убития ссылок ( не только рекорсет а на все обьектные п-е) и кстати не только
чекбокс -If chk Then вместо If chk = True Then.
но и другие типа булеан ( уже после проведённой очистки на каком-то англогов-м сайте нашла их совет явно писать If что-то= True/ false)
с бессмертием Аксеса уже 2 года проблем нет
...
Рейтинг: 0 / 0
По какой причине Аксесс может не закрываться?
    #32170426
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
совет явно писать If что-то= True/ false
Как ни странно, оно и работает быстрее. Почему - для меня загадка...
А мне достался по наследству проект, где в половине функций был BeginTrans, был CommitTrans, а вот Rollback не было. Видимо, писатель думал, что транзакции сами будут откатываться при выходе из функции . Это даже не оптимизм, это пох%изм.
...
Рейтинг: 0 / 0
По какой причине Аксесс может не закрываться?
    #32170770
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Wara
ты в лоб то все не закрывай особенно если у тебя ХР ADP. тут с этим надо быть осторожно. где закрыть а где и нет.
Recordset дело тонкое. еще нет людей которые всё о них знают (наверно сильно сказано?) .
...
Рейтинг: 0 / 0
По какой причине Аксесс может не закрываться?
    #32170778
assa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда нашел ссылку на «стандартность» этой ошибки (с чекбоксом) в мса 97, подозрение на то, что проблема в VBA, в процедурах работы с «кучей» упрочилось. Если бы ошибка была частной (чекбокс) ее бы пофиксили, а не писали, что ошибка имеет место быть. Стало быть все конструкции, где в условных операторах стоит проверка объекта (своего, или стандартного) с неявным преобразованием умолчательного значение к чему-л имеют право попасть в категорию, обрабатываемую тем же участком процедуры очистки ссылок, что вешает ссылку на чекбокс. Case со списком, но явным перечислением логических выражений, содержащих объекты – это интересно. Например если так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Private Sub Command2_Click()
Dim f As Object
    Set f = Me.Text0
    Select Case True
        Case f =  1 , f =  2 
    End Select
    'Set f = Nothing'
End Sub
То все закрывается. (даже с закоментированным явным обнулением ссылки)

Т.е. похоже, что «условный оператор» приводит к тому, что ссылка (на что-то) порождается не формой (ее процедурой) и очищается вместе с областью ссылок формы, а внешней по отношению к форме процедурой (обработки вызовов объектов из условного оператора). Причем, если одну ссылку (case text0=1) эта процедура по выходу очищает, то вторую уже никак. Поскольку форма нормально закрывается, то ссылка, не очищаемая, указывает на некий иной объект. Так можно выполнить:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Private Sub Command2_Click()
Dim f As Object    
Set f = New Form_Форма1
    f.Visible = True
    f.Caption =  "new" 
    Select Case True
        Case f.Text0 =  1 , f.Text0 =  2 
    End Select
    Set f = Nothing
End Sub
Новый экземпляр закрывается (если не делать «автоподхвата»), но аксес уже нет. Стало быть ссылка на аксес (какой-то объект одной из двух обязательных библиотек) появилась и не удалилась.

да, еще: как-то (очень уже давно) возясь с New искал способ поймать (формой) себя за хвост. (с тем, чтобы обнулив ссылку в вызывающей процедуре, оставить объект висящим. Получалось.
Примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Option Compare Database
Option Explicit
Dim I As Object

Private Sub Form_Load()
    Set I = Me
End Sub

Код: plaintext
1.
2.
3.
4.
5.
6.
Private Sub Command2_Click()
Dim f As Object    
Set f = New Form_Форма1
    f.Visible = True
    f.Caption =  "new" 
    Set f = Nothing
End Sub

теперь можно закрыть вызвавшую оъект форму, он (объект) остается жить. Что, видимо, неправильно.

можно настрогать сколько угодно «держащих себя за хвост» New форм. Что, наверное, неверно. Но если подергать семейство References, то все «автоподхватившиеся» формы умирают.

Я делал так:

Код: 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.
Private Sub Reload_ref()
Dim ref As Reference, strFile As String, result As Boolean
Dim aN As String
    For Each ref In Me.Application.References
        strFile = ref.FullPath
        aN = ref.Name
        If RemoveReference(ref) Then
            result = AddReference(strFile)
            Debug.Print aN
        End If
    Next ref
End Sub
Function RemoveReference(ref As Reference) As Boolean
On Error GoTo Error_RemoveReference
    References.Remove ref
    RemoveReference = True
Exit_RemoveReference:
    Exit Function
Error_RemoveReference:
    MsgBox Err &  ": "  & Err.Description & ref.FullPath
    RemoveReference = False
    Resume Exit_RemoveReference
End Function

Function AddReference(strFile As String) As Boolean
Dim ref As Reference
On Error GoTo Error_AddReference
    Set ref = References.AddFromFile(strFile)
    AddReference = True
Exit_AddReference:
    Exit Function
Error_AddReference:
    MsgBox Err &  ": "  & Err.Description
    AddReference = False
    Resume Exit_AddReference
End Function

Private Sub btn_Ref_Click()
    Reload_ref
End Sub

Если в ссылки добавлено хоть что-то кроме 2-х неудаляемых (т.е. если содержимое семейства в процессе меняется), то все «госты» или "привидения" (автоподхватившиеся формы) исчезают. Жаль, это не действует на очистку самого аксеса.


Не уверен, что явления ("автоподхвата" и зависания аксеса) общей природы, просто вспомнились старые мысли и попытки исследовать вопрос. Извиняюсь за длину выступления.
...
Рейтинг: 0 / 0
По какой причине Аксесс может не закрываться?
    #32170891
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
2 Michael Vasilev:

Я всегда так пишу. Сравните:

Код: plaintext
1.
2.
3.
4.
5.
6.
If IsNull(f) Then
    A
ElseIf f =  1  Then
    A
Else
    B
End If

Код: plaintext
1.
2.
3.
4.
5.
Select Case True
    Case IsNull(f), f =  1 
        A
    Case Else
        B
End Select


Это одно и то же, но второе лаконичнее!

Можно было бы и так:

Код: plaintext
1.
2.
3.
4.
If IsNull(f) Or f =  1  Then
    A
Else
    B
End If


но если f Is Null, то такие выражения не всегда корректно срабатывают. Кроме того, в последнем варианте всегда вызывается проверка f = 1, а она может быть и громоздкой.
...
Рейтинг: 0 / 0
По какой причине Аксесс может не закрываться?
    #32171154
Michael Vasilev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To Владимир Саныч
Интересный вариант, имеет право быть. Понятно, что If работает медленнее и все условия проверяет, да я и не предлагал использовать If. Интересное построение у вас самого Case.
Я обычно рисую так:
Select case a
Case 1,3
Case 2
Case Else
End select
В вашей редакции будет:
Select True
Case a=1, a=3
Case a=2
Case Else
End Select
Это и показалось мне интересным.
А что из этих вариантов работает быстрее, не берусь утверждать. Если All знает, пусть напишет. На мой взгляд первый вариант легче в понимании. Во втором как бы хочется узнать, что будет False. Хотя это скорее всего сила привычки.
...
Рейтинг: 0 / 0
По какой причине Аксесс может не закрываться?
    #32171182
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понятно, что If работает медленнее и все условия проверяет,
Мне например непонятно. Насколько я знаю, как раз IF работает быстрее всего. А условия лишние мешают - так запихни их в If ... Then ... ElseIf ... Then ... ElseIf ... Then ... Else ... End If
...
Рейтинг: 0 / 0
По какой причине Аксесс может не закрываться?
    #32171193
Michael Vasilev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To Лох
Что Select Case работает в некоторых случаях быстрее IF знаю довольно давно и не помню уже источник. Просто принял как данность. Вот еще выдержка из хелпа Access 97:

Инструкция Select Case может служить альтернативой инструкции ElseIf в If...Then...Else при оценке одного выражения, которое имеет несколько возможных значений. В то время как If...Then...Else для каждой инструкции ElseIf оценивает разные выражения, инструкция Select Case оценивает выражение только один раз, в начале управляющей структуры.
...
Рейтинг: 0 / 0
По какой причине Аксесс может не закрываться?
    #32171203
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
2 Michael Vasilev:

Если просто Case a=1, a=3 (собственно, и в моем примере с кнопкой так), то действительно можно обойтись без Select Case True и не выеживаться. Прикол начинается там, где не все условия имеют вид a=. Например, если первое условие IsNull(a). Тогда уже Select Case a не получится.

2 Лох:

ElseIf плох, когда в двух ветках надо написать одинаковые строки кода - см. мой пост от 12:23, особенно его последний абзац.
...
Рейтинг: 0 / 0
По какой причине Аксесс может не закрываться?
    #32171207
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
> инструкция Select Case оценивает выражение только один раз, в начале управляющей структуры

Это как раз для меня не имеет значения, потому что у меня это выражение константа.
...
Рейтинг: 0 / 0
По какой причине Аксесс может не закрываться?
    #32171218
Michael Vasilev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программирование тем и хорошо, я думаю, что есть много вариантов исполнения и думаю нет единственно верного и лучшего вариантаю
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
По какой причине Аксесс может не закрываться?
    #32808293
Фотография Gens
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир СанычP.S. Всем заранее спасибо!

Думаю нужно отключить антивирусник, или иное чудо.
...
Рейтинг: 0 / 0
25 сообщений из 52, страница 2 из 3
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / По какой причине Аксесс может не закрываться?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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