Чего хочется добиться.
Ленточная форма, о которой идет речь описывает ситуацию выдачи документов строгой отчетности сотрудникам:
сотрудник_1 дата документ_0123456
сотрудник_1 дата документ_0127777
сотрудник_2 дата документ_5555456
сотрудник_3 дата документ_0199956
сотрудник_3 дата ????????????????
Т.е. в каждой строке нужно сопоставить сотрудника из списка сотрудников и документ их списка документов. Названия всех документов сходны и имеют вид "АБВ xxxxxx", где xxxxxx-номер, поэтому наиболее быстрый способ их выбора - просто набрать на клавиатуре. Простота и скорость работы для будущего оператора базы будет очень важны, по сути человек полдня будет заниматься только этим.
Вадя |
что значит отображаются далеко не все документы? |
В списках и полях со списками access отображает по умолчанию только 1000 строк, максимальное значение - 32766. У меня же документов сотни тысяч, поэтому для многих из них поле со списком просто остается пустым.
Alll |
lНе понятно, при чём тут RecordSource, нужно менять RowSource поля со списком |
Пардон, здесь у меня опечатка, конечно я имел в виду RowSource.
Беда в том, что заранее нельзя никак ограничить выбор. В приведенном выше примере 4 документа уже выданы и должны корректно отображаться. А что за документы будут выбраны пятым и последующими заранее (до открытия ленточной формы) неизвестно. Поэтому если пользоваться полем со списков, то его RowSource должен содержать все.
Пункт 3 - это попытка ограничить RowSource "по ходу ввода" примерно так, как Вы и написали. Но пока ввод в поле не закончен, изменить RowSource не удается - на последовательность команд
поле_со_списком.RowSource="новый_запрос"
поле_со_списком.Requery
access отвечает, что пока поле редактируется, менять источник строк нельзя.
Делать это пытался в OnChange, OnNotInList, OnKeyPress.
Гаишник |
Но это поле может быть размещено в заголовке или примечании формы... |
Да, это выход, но крайне неудобный для будущего оператора. Если ввод организовать в заголовке или примечании формы, а в ленточной части только показывать результаты, то теряется наглядность. Обсуждаемая форма - лишь часть другой и места для нее остается немного.
mds_world |
совместить вар.4 - свободное поле и вложенную табличную или ленточную подформу линкующуюся со значением в свободном поле |
В чистом виде такой вариант не пройдет, поскольку свободное поле будет отображаться в каждой строке ленточной формы и в каждой иметь одинаковое содержание - в этом то и проблема 4 варианта.
Но сама идея использования вложенной подформы весьма заманчива... В ней можно отобразить сколько угодно строк, а показывать в главной форме можно лишь одну, чем для оператора и будет достигнута иллюзия одного поля ввода. Только один существенный вопрос: как сделать так, чтобы по мере набора номера документа "АБВ xxxxxx" в этой вложенной подформе происходило автоматическое перемещение на запись с этим документом? Использовать OnKeyPress и анализировать уже введенную часть или есть способ проще?