RUS  ENG 

Создание и редактирование форм

Страницы: 1
RSS
Создание и редактирование форм
 
Здравствуйте!
Никак не могу разобраться как правильно с помощью макроса редактировать и создавать новые формы для запросов к БД. Могли бы привести пример?
Изменено: Павел Рубцов - 28.01.2021 19:26:05
 
Павел, добрый день!
Сразу оговорюсь: для каждого запроса в базе существует стандартная форма, их редактировать нельзя.

Создать новую форму для запроса можно так:
Код
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. Другое дело, что все изменения касаются данных описателя базы и, если уже браузер был открыт, то форма в нём автоматически не сменятся.
Понял. Спасибо!
Страницы: 1