Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Глобальная переменная
 
 автор: shaucha   (22.10.2008 в 12:05)   личное сообщение
 
 

Что-то я не понимаю...
Я ее объявил (As Variant) в модуле формы, потом присвоил значение...
Потом вышел из формы...
Потом открываю другую форму (при загрузке проверяю значение этой переменной).
А значение то не запомнилось. Возвращает пустоту...
Где я накосячил?

  Ответить  
 
 автор: Lukas   (22.10.2008 в 12:10)   личное сообщение
 
 


Я ее объявил (As Variant) в модуле формы

Глобальные переменные необходимо объявлять не в модуле класса, и обязательно Public

  Ответить  
 
 автор: shaucha   (22.10.2008 в 12:13)   личное сообщение
 
 

Расскажите подробнее, пожалуйста.
Где её объявить (нужен отдельный модуль?) и как ей присваивать значение?
У меня значение присваивается по результату действий на форме (в модуле которой я ее и объявил).

  Ответить  
 
 автор: Lukas   (22.10.2008 в 12:31)   личное сообщение
 
 

Глобальный модуль, это тот, который виден во вкладке "Модули" окна базы данных, и не описывает класс.
Различий в присвоении значений переменным разной области видимости нет.
Объявлять ее в отдельном модуле или нет зависит от Вас. Необходимо помнить, что обращаясь первый раз к модулю, мы загружаем весь модуль в память. И если в одном модуле с объявленной глобальной переменной будет много функций\процедур, которые нам в ближайшее время не понадобятся, мы напрасно расходуем системные ресурсы.

  Ответить  
 
 автор: shaucha   (22.10.2008 в 12:35)   личное сообщение
 
 

Т.е. нужно создать отдельный модуль и там объявить эту переменную?
И тогда, если я в модуле формы присваиваю переменной значение, то оно будет доступно всегда и везде?

  Ответить  
 
 автор: Lukas   (22.10.2008 в 12:38)   личное сообщение
 
 

1. Да, только это не должен быть модуль класса.
2. Да, в текущем сеансе работы с приложением. За исключением варианта, когда вследствии возникновении необработанной ошибки, значение переменной может "скинуться".

  Ответить  
 
 автор: shaucha   (22.10.2008 в 12:40)   личное сообщение
 
 

Спасибо.
Буду разбираться.

  Ответить  
 
 автор: shaucha   (22.10.2008 в 16:43)   личное сообщение
 
 

ПОдскажите еще для конкретного примера путь решения...

Нужно взять значение поля таблицы, отобрав по условию и присвоить переменной.
Как правильно это сделать? Запросом не получается.

  Ответить  
 
 автор: osmor   (22.10.2008 в 16:46)   личное сообщение
 
 

вариант 1 (проще)
см Help по функции Dlookup
вариант 2 (чуть сложнее, но с перспективой на более широкое использование)
cм Help по Recordset

уже отвечал

  Ответить  
 
 автор: shaucha   (22.10.2008 в 17:06)   личное сообщение
 
 

Точно...
Как раз Dlookup мне в прошлый раз и помог...
Спасибо )

  Ответить  
 
 автор: Кабан   (22.10.2008 в 12:11)   личное сообщение
 
 

а причем здесь объявление типа данных Variant и объявление видимости переменной?

объявите вашу переменную в глобальном модуле как

Public varValue as Variant

  Ответить  
 
 автор: shaucha   (22.10.2008 в 12:14)   личное сообщение
 
 

Глобальный модуль - это где? :)
Честно - я пока в таких понятиях плаваю...

  Ответить  
 
 автор: palarm   (23.10.2008 в 08:14)   личное сообщение
 
 

На вкладке проекта "Модули" - общие модули, они же "глобальные"
Есть одна грабля: если по ходу работы выскочит вигвам - все глобальные переменные помрут. Потому ловчее и надежнее либо избегать глобальных переменных, либо хранить их в скрытых полях на форме (свойство поля: Вывод на экран - Нет), которая постоянно загружена при работе проекта.

  Ответить  
 
 автор: Кабан   (23.10.2008 в 08:58)   личное сообщение
 
 

надежнее CurrentProject.Properties не встречал


CurrentProject.Properties.Add cORgns, Nz(strRegions, "") '--туда

'--обратно
Public Function getBDProperty(param$)
    If IsBDProperty(param) = True Then getBDProperty = CurrentProject.Properties.Item(param)
End Function

Public Function IsBDProperty(strPNam As String) As Boolean
    Dim lngCount As Long
    Dim i As Long
    IsBDProperty = False
    If Len(Nz(strPNam, "")) = 0 Then Exit Function
    lngCount = CurrentProject.Properties.Count
    For i = 0 To lngCount - 1
        If CurrentProject.Properties.Item(i).name = strPNam Then
            IsBDProperty = True
            Exit Function
        End If
    Next i
End Function

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList