IMHO.WS

IMHO.WS (https://www.imho.ws/index.php)
-   Программирование (https://www.imho.ws/forumdisplay.php?f=40)
-   -   Параметры запуска. Перезапуск формы. Access. VBA. (https://www.imho.ws/showthread.php?t=95590)

Raven B. 09.11.2005 12:31

Параметры запуска. Перезапуск формы. Access. VBA.
 
Доброго времени суток.

Пара вопросов:

1. В аксесе есть возможность настраивать параметры запуска. Случайно выделил не то что надо (стандартные опции меню запртил). В результате хочу их вернуть, но... неоткуда. Вкладка сервис (Tools) исчезла =(

2. Есть форма. при ее закрытии я проверяю есть ли еще какие то открытые формы. Если нету - ее надо снова открыть или не позволить ей закрытся. Это возможно ?

Изначально писалось как :
Код:

Private Sub Form_Close()
If All_Not_Loaded() Then
DoCmd.OpenForm "start_form"
End If
End Sub
Function All_Not_Loaded() As Boolean
Dim res As Boolean
res = False

For Each i In Forms
If IsLoaded(i.name) Then
res = True
End If
Next i
All_Not_Loaded = res
End Function

но в таком виде не работает

Подскажите как с этим боротся, пожалуста.

С уважением. Ворон.

C 1. выяснил достаточно удерживая shift запустить =)
Подскажите 2е ?

Raven B. 09.11.2005 13:53

Интересный момент.
При таком коде :
1. при закрытии формы все закрывается. и ничего не открывается.
2. при закрытии апликации (аксеса самого тоесть) форма начинает бесконечно перезапускатся и жрет 99% процессорного времени. :confused:

В общем получилось с точностью до наоборот :biggrin:

aBc 09.11.2005 22:29

Цитата:

Raven B.:
я проверяю есть ли еще какие то открытые формы
Закрытие формы и unload её - совсем не одно и то же. Ты проверяешь формы на загруженность, а не открытость.

Raven B. 10.11.2005 00:59

гм. и что из этого следует ? :idontnow:

LightImage 10.11.2005 15:14

Цитата:

Raven B.:
1. В аксесе есть возможность настраивать параметры запуска. Случайно выделил не то что надо (стандартные опции меню запртил). В результате хочу их вернуть, но... неоткуда.
При открытии базы держи Shift. Поможет, если эта возможность в .mdb файле не запрещена. Если запрещена, то надо использовать VBA, код скину позже.
P.S. В твоем коде All_Not_Loaded() всегда будет True возвращать, она же вызывается из еще открытой формы ;)
P.P.S. А вот обещаный код:
Код:

Public Function LI_SetPropertyToObject(obj As Object, pname As String, pvalue, ptype, _
    Optional doCheckPropVal As Boolean = True) As Boolean
' Создает или модифицирует свойство с именем pname объекта obj.
' Тип свойства указывается параметром ptype, значение свойства -- параметром pvalue.
' Если параметр doCheckPropVal = True, то функция будет изменять значение указанного
' свойства только если оно отличается от pvalue.
' См. справку по функции CreateProperty() для допустимых значений параметра ptype.
' Возвращаемое значение:
'  False, если свойство уже существовало и его значение не было изменено,
'  True, если свойство не существовало и было создано этой функцией,
'  или значение свойства было изменено.
' При возникновении ошибок возникшие ошибки будут выкинуты вызвающей функции
Dim prpNew As Property
Dim errLoop As Error
Dim retv As Boolean
    retv = False
   
    On Error GoTo Err_Property
    If doCheckPropVal Then
        If obj.Properties(pname) = pvalue Then
            GoTo func_exit
        End If
    End If

DoAssignVal:
    obj.Properties(pname) = pvalue
    retv = True
    On Error GoTo 0

func_exit:
    LI_SetPropertyToObject = retv
    Exit Function

Err_Property:

' Ошибка 3270 означает, что свойство не найдено.
Const conPropNotFoundError = 3270
    If Err = conPropNotFoundError Then
        ' Создает свойство, задает его значение и добавляет
        ' свойство в семейство Properties.
        Set prpNew = obj.CreateProperty(pname, ptype, pvalue)
        obj.Properties.Append prpNew
        Resume DoAssignVal
    Else
        ' При возникновении другой ошибки выкидываем её вызывающей функции
        Err.Raise Err.Number
    End If
End Function

Sub My_DoChangeAllowBypassKey()
Const prpname = "AllowBypassKey", prpvalue As Boolean = True
Const dbpath = "C:\temp\test.mdb"
Dim dbs As database
    Set dbs = OpenDatabase(dbpath)
    LI_SetPropertyToObject dbs, prpname, prpvalue, dbBoolean
End Sub


LightImage 10.11.2005 17:06

Про shift не заметил что ты уже решил, извиняй =)
Цитата:

Raven B.:
я проверяю есть ли еще какие то открытые формы. Если нету - ее надо снова открыть или не позволить ей закрытся
Пиши так:
Код:

Private Sub Form_Unload(Cancel As Integer)
    Cancel = (Forms.Count <= 1)
End Sub


Raven B. 10.11.2005 17:26

Цитата:

P.S. В твоем коде All_Not_Loaded() всегда будет True возвращать, она же вызывается из еще открытой формы ;)
Спасибо =) Чесно говоря уже исправил.

Цитата:

LightImage:
Пиши так:
Спасибо огромное !!!.
Но проблема с формой осталась =(
Тоесть если у меня эта форма одна осталась бд. я не закрою. :confused:
С этим можно как то боротся или это никак нельзя обойти (что бы при попытке закрыть аксес он все же закрывался.) :help:

LightImage 10.11.2005 17:45

Посмотри прием, описанный на _http://www.mvps.org/access/api/api0035.htm. Попробую написать что-нибудь, скину тогда позже.

Raven B. 11.11.2005 11:04

полез смотреть. спасибо.


Часовой пояс GMT +4, время: 10:47.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.