powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / перехват сообщений MS Access при закрытии отчета
5 сообщений из 5, страница 1 из 1
перехват сообщений MS Access при закрытии отчета
    #32071107
St.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
St.
Гость
Такая проблема.
К примеру, есть шаблон отчета, который, программно, открывается в режиме конструктора, и в него добавляются несколько объектов (в зависимости от SQL запроса), далее отчет переходит в состояние предварительного просмотра. И уже с ним работает пользователь. Но при закрытии отчета MS Access выбрасывает диалоговое окно о сохранении изменений в отчете. Так вот, каким образом перехватить это событие и подставить свое (к примеру, команду DoCmd.Close acReport, Me.Name, acSaveNo).
...
Рейтинг: 0 / 0
перехват сообщений MS Access при закрытии отчета
    #32071127
boar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще эта команда называется DoCmd.Save
А вот интересный у тебя рапорт... может опишешь технологию по подробнее, а то очень интересно зачем програмно отчет открывать в режиме конструктора???
...
Рейтинг: 0 / 0
перехват сообщений MS Access при закрытии отчета
    #32071133
boar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ой!!! надо чтобы SaveNo, тогда не знаю...
...
Рейтинг: 0 / 0
перехват сообщений MS Access при закрытии отчета
    #32071150
St.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
St.
Гость
Держи код, но это сырой вариант, его еще потом надо переписать в виде функций, да и к тому же поля в БД надо человеческие сделать. To_boar@takas.lt
Sub
NewControls()
Dim strSQL, frm As String
Dim ctlLabel As Control, ctlText As Control
Dim God, kod As String
Dim intLabelX, i As Integer, intLabelY As Integer
Dim c As Recordset
Dim dbs As Database

' часть где происходит подготовка даннвых для запроса и его непосредственное выполнение в памяти
God = CStr([Forms]![Отчеты]![ПолеСоСписком81])
kod = CStr([Forms]![Отчеты]![Надпись80].[Caption])
Set dbs = CurrentDb
strSQL = "SELECT [Ограждения первой группы].Тип_ограждения, Sum([Ограждения первой группы]![Конец_участка(км)]-[Ограждения первой группы]![Начало_участка(км)]) AS dl FROM [Ограждения первой группы]GROUP BY [Ограждения первой группы].Тип_ограждения, [Ограждения первой группы].годучета, [Ограждения первой группы].кодсвязи HAVING ((([Ограждения первой группы].годучета)=" + God + ") AND (([Ограждения первой группы].кодсвязи)=" + kod + "))"
Set c = dbs.OpenRecordset(strSQL)
' открывает отчет в режиме конструктора :)
frm = "Ведомость Ограждение первой группы"
DoCmd.OpenReport frm, acViewDesign

intLabelX = 1000: intLabelY = 100
'создает объект в отчете
Set ctlText = CreateReportControl(frm, acLabel, acFooter, "", "x1", intLabelX, intLabelY): intLabelY = intLabelY + 300
ctlText.Width = 1500: ctlText.Height = 300: ctlText.FontWeight = 700: ctlText.Caption = "Итого, км:": ctlText.TextAlign = 1
' Создает в области примечание acFooter Label стандартных размеров.

c.MoveFirst: i = 1
Do While Not c.EOF
With c
Set ctlLabel = CreateReportControl(frm, acLabel, acFooter, "", "", intLabelX, intLabelY)
ctlLabel.Name = "xx_" + CStr(i): ctlLabel.Caption = .Fields(0) + " :"
ctlLabel.Width = 1500: ctlLabel.Height = 300: ctlLabel.FontWeight = 700
Set ctlText = CreateReportControl(frm, acLabel, acFooter, "", "", intLabelX + 2500, intLabelY)
ctlText.Name = "xx" + CStr(i): ctlText.Caption = Format(.Fields(1), "##0.000")
ctlText.Width = 1500: ctlText.Height = 300: ctlText.FontWeight = 700

End With
c.MoveNext: i = i + 1: intLabelY = intLabelY + 300
Loop
' Восстанавливает окно формы.
DoCmd.Restore: c.Close: Set c = Nothing
dbs.Close: Set dbs = Nothing
' открывает отчет в режиме предварительного просмотра:)
DoCmd.OpenReport frm, acViewPreview
End Sub
...
Рейтинг: 0 / 0
перехват сообщений MS Access при закрытии отчета
    #32071151
St.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
St.
Гость
Держи код, но это сырой вариант, его еще потом надо переписать в виде функций, да и к тому же поля в БД надо человеческие сделать. To_boar@takas.lt
Sub
NewControls()
Dim strSQL, frm As String
Dim ctlLabel As Control, ctlText As Control
Dim God, kod As String
Dim intLabelX, i As Integer, intLabelY As Integer
Dim c As Recordset
Dim dbs As Database

' часть где происходит подготовка даннвых для запроса и его непосредственное выполнение в памяти
God = CStr([Forms]![Отчеты]![ПолеСоСписком81])
kod = CStr([Forms]![Отчеты]![Надпись80].[Caption])
Set dbs = CurrentDb
strSQL = "SELECT [Ограждения первой группы].Тип_ограждения, Sum([Ограждения первой группы]![Конец_участка(км)]-[Ограждения первой группы]![Начало_участка(км)]) AS dl FROM [Ограждения первой группы]GROUP BY [Ограждения первой группы].Тип_ограждения, [Ограждения первой группы].годучета, [Ограждения первой группы].кодсвязи HAVING ((([Ограждения первой группы].годучета)=" + God + ") AND (([Ограждения первой группы].кодсвязи)=" + kod + "))"
Set c = dbs.OpenRecordset(strSQL)
' открывает отчет в режиме конструктора :)
frm = "Ведомость Ограждение первой группы"
DoCmd.OpenReport frm, acViewDesign

intLabelX = 1000: intLabelY = 100
'создает объект в отчете
Set ctlText = CreateReportControl(frm, acLabel, acFooter, "", "x1", intLabelX, intLabelY): intLabelY = intLabelY + 300
ctlText.Width = 1500: ctlText.Height = 300: ctlText.FontWeight = 700: ctlText.Caption = "Итого, км:": ctlText.TextAlign = 1
' Создает в области примечание acFooter Label стандартных размеров.

c.MoveFirst: i = 1
Do While Not c.EOF
With c
Set ctlLabel = CreateReportControl(frm, acLabel, acFooter, "", "", intLabelX, intLabelY)
ctlLabel.Name = "xx_" + CStr(i): ctlLabel.Caption = .Fields(0) + " :"
ctlLabel.Width = 1500: ctlLabel.Height = 300: ctlLabel.FontWeight = 700
Set ctlText = CreateReportControl(frm, acLabel, acFooter, "", "", intLabelX + 2500, intLabelY)
ctlText.Name = "xx" + CStr(i): ctlText.Caption = Format(.Fields(1), "##0.000")
ctlText.Width = 1500: ctlText.Height = 300: ctlText.FontWeight = 700

End With
c.MoveNext: i = i + 1: intLabelY = intLabelY + 300
Loop
' Восстанавливает окно формы.
DoCmd.Restore: c.Close: Set c = Nothing
dbs.Close: Set dbs = Nothing
' открывает отчет в режиме предварительного просмотра:)
DoCmd.OpenReport frm, acViewPreview
End Sub
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / перехват сообщений MS Access при закрытии отчета
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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