помогите с флажками

tairvik
Дата: 05.03.2008 12:53:34
Помогите, пожалуйста... есть форма, построенная на основе запроса. на форме есть поле Код. в это поле могут помещаться значения из таблицы(запроса) либо из поля КодКлиента, либо КодАбонента. в зависимости от этого на форме соответствующий флажок (Клиент или Абонент) должен получать фокус. и фокус он должен получать сразу при открытии формы после запроса.
на какое событие вешать процедуру и подскажите с кодом.....
mds_world
Дата: 05.03.2008 16:25:56
А как вы узнаете какой именно код, КодКлиента или КодАбонента пришел в конкретном случае?

Или вы именно с этим просите помочь? С тем, чтобы разобраться откуда пришло значение?
tairvik
Дата: 05.03.2008 17:16:43
эта форма строится на запросе, который в свою очередь записывает данные из таблицы НомераАбонентов из поля КодАбонента, если оно не пустое, иначе из поля КодКлиента в той же таблице.
так вот мне нужен код:
если текущее значение формы поля Код = значению КодАбонента из НомераАбонентов, то флажку Абонент присвоить Истина, иначе флажку Клиент - Истина

вопрос: на какое событие формы повесить этот код (надо чтобы флажки определялись сразу же при открытии формы), и синтаксис этого кода (слабовата я в VBA)
mds_world
Дата: 05.03.2008 17:34:01
Непонятно все же, что с чем сравнивать.
У вас есть на форме 3 поля Код, КодКлиента и КодАбонента? Или нужно делать запрос к таблице, чтобы узнать равен ли Код значению КодАбонента из НомераАбонентов?

Но, предположим, что такие три поля на форме есть. Тогда на событии Текущая запись (Current) пишете
If Me.Код = Me.КодКлиента Then
  Me.ФлажокКлиент.SetFocus
ElseIf Me.Код = Me.КодАбонента Then
  Me.ФлажокАбонент.SetFocus
End If
mds_world
Дата: 05.03.2008 17:47:27
Стоп. Это в первом посте вы говорили о фокусе, а в последнем уже речь идет о True и False. Тогда переписываем код
If Me.Код = Me.КодКлиента Then
  Me.ФлажокКлиент=True: Me.ФлажокАбонент=False
ElseIf Me.Код = Me.КодАбонента Then
  Me.ФлажокКлиент=False: Me.ФлажокАбонент=True
End If
tairvik
Дата: 05.03.2008 17:48:04
запрос (уже он есть) по номеру абонента находит запись в таблице НомераАбонентов. В этой записи есть два поля: КодКлиента и КодАбонента. если КодАбонента не нулевая, то запрос возвращает в форму в поле Код значение КодАбонента, иначе КодКлиента, т.е. на форме одно поле Код.
Karfaqen
Дата: 05.03.2008 17:49:51
tairvik
в зависимости от этого на форме соответствующий флажок (Клиент или Абонент) должен получать фокус
...
так вот мне нужен код:
если текущее значение формы поля Код = значению КодАбонента из НомераАбонентов, то флажку Абонент присвоить Истина, иначе флажку Клиент - Истина
Вы в разных постах просите о разном: красное и синее это не одно и то же. Что же из этого вам хочется на самом деле?

Если установить значения флажков - то устанавливайте их то той же логике, что и код. Вообще если у вас клиент и абонент - взаимоисключающие понятия, то на самом деле это же ОДИН признак. Так можно просто в тот же самый запрос включить этот признак в виде отдельного поля запроса:
SELECT (КодАбонента IS NOT NULL) AS [Абонент], ...
А потом в форме просто свяжите его с вашим флажком да и все.
Karfaqen
Дата: 05.03.2008 18:00:31
Вдогонку. Если сильно хочется именно ДВА флажка, то второму (Клиенту) можно написать в свойство "данные"
= Not [Абонент]
mds_world
Дата: 05.03.2008 18:05:58
Теперь, кажется, понятно. На форме полей КодКлиента и КодАбонента нет, но в запросе, источнике формы, они есть. Так?
Если так, то есть два варианта:
1. Сделать на форме два скрытых поля КодКлиента и КодАбонента и применить код, который уже показан.
2. Дополнить немного программу
Dim bb
bb = Me.Form.Bookmark   
Me.Form.RecordsetClone.Bookmark = bb ' эти строки позволяют синхронизировать рекордсет
' А теперь немного преобразованный прежний код 
If Me.Код = Me.Form.RecordsetClone("КодКлиента") Then
  Me.ФлажокКлиент=True: Me.ФлажокАбонент=False
ElseIf Me.Код = Me.Form.RecordsetClone("КодАбонента") Then
  Me.ФлажокКлиент=False: Me.ФлажокАбонент=True
End If
Программист-Любитель
Дата: 05.03.2008 18:10:40
Плохо спроектированная таблица -> геморрой с кодированием.