|
|
|
| помогите пожалуйста решить несколько вопросов:
исходные данные: есть форма, источник данных (select * from сотрудники).
на форме есть поля которые связаны с полями таблицы "сотрудники".
и сверху есть выкидной список, в нем источник строк (select id, ФИО from сотрудники), при этом первый столбец ширины 0, т.е. в списке видны только фамилии. При выборе фамилии в списке, поля формы заполняются в соответствии с выбранной фамилией.
вопросы:
1. если например есть два Петровых, можно ли сделать так чтобы когда я набираю "петров" в поле списка, он открывался и показывал этих двух петровых чтобы можно было выбрать, а то поиучмолчанию он подставляет верхнего из двух Петровых.
2. я объединил источник строк списка с пустой записью, можно ли сделать так чтобы при открытии формы по умолчанию в списке стояла пустая запись и форма содержала пустые(незаполненные поля).
3. если в выкидном списке осущствляется выборка двух столбцов из таблицы, при этом первый скрывается установкой ширины "0". как задавать значение по умолчанию в таком списке? | |
|
| |
|
|
|
| Допустим, ваш "выкидной список" называется Combo.
1. На его событие KeyDown выполняйте Me![Combo].DropDown и список будет открываться при вводе символа.
3. Значение по умолчанию всегда задается для связанного столбца.
2. "я объединил источник строк списка с пустой записью" - тут я не понял. Это UNION запрос?
Как вы это сделали и зачем? ИМХО на событие Form_Load вам нужно выполнить перемещение на новую запись (например - метод DoCmd.GoToRecord ...), а Combo, если не задано значение по умолчанию, и так будет пустым. Это действие можно выполнить и после очистки Combo. | |
|
| |
|
|
|
|
| Это UNION запрос?
да был UNION запрос... теперь попробую последовать вашему совету. | |
|
| |
|
|
|
| Анатолий (Киев)
воспользовался вашим советом, использовал DoCmd.GoToRecord ,,acNewRec
только вот косячок остался маленький у меня написана функция
Private Sub ПолеВыбораСотрудника_AfterUpdate()
If Me.FilterOn Then Me.FilterOn = False ' это я сбрасываю фильтры если они выставлялись, чтобы получить весь набор записей.
Me.RecordsetClone.FindFirst "id = " & Me![ПолеВыбораСотрудника]
Me.Bookmark = Me.RecordsetClone.Bookmark
RecCount.Caption = Me.Recordset.RecordCount
так вот, на форме присутствует стандартная кнопка, "создать новую запись", когда я загружаю форму все хорошо, т.е. все поля формы пустые и ПолеВыбораСотрудника тоже.
а при нажатии данной кнопки все поля формы становятся пстыми для ввода, а ПолеВыбораСотрудника не сбрасывается и хранит последнее значение:(
как это исправить? (раньше я принудительно выбирал пустое значение прицепленое UNION'ом)... | |
|
| |
|
|
|
| Me![ПолеВыбораСотрудника] = Null
И еще:
Me.RecordsetClone.FindFirst "id = " & Me![ПолеВыбораСотрудника]
Me.Bookmark = Me.RecordsetClone.Bookmark
|
Здесь вы не проверяете NoMatch, а зря.
RecCount.Caption = Me.Recordset.RecordCount
|
Пока вы не попадете в последнюю запись, св-во RecordCount может вернуть неправильный результат. | |
|
| |
|
|
|
| с Null уже сам разобрался:) а вот с остальным:)?
может и глупый вопрос но как проверять NoMatch? это я так понял на отсутстсвие данных???
Пока вы не попадете в последнюю запись, св-во RecordCount может вернуть неправильный результат.
| а с этим тогда как быть?
и кстати попробовал На событие KeyDown установть Me![Combo].DropDown
список то открывается а еще като тонадо отобрать записи.. а фильтра у списка вроде нет, он только для формы бывает... | |
|
| |
|
|
|
|
Me.RecordsetClone.FindFirst "id = " & Me![ПолеВыбораСотрудника]
Me.Bookmark = Me.RecordsetClone.Bookmark
Здесь вы не проверяете NoMatch, а зря.
|
я правильно понял так надо проверять?
If Not Me.RecordsetClone.NoMatch Then
Me.RecordsetClone.FindFirst "id = " & Me![ПолеВыбораСотрудника]
Me.Bookmark = Me.RecordsetClone.Bookmark
End If
а чем все таки грозит отсутствие такой проверки? просто это событие стоит на апдейт списка, который ограничен по своим значениям - точно СУЩЕСТВУЮЩИМИ значениями из таблицы...
RecCount.Caption = Me.Recordset.RecordCount
|
а тут надо что то типа?
RecCount.Caption = 0
Me.Recordset.MoveFirst
while not Me.Recordset.EOF
RecCount.Caption = RecCount.Caption + 1
Me.Recordset.MoveNext
wend
так? | |
|
| |
|
|
|
| и кстати нашел ошибку которая возникает в следующем случае.
ввожу билеберду в поел списка, access ругается и говорит выбери из списка правильное значение, стираю то что набрал в поле списка и давлю на ввод, вываливается в дебуг на строке Me.RecordsetClone.FindFirst "id = " & Me![ПолеВыбораСотрудника]
то есть NoMatch не работает у меня? или он не предотвращает такой ошибки? надо дополнительно ее ловить? | |
|
| |
|
|
|
|
стираю то что набрал в поле списка и давлю на ввод, вываливается в дебуг на строке Me.RecordsetClone.FindFirst "id = " & Me![ПолеВыбораСотрудника]
| Естественно вывалится, т.к. Me![ПолеВыбораСотрудника] в этот момент равно Null.
Можно сделать так: "id = " & NZ(Me![ПолеВыбораСотрудника],0), но лучше вообще не выполнять поиск, если IsNull(Me![ПолеВыбораСотрудника]) | |
|
| |
|
|
|
| понял спасибо еще раз!
остался вопрос открытым только с открывающимся списком отбирающим значения по введенным буквам, я так понимаю что там на лету RecordSource списка надо менять??? | |
|
| |
|
|
|
|
я правильно понял так надо проверять?
If Not Me.RecordsetClone.NoMatch Then
Me.RecordsetClone.FindFirst "id = " & Me![ПолеВыбораСотрудника]
Me.Bookmark = Me.RecordsetClone.Bookmark
End If
| Нет, неправильно.
Me.RecordsetClone.FindFirst "id = " & Me![ПолеВыбораСотрудника]
If Not Me.RecordsetClone.NoMatch Then
Me.Bookmark = Me.RecordsetClone.Bookmark
End If
| А так - красивше:
With Me.RecordsetClone
.FindFirst "id = " & Me![ПолеВыбораСотрудника]
If Not .NoMatch Then Me.Bookmark = .Bookmark
End With
|
а тут надо что то типа?
RecCount.Caption = 0
Me.Recordset.MoveFirst
while not Me.Recordset.EOF
RecCount.Caption = RecCount.Caption + 1
Me.Recordset.MoveNext
wend
так?
| Можно и так, но это как-то через ж... Лучше так:
With Me.RecordsetClone
If Not .BOF Or Not .EOF Then .MoveLast
RecCount.Caption = .RecordCount
End With
|
ЗЫ. Мой вам совет - не ленитесь заглядывать в HELP по любому случаю. Если не дружите с английским, найдите в инете Help на A97 rus. Была ссылка и на этом сайте. | |
|
| |
|
|
|
| Спасибо за коментарии и помощь! Хелп читаю, но видимо не умею в нем нормально искать то что надо:) как написали вы про то что есть NoMatch сразу нашел и уже понял что не правильно привел свой пример:)
Спасибо еще раз вроде все работает.. поправлю и в остальных местах в коде,
но вот с ошибкой проблема осталась!!!! ее надо ловить отдельно? КАК ВЫ ДУМАЕТЕ? | |
|
| |