Listbox

Вилькович
Дата: 27.09.2005 17:06:25
Есть табличка, в которой, кроме всего прочего, название элемента и поле типа "Yes/No" (использовать этот элемент или нет).
Есть форма, на которую нужно поместить Listbox со списком элементов, и выбирая/убирая выделение элемента в листбоксе изменять значение этого поля типа "Yes/No". Как это сделать?
Тяп-ляп
Дата: 27.09.2005 17:22:45
Я так понял, что список имеет простое несвязное выделение.
Предположим, что в первом столбце этого списка выводится ключ таблицы RowId - целое число.
Тогда:
Private Sub lst_AfterUpdate()
Dim SQL as string
SQL = "Update tableName Set BoolField = Not BoolField Where RowId = " & me.lst.Column(0) & ";"
Docmd.RunSQL SQL
End Sub
Вилькович
Дата: 27.09.2005 17:53:04
Да, это почти то, что нужно. Но ещё нужно сделать так, чтоб при открытии формы в листбоксе уже были выбраны те элементы, у которых поле "yes/no" стоит в yes ( в таблице).
Тяп-ляп
Дата: 27.09.2005 18:02:58
Если логическое поле таблицы выводится в листбокс третьим столбцом,
то тогда что-то типа этого:

Private Sub Form_Load()
Dim i As Long
For i = 0 To Me.lst.ListCount - 1
    Me.lst.Selected(i) = Me.lst.column(2)
Next i
End Sub

P.S.
Надо проверить, что событие Form_Load происходит гарантировано после загрузки листбокса данными.
Вилькович
Дата: 27.09.2005 18:27:12
Как-то смущает
Me.lst.column(2)
. Здесь указание только на колонку, а как же строчка?? Не понятно даже, как предыдущий пример работал, а он работал.. :)
Вилькович
Дата: 27.09.2005 19:01:23
Написал Me.lst.Selected(i) = Me.lst.Column(2, i). Так всё работает.
Ещё добавил Application.DoCmd.SetWarnings False к первому примеру, чтоб не выкидывало сообщений о подтверждении разрешения записи в базу.
Спасибо за помощь.