Здравствуйте! Никак не могу разобраться как правильно с помощью макроса редактировать и создавать новые формы для запросов к БД. Могли бы привести пример?
Павел, добрый день! Сразу оговорюсь: для каждого запроса в базе существует стандартная форма, их редактировать нельзя.
Создать новую форму для запроса можно так:
Код
Const zbFormSimple = 2
' Допустим db - объект ZbDatabase
' query - какой-то запрос, допустим активный
Set query = db.ActiveQuery
' Создаём новую форму для запроса query
Set form = db.Forms.AddNew(zbFormSimple, query, "Название формы")
' Добавляем поля в форму
form.AddField query.VisualQuery.Fields(2)
' Сохраняем базу
db.Save 0
Изменить форму (не "стандартную") для запроса:
Код
Const zbUserName = 2
' Ищем нужную форму
Num = db.Forms.GetIndexByName(zbUserName, "Название формы")
' Получаем объект
Set form = db.Forms(Num)
' Получаем запрос, по которому создана эта форма
Set query = form.Query
' Добавляем поля в форму
form.AddField query.VisualQuery.Fields(3)
' Сохраняем базу
db.Save 0
Дмитрий Озеров написал: Павел, добрый день! Сразу оговорюсь: для каждого запроса в базе существует стандартная форма, их редактировать нельзя.
Создать новую форму для запроса можно так:
Код
Const zbFormSimple = 2
' Допустим db - объект ZbDatabase
' query - какой-то запрос, допустим активный
Set query = db.ActiveQuery
' Создаём новую форму для запроса query
Set form = db.Forms.AddNew(zbFormSimple, query, "Название формы")
' Добавляем поля в форму
form.AddField query.VisualQuery.Fields(2)
' Сохраняем базу
db.Save 0
Изменить форму (не "стандартную") для запроса:
Код
Const zbUserName = 2
' Ищем нужную форму
Num = db.Forms.GetIndexByName(zbUserName, "Название формы")
' Получаем объект
Set form = db.Forms(Num)
' Получаем запрос, по которому создана эта форма
Set query = form.Query
' Добавляем поля в форму
form.AddField query.VisualQuery.Fields(3)
' Сохраняем базу
db.Save 0
Спасибо большое! Я делал примерно также, только не знал, что в конце нужно нужно сохранять базу через db.Save 0. А подскажите, пожалуйста, можно ли сделать так чтобы после выполнения макроса при открытии окна информации сразу появлялся выбранная форма? Выполняю Form.Active и Form.Default, но в коне информации всё равно открывается предыдущая форма, хотя нужная форма становится активной.
Код
set DB = l.OpenDatabase(6, "")
' Ищем нужную форму
Num = db.Forms.GetIndexByName(zbUserName, "Test1")
' Получаем объект
Set form = db.Forms.Item(NUM)
' Получаем запрос, по которому создана эта форма
Set query = form.Query
' Добавляем поля в форму
FORM.Active = true
FORM.Default = true
' Сохраняем базу
db.Save 0
set DB = l.OpenDatabase(6, "")
' Ищем нужную форму
Num = db.Forms.GetIndexByName(zbUserName, "Test1")
' Получаем объект
Set form = db.Forms.Item(NUM)
' Получаем запрос, по которому создана эта форма
Set query = form.Query
' Добавляем поля в форму
FORM.Active = true
FORM.Default = true
' Сохраняем базу
db.Save 0
Всё сохраняется. На скриншоте видно, что форма по умолчанию стала Test1. Другое дело, что все изменения касаются данных описателя базы и, если уже браузер был открыт, то форма в нём автоматически не сменятся.
set DB = l.OpenDatabase(6, "")
' Ищем нужную форму
Num = db.Forms.GetIndexByName(zbUserName, "Test1")
' Получаем объект
Set form = db.Forms.Item(NUM)
' Получаем запрос, по которому создана эта форма
Set query = form.Query
' Добавляем поля в форму
FORM.Active = true
FORM.Default = true
' Сохраняем базу
db.Save 0
Всё сохраняется. На скриншоте видно, что форма по умолчанию стала Test1. Другое дело, что все изменения касаются данных описателя базы и, если уже браузер был открыт, то форма в нём автоматически не сменятся.