powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Проверка есть ли контрол на форме
23 сообщений из 23, страница 1 из 1
Проверка есть ли контрол на форме
    #39934460
Фотография drafty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Достопочтенные форумчане - ква-ква-ква-квалифицированные колллеги!
Имеется Ленточная форма frm2 на ней поля field21,field22,field23
Эта ленточная форма является подчиненной по отношению к простой форме frm1,на которой расположен combo1 являющийся критерием запроса SELECT который является рекордсоурсом для frm2.
Т.е. в зависимости от того,что выбрано на combo1 - тот критерий и вставляется в запрос SELECT,следовательно на frm2 может быть от одного до нескольких записей,а может их и вообще не быть.
Суть вопроса - как проверить посредством vba существует ли поле field21 или field22 например.
Спрашиваю потому,что мне надо использовать значение field22,и в случае,когда записей на форме frm2 вообще нет,в строке где я пытался задать значение переменной
Код: vbnet
1.
strvar=Nz(Forms!frm1.Form.frm2.Form.Controls("field21"))


выскакивает ошибка типа "Введенное выражение не содержит значения".
Проверка на "существует ли поле" мне бы помогла
...
Рейтинг: 0 / 0
Проверка есть ли контрол на форме
    #39934474
Фотография 4d_monster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
drafty,

проверьте количество записей в подчинённой форме - если 0 , то контролов в области данных не будет.
...
Рейтинг: 0 / 0
Проверка есть ли контрол на форме
    #39934481
Фотография drafty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4d_monster
drafty,

проверьте количество записей в подчинённой форме - если 0 , то контролов в области данных не будет.

Не все так просто,этот вариант не пойдет...
Нужен именно "озвученный" вариант
...
Рейтинг: 0 / 0
Проверка есть ли контрол на форме
    #39934490
Фотография 4d_monster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
drafty,
Так подойдёт?
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
Public Function bFormHasControl(frmForm As Form, nameControl As String) As Boolean
On Error GoTo err_me
    bFormHasControl = (frmForm.Controls(nameControl).Name = nameControl)
exit_me:
    Exit Function
err_me:
    Err.Clear
    Resume exit_me
End Function
...
Рейтинг: 0 / 0
Проверка есть ли контрол на форме
    #39934491
Фотография drafty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
drafty
4d_monster
drafty,

проверьте количество записей в подчинённой форме - если 0 , то контролов в области данных не будет.

Не все так просто,этот вариант не пойдет...
Нужен именно " озвученный " вариант

Можно даже косвенным способом
...
Рейтинг: 0 / 0
Проверка есть ли контрол на форме
    #39934513
Фотография drafty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4d_monster
drafty,
Так подойдёт?
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
Public Function bFormHasControl(frmForm As Form, nameControl As String) As Boolean
On Error GoTo err_me
    bFormHasControl = (frmForm.Controls(nameControl).Name = nameControl)
exit_me:
    Exit Function
err_me:
    Err.Clear
    Resume exit_me
End Function


...походу так и придется делать,но хотелось бы более "изящнее"
...
Рейтинг: 0 / 0
Проверка есть ли контрол на форме
    #39934514
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
drafty
как проверить посредством vba существует ли поле field21 или field22 например
Или перебрать всю коллекцию, сравнивая имена с заданным, или попробовать обратиться к нему при установленном обработчике ошибок.
...
Рейтинг: 0 / 0
Проверка есть ли контрол на форме
    #39934522
Фотография drafty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Akina
drafty
как проверить посредством vba существует ли поле field21 или field22 например
Или перебрать всю коллекцию, сравнивая имена с заданным, или попробовать обратиться к нему при установленном обработчике ошибок.

А избежать использование блока обработчика ошибок никак нельзя?
...
Рейтинг: 0 / 0
Проверка есть ли контрол на форме
    #39934561
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если перебирать коллекцию, то обработчик вроде как и не потребуется. Вернее, быть-то он обязан в любом случае, но именно для функции проверки наличия он не задействуется.
...
Рейтинг: 0 / 0
Проверка есть ли контрол на форме
    #39934610
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если критериев немного (1-5) я формирую строку WHERE,которую использую для отбора:
Код: vbnet
1.
2.
3.
4.
kriteri1=IF IsNull(полеФормыДляВводаКритерия-me.kriteri1)then Null Else " and полеТаблицыПоКоторомуОтбор-ctl.Tbl='" & me.kriteri1 & "'" 'синтаксис в зависимости от типа поля
....
kriteriN=IF IsNull(kriteriN)then Null Else " and ctl.Tbll=" & me.kriteriN
strWHERE=Mid(kriteri1 & kriteri2 & kriteriN,6)


Можно обновлять источник после обновления любого из полей критерия отбора
можно сформировать строку/открыть запрос/отчет по нажатию кнопки после выбора всех критериев отбора
Private Sub my()
Dim strSQL, a, b, c, d
If IsNull(Me.krit1) Or Me.krit1 = "" Then 'текстовое.Если поле фпьтра krit1(под надписью ctl1-см.свойства поля> вкладка другие> имя )NULL или пустое
a = Null 'тогда a имеет это значение
ElseIf Me.krit1 = " непустые" Then 'если в списке выбрано " непустые"
a = " and not ctl1 is null" 'тогда a имеет это значение
ElseIf Me.krit1 = " пустые" Then 'если в списке выбрано " непустые"
a = " and ctl1 is null" 'тогда a имеет это значение
Else 'любое другое значение из списка (например "вт")
a = " and ctl1='" & Me.krit1 & "'" 'тогда a=" and ctl1='вт'"
End If
If IsNull(Me.krit2) Or Me.krit2 = "" Then 'дата/время. Аналогично только другой синтаксис
b = Null
ElseIf Me.krit2 = " непустые" Then
b = " and not ctl2 is null"
ElseIf Me.krit2 = " пустые" Then
b = " and ctl2 is null"
Else
b = " and ctl2=#" & Format(Me.krit2, "mm\/dd\/yyyy\#")
End If
If IsNull(Me.krit3) Or Me.krit3 = "" Then 'числовое. Аналогично только другой синтаксис
c = Null
ElseIf Me.krit3 = " непустые" Then
c = " and not ctl3 is null"
ElseIf Me.krit3 = " пустые" Then
c = " and ctl3 is null"
Else
c = " and ctl3=" & Me.krit3
End If
If IsNull(Me.krit4) Then d = Null Else d = " and ctl4=" & Me.krit4 'логическое.Аналогично.Синтаксис как у числового только условий два-true/false
'собираем строку SQL допустим в krit1 выбрано "d",в krit2 01.03.2016
strSQL = Mid(a & b & c & d, 6) ' "ctl1='d' and ctl2=#03/01/2016#"
If IsNull(strSQL) Then 'если в фильтре (поля для ввода китериев) ничего не выбрано
DoCmd.ShowAllRecords 'показать все
'задать источники строк для полейСоСписком фильтра при отображении всех записей
Me.krit1.RowSource = "SELECT top 1 ' непустые' FROM Таблица1 UNION SELECT top 1 ' пустые' FROM Таблица1 UNION select ctl1 from таблица1 where not ctl1 is null group by ctl1"
Me.krit2.RowSource = "SELECT top 1 ' непустые' FROM Таблица1 UNION SELECT top 1 ' пустые' FROM Таблица1 UNION select ctl2 from таблица1 where not ctl2 is null group by ctl2"
Me.krit3.RowSource = "SELECT top 1 ' непустые' FROM Таблица1 UNION SELECT top 1 ' пустые' FROM Таблица1 UNION select ctl3 from таблица1 where not ctl3 is null group by ctl3"
Exit Sub 'выход из процедуры
Else 'иначе формируется источник строк для полейСоСписком фильтра с учетом выбранного фильтра
Me.krit1.RowSource = "SELECT top 1 ' непустые' FROM Таблица1 UNION SELECT top 1 ' пустые' FROM Таблица1 UNION select ctl1 from таблица1 where " & strSQL & " and not ctl1 is null group by ctl1"
Me.krit2.RowSource = "SELECT top 1 ' непустые' FROM Таблица1 UNION SELECT top 1 ' пустые' FROM Таблица1 UNION select ctl2 from таблица1 where " & strSQL & " and not ctl2 is null group by ctl2"
Me.krit3.RowSource = "SELECT top 1 ' непустые' FROM Таблица1 UNION SELECT top 1 ' пустые' FROM Таблица1 UNION select ctl3 from таблица1 where " & strSQL & " and not ctl3 is null group by ctl3"
DoCmd.ApplyFilter , strSQL 'применение фильтра
End If
End Sub
Private Sub krit1_AfterUpdate()
Call my 'вызов(выполнение) процедуры my при обновлении поля "krit1"
End Sub
Private Sub krit2_AfterUpdate()
Call my 'вызов(выполнение) процедуры my при обновлении поля "krit2"
End Sub
Private Sub krit3_AfterUpdate()
Call my 'вызов(выполнение) процедуры my при обновлении поля "krit3"
End Sub
Private Sub krit4_AfterUpdate()
Call my 'вызов(выполнение) процедуры my при обновлении поля "krit4"
End Sub
Private Sub ShowAll_Click() 'кнопка "показать все"
DoCmd.ShowAllRecords 'показать все
Me.krit1 = Null 'очистить
Me.krit2 = Null 'все
Me.krit3 = Null 'поля
Me.krit4 = Null 'фильтра
'задать источники строк для полейСоСписком фильтра при отображении всех записей
Me.krit1.RowSource = "SELECT top 1 ' непустые' FROM Таблица1 UNION SELECT top 1 ' пустые' FROM Таблица1 UNION select ctl1 from таблица1 where not ctl1 is null group by ctl1"
Me.krit2.RowSource = "SELECT top 1 ' непустые' FROM Таблица1 UNION SELECT top 1 ' пустые' FROM Таблица1 UNION select ctl2 from таблица1 where not ctl2 is null group by ctl2"
Me.krit3.RowSource = "SELECT top 1 ' непустые' FROM Таблица1 UNION SELECT top 1 ' пустые' FROM Таблица1 UNION select ctl3 from таблица1 where not ctl3 is null group by ctl3"
End Sub
...
Рейтинг: 0 / 0
Проверка есть ли контрол на форме
    #39934662
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
drafty, тут говорить не о чем. Если контролы положены на форму то они и должны быть в независимости от того какой у формы RecordSource и сколько там записей.

Одно из двух или вопрос поставлен некорректно.
...
Рейтинг: 0 / 0
Проверка есть ли контрол на форме
    #39934668
Фотография 4d_monster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Панург,

А если контрол расположен в области данных, записей у формы нет и добавление запрещено?
...
Рейтинг: 0 / 0
Проверка есть ли контрол на форме
    #39934679
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4d_monster, да всё равно. Куда они денутся? Записей не будет, а контролы не испарятся.
...
Рейтинг: 0 / 0
Проверка есть ли контрол на форме
    #39934722
Панург
4d_monster, да всё равно. Куда они денутся? Записей не будет, а контролы не испарятся.
Вы в этом уверены? А проверить?
...
Рейтинг: 0 / 0
Проверка есть ли контрол на форме
    #39934723
Фотография 4d_monster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Панург,

Точно. У автора просто ошибка в вопросе.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
' функция
Public Function vValueOfControl(ctrlThis As Control, vDefault As Variant) As Variant
On Error GoTo err_me
    vValueOfControl = vDefault
    
    vValueOfControl = ctrlThis.Value
    
exit_me:
    Exit Function
err_me:
    Err.Clear
    Resume exit_me
End Function

'использование как в вопросе
strvar=vValueOfControl(Forms!frm1.Form.frm2.Form.Controls("field21"), 0)
...
Рейтинг: 0 / 0
Проверка есть ли контрол на форме
    #39934726
Фотография 4d_monster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кривцов Анатолий,

Я проверил, Панунг - прав: контролы остаются. Просто свойство Value недоступно.
...
Рейтинг: 0 / 0
Проверка есть ли контрол на форме
    #39935171
Фотография drafty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
4d_monster
Кривцов Анатолий,

Я проверил, Панунг - прав: контролы остаются. Просто свойство Value недоступно.

Так о чем договорились,придется делать с обработчиком ошибок по-любому?
...
Рейтинг: 0 / 0
Проверка есть ли контрол на форме
    #39935187
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подпишись в бэк модуле формы "frm1" на событие "Current" интерфейса Form формы "frm2".
Если записей в наборе данных "frm2" нет, события тоже нет, ничего обрабатывать более не надобно.
...
Рейтинг: 0 / 0
Проверка есть ли контрол на форме
    #39935201
Фотография drafty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Predeclared
Подпишись в бэк модуле формы "frm1" на событие "Current" интерфейса Form формы "frm2" .
Если записей в наборе данных "frm2" нет, события тоже нет, ничего обрабатывать более не надобно.

Можно кусок кода,чтобы я понял как именно надо?
...
Рейтинг: 0 / 0
Проверка есть ли контрол на форме
    #39935226
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
drafty
Код: vbnet
1.
strvar=Nz(Forms!frm1.Form.frm2.Form.Controls("field21"))

выделенное свойство исключи
...
Рейтинг: 0 / 0
Проверка есть ли контрол на форме
    #39935237
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
drafty
...
Можно кусок кода,..

Можно:
...
Рейтинг: 0 / 0
Проверка есть ли контрол на форме
    #39935809
Фотография drafty
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Predeclared
drafty
...
Можно кусок кода,..

Можно:

Круто! Очень полезный "механизм", премного благодарен!
...
Рейтинг: 0 / 0
Проверка есть ли контрол на форме
    #39935858
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
drafty
Круто! Очень полезный "механизм", премного благодарен!
только не забывай обрабатывать все ошибки, ибо переменные слетают...
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Проверка есть ли контрол на форме
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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