|
Передача и хранение параметров и настроек
В зависимости от конкретного случая может быть выбран один из следующих способов.
Способы:
Глобальные переменные
Пользовательские свойства Базы данных
Настройки, сохраненные в реестре
Настройки, сохраненные в таблицах
Прередача через OpenArgs
(Настройки, сохраненные в текстовых файлах, - здесь не рассматриваются как устаревшая технология)
Глобальные переменные
Использование общих переменных на примере открытия других форм и отчетов.
- передача "Временных переменных" через глобальные переменные:
в начальной области любого общего модуля должно быть декларирование переменной.
Option Compare Database
Option Explicit
Public ИМЯ_ОТЧЕТА
перед вызовом отчета присваиваем общей переменной необходимое значение
...
ИМЯ_ОТЧЕТА = "Report1"
...
эту переменную можно использовать при создании источника данных для отчета - программно, в событии "Загрузка" или во входные параметры отчета
вставить заранее написанную функцию,
которая возвращает этот параметр:
Public Function GET_ИМЯ_ОТЧЕТА()
GET_ИМЯ_ОТЧЕТА = ИМЯ_ОТЧЕТА
End Function
во входные параметры: GET_ИМЯ_ОТЧЕТА()
Прим.: если параметров несколько то через запятую.
Особенности - глобальные переменные сбрасываются при перезапуске Аксесса
Пользовательские свойства
Для того чтобы это значение не сбрасывалось при выходе из программы или остановке кода.
можно заменить общую переменную на добавленное к проекту
пользовательское свойство
базы данных
и затем обращаться к нему
так добавляют это свойство к проекту (один раз):
CurrentProject.Properties.Add "ИМЯ_ОТЧЕТА", Значение
так его изменяют:
CurrentProject.Properties("ИМЯ_ОТЧЕТА") = "значение"
примеры применения пользовательских свойств:
так добавляют свойства - удобственно именно в процедуре общего модуля без параметров
так как можно запускать вручную:
Public Sub add_prop()
'Добавление свойств к базе данных делается один раз
CurrentProject.Properties.Add ("firstdate"), 0
CurrentProject.Properties.Add ("lastdate"), 0
End Sub
так устанавливают месячный период:
Public Sub setperiod(data As Date)
CurrentProject.Properties("firstdate") = firstdate(data) CurrentProject.Properties("lastdate") = lastdate(data)
End Sub
Public Function Gcy() 'GET CURRENT YEAR узнать текущий год'
Gcy = year(CDate(CurrentProject.Properties("firstdate")))
End Function
Public Function gfd() 'get first date узнать первое число периода'
gfd = CDate(CurrentProject.Properties("firstdate"))
End Function
Public Function gld() 'get last date узнать последнее число периода'
gld = CDate(CurrentProject.Properties("lastdate"))
End Function
Так его получают из любого места формы или отчета:
= gfd()
Используемые функции:
Public Function Firstdate(data As Date) as Date
'Вычисление даты первого числа месяца в который она попадает
Firstdate = CDate("1 " & CStr(Month(data)) & "." & CStr(year(data)))
End Function
Public Function Lastdate(data As Date) as Date
'Вычисление даты последнего числа месяца в который она попадает
Lastdate = DateAdd("m",1, Firstdate(data))-1
End Function
Особенности: если файл базы данных копируется от одного
пользователя или разработчика к другому - настройки сохраняются с файлом.
Сохранение и извлечение настроек из Реестра
Сохранение в реестр :
Call SaveSetting("Имя проекта", "Раздел", "Подраздел", "КлючРеестра", "Значенние ключа")
Извлечение из реестра:
MyVar = GetSetting("Имя проекта", "Раздел", "Подраздел", "КлючРеестра")
См. также функции для работы с реестром в разделе
Полезные функции
Передача параметров через OpenArgs
Private Sub Кнопка46_Click()
Dim SQL As String
Dim SelectName As String
Dim RepName
RepName = "Svod1"
'Формирование строки - условия запроса и названия выборки для заголовка
If Me.fid_curator <> 0 Then SQL = " and id_curator = " & Me.fid_curator
If Me.fid_curator <> 0 Then SelectName = vbCrLf & " Руководитель - " & Me.fid_curator.Column(1)
If Me.fid_partner <> 0 Then SQL = SQL & " and id_partner = " & Me.fid_partner
If Me.fid_partner <> 0 Then SelectName = SelectName & vbCrLf & " Партнер - " & me.fid_partner.Column(1)
If CurrentProject.AllReports(RepName).IsLoaded Then DoCmd.Close acReport, RepName
On Error Resume Next
DoCmd.OpenReport RepName, acViewPreview, , , , SQL & "<next>" & SelectName
DoCmd.RunCommand acCmdZoom100
'DoCmd.Close acForm, Me.Name
End Sub
Примечание: в данном примере <next>
используется в качестве разделителя
- разделитель может быть любое уникальное
сочетание символов
- недопустимое в передаваемых данных.
Прием параметров через OpenArgs
Option Compare Database
Option Explicit
Public SQL As String
Public SelectName
Private Sub Report_NoData(Cancel As Integer)
MsgBox "Нет проектов по выбранному условию"
Cancel = True
End Sub
Private Sub Report_Open(Cancel As Integer)
DoCmd.Maximize
If Nz(Me.OpenArgs, "") = "" Then Exit Sub
Dim Tmparr
'разбивка строки на массив значений
Tmparr = Split(Nz(Me.OpenArgs, ""), "<next>", , vbTextCompare)
'Первое значение
SQL = Tmparr(0)
'Второе значение
If Tmparr(1) <> "" Then SelectName = "Выборка:" & Tmparr(1)
Me.RecordSource = Me.RecordSource & SQL
End Sub
| |