Помогите с блокировкой

pioneer86
Дата: 20.02.2008 10:30:12
Спасибо за прелесные ассоциации, которым вы подвергли мой ник, но пробьема не решилась(((

мне надо сделать так, чтобы поле блокировалось (становилось серым) только когда стоит значение определенное (ну типа "не звонить"), а в остальных случаях оно было доступно для изменения

(напомню, на форме выпадающий список, а под ним подчиненная форма, так вот эту форму надо при определенном значении выпадающего списка делать недоступной, но при этом если значение изменится на другое, форма должна опять становиться доступной, и то что вы мне посоветовали до этого Me.Поле17.Enabled = Client.Value <> "не звонить" вааще не катит(((()
Karfaqen
Дата: 20.02.2008 10:39:47
Может, вам совет показался недейственным из-за собственной нечеткости понимания задачи?
pioneer86
надо сделать так, чтобы поле блокировалось (становилось серым) только когда стоит значение определенное (ну типа "не звонить"), а в остальных случаях оно было доступно для изменения

(напомню, на форме выпадающий список, а под ним подчиненная форма, так вот эту форму надо при определенном значении выпадающего списка делать недоступной
Вот тут вы дважды описали задачу - но оба раза она звучит чуток по-разному.

В первом случае можно понять, что вам надо по некоторму значению поля блокировать САМО это поле. Во втором случае - явно по значению одного поля блокировать ДРУГОЕ - причем не поле, а субформу. И как же на самом деле-то?

Если второй вариант, то почему предложеннное вам решение "не катит"? В обработку какого события вы писали приведенный код?
pioneer86
Дата: 20.02.2008 11:12:32
код мне этот предложили как-раз для блокировки формы по значению из списка, сделать мне надо следубщее:

блокировать подчитенную форму при определенном значении выпадающего списка, при остальных значениях списка форма должна быть доступна для внесение изменений в ее полях.
Т.Е. есть значения списка 0,1,2,3
на 0 подчиненная форма должна блокироваться;
на 1,2,3 данные формы могут меняться.

я открыл форму на первой записи, выбрал из списка 1 изменил значения подчиненной формы, перешел на следующую запись выбрал 0 - подчиненная форма заблокировалась, перешел к следующей записи, выбрал 2, изменил данные, пошел далее и т.д.

возмжно я неправильно выражаю свои мысли т.к. в access я разбираюсь очень плохо(
заранее извините...
Karfaqen
Дата: 20.02.2008 11:21:14
Ну если так, то наводящий вопрос уже был задан:
Если второй вариант, то почему предложеннное вам решение "не катит"?
В обработку какого события вы писали приведенный код?
Ответьте
Karfaqen
Дата: 20.02.2008 11:33:41
pioneer86
я открыл форму на первой записи, выбрал из списка 1 изменил значения подчиненной формы, перешел на следующую запись выбрал 0 - подчиненная форма заблокировалась, перешел к следующей записи, выбрал 2, изменил данные, пошел далее и т.д.
Вот заметьте в этой цитате ваше повторяющее слово. В терминах событий контролов форм это событие называется AfterUpdate - и, вроде, вам как раз туда и советовали этот код писать:
Private Sub ПолеСоСписком_AfterUpdate()
    Me("ИмяКонтролаСубформы").Enabled = Not Nz(Me("ПолеСоСписком"), 0) = 0
End Sub

А чтобы у вас доступность субформы отслеживалась НЕ только после выбора значения в списке, но и просто при переходе от записи к записи - т.е. соответствовала бы текущему значению поля со списком, тоже самое нужно сделать и в обработке события формы Form_Current()
pioneer86
Дата: 20.02.2008 14:53:49
ну я не знаю наверно я совсем туп, объясните пожалуйста поэтапно, у меня есть статус в выпадающем списке "Больше не звонить" при котором должна блокироваться форма
(для пробы вмесь формы я поставил поле19)
вот что написано:

Private Sub Client_AfterUpdate()
Me("Поле19").Enabled = Not Nz(Me("Client"), "Больше не звонить") = "Больше не звонить"
End Sub

Private Sub Form_Current()
Me("Поле19").Enabled = Not Nz(Me("Client"), "Больше не звонить") = "Больше не звонить"
End Sub



( Me.Поле19.Enabled тоже пробовал(((
и как сделать чтобы если есть заблокированная форма, выбираем другой статус и она разблокируется)

помогите плиз)))
Karfaqen
Дата: 20.02.2008 15:10:00
Вы сами себя путаете. Например, зачем вы из поста в пост попеременно меняете ТИП сравниваемого значения - то у вас там числа, то у вас там строки. Вы не знаете какого типа значение возвращает вам ваше поле со списком? Вы уже определитесь в конце концов.

Поле со списком - это такой контрол, в котором может быть несколько столбцов - несколько полей источника, часть которых может быть невидима. Причем чаще всего делается так, что глазами вы видите там значения одного поля, а возвращает он значения другого поля (невидимого столбца).

В этом суть комбобокса. То есть, например, вы видите там "Не звонить", а программно читая значение, получите значение 123 - значение связанного столбца (BoundColumn). И если вы хотите сравнивать с константой значение, которое вам вернет поле со списком - вы должны ТОЧНО узнать какого типа значения он вам возвращает - и сравнивать СООТВЕТСВУЮЩУЮ константу.

Разберитесть с работой вашего списка для начала.
pioneer86
Дата: 20.02.2008 15:19:26
у меня там строки, есть таблица два столбца (код-тип) с этими типами, типу "больше не звонить" соответствует код "2",

подчиненная форма называется TBL_Contact_Companies (но их там несколько)

к сожалению разобраться очень сложно т.к. это вообще не моя база((( если возвращается текстовое значение (я думаю что возвращается текстовое значение), как тогда должно быть написано?

просто когда написано:
Me.Поле17.Enabled = Client.Value <> "Больше не звонить" при изменения статуса (любого на любой) поле17 блокируется и больше никаких изменений не происходит.
Karfaqen
Дата: 20.02.2008 15:25:57
Да. Ну напишите сюда свойства вашего списка:
1. Источник строк
2. Число столбцов
3. Ширина столбцов
4. Связанный столбец

И для таблицы источника строк списка уточничте ТИПЫ полей
Karfaqen
Дата: 20.02.2008 15:26:51
Хотя тогда уж проще было бы форму свою показать. Если приколете сюда архив mdb-файла с вашей формой в формате MSAccess2000 - смогу глянуть через часок.