|
|
|
| Привет народ. Туплю. есть ленточная форма. В заголовке этой формы свободное поле, по мере набора в котором (с добавлением каждого нового знака) форма сокращается. Отфильтровывается. Теперь внимание вопрос. Если по мере набора в поле данных форма пустая. (нет такой записи) На какое событие ставить код добавления содержимого поля в таблицу. Кнопку не хочется, а так, что бы по нажатии ввода... далее дело техники.
На послеобновления, почему-то получается новая строка на каждый символ, на потерю фокуса из поля - то же самое. ЧТо-то не пойму. А то получается, что каждый новый введенный символ в новой строке и слово по вертикали... В общем бред.
Подскажите, что-то совсем затупил. | |
|
| |
|
|
|
|
| А может наоборот
при заполнении любого поля в ленте считывать код со свободного поля и заполнять нужное поле | |
|
| |
|
|
|
| можно на событие PressKey или Изменение | |
|
| |
|
|
|
|
| Например, установить флажок уровня модуля, а на событии Current при установленном флажке сбросить его и проверить NewRecord. | |
|
| |
|
|
|
| Там же, где фильтруется.
После фильтрации проверить ко-во записей. | |
|
| |
|
|
|
|
После фильтрации проверить ко-во записей.
| А на каком событии? ApplyFilter происходит до того как фильтрация выполнена. | |
|
| |
|
|
|
| Всем спасибо. Не стал заморачиваться много. Поставил кнопку с кодом добавления записи. По мере набора в поле форма сокращается и видно все наименования. Если count=0 и наименование устраивает, жмут кнопку и добавляют запись.
События перепробовал все. Автоматически ерунда получается. ( | |
|
| |
|
|
|
| или повесить на горячие клавиши.... | |
|
| |
|
|
|
| Вот так как-то
Private Sub LisFilter_Change() 'LisFilter - свободное поле
Dim strFind$
strFind = Nz(Me.LisFilter.Text, "")
If strFind <> "" Then
Me.Filter = "[NaimPrice] Like '" & strFind & "*'"
Me.FilterOn = True
Me.LisFilter.SelStart = 200
Else
Me.FilterOn = False
End If
If Me.RecordsetClone.RecordCount = 0 Then
If MsgBox("Добавить " & strFind & "?", vbYesNo, "!") = vbYes Then
'код для добавления и обновления формы
End If
End If
End Sub
|
Проверено, работает. | |
|
| |
|
|
|
| Вот, Дядя Федор. Именно такой код и работает.
Dim strFind$
strFind = Nz(Me.LisFilter.Text, "")
If strFind <> "" Then
Me.Filter = "[NaimPrice] Like '" & strFind & "*'"
Me.FilterOn = True
Me.LisFilter.SelStart = 200
Else
Me.FilterOn = False
End If
Но зараза пробелы в поле не поставить. А очень надо.
За вторую часть кода
If Me.RecordsetClone.RecordCount = 0 Then
If MsgBox("Добавить " & strFind & "?", vbYesNo, "!") = vbYes Then
'код для добавления и обновления формы
и спрашивал. Так что спасибо. Это и не додумкал. Но если в поле пробелы не будут получаться, то смысла нет.
Как заставить принимать пробелы. Не хочет гад. Если бы не сжирал пробелы, проблем бы не было. | |
|
| |
|
|
|
| отлови код нажатия клавиши (PressKey) - проанализируй - если пробел добавь к строке его принудительно
strFind =strFind & " "
ил strFind =strFind & CHR(32)
- может пройдёть | |
|
| |
|
58 Кб. |
|
| У меня это так (взял из давно работаюшей формы поиска)
Private Sub LisFilter_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 32 Then SendKeys "*"
End Sub
|
а * в Like катит! -> см. карттинку
При добавлении * поменять на пробел. | |
|
| |
|
45 Кб. |
|
| Работает...
Проверено) Хорошо Дядя Федор придумал.
Но этот фильтр же не корретный. Врет часто....
Запрос как источник данных с отбором в нем через
Like надежней | |
|
| |
|
|
|
| Придумано хорошо. Только мне надо в процессе ввода данных, контролировать по ходу ввода наличие введенного, так же искать таким образом. И, если нет ничего, то добавление записи должно проходить автоматически.
А запросом на отбор, запросом на добавление - это просто и слишком стандартно.
PS Пример понравился. Этак если новое наименование будет из 100 символов, и каждый будет проверяться запросом вводить его или нет, то осталось добавить только уточняющие запросы по нажатии кнопки ОК "Вы точно желаете ввести символ .... Если да, то нажмите "Да"...
Такой запрос хорошо бы один раз после ввода и нажатия клавиши Enter, а по ходу набора никаких запросов не надо. Только фильтр должен работать.
В форме не хватает полясосписком для выбора критерия - поля, по которому идет фильтрация. | |
|
| |
|
|
|
|
И, если нет ничего, то добавление записи должно проходить автоматически.
|
ты чё твориш? ты чё забыл от куда у них руки растут. ни какого автомата, только по нажанию кнопки и еще с вопросам - а точно вы хотите. сам потом задолбаешся двойные названия убирать. | |
|
| |
|
|
|
| Да, кот. Ты прав как никогда. Задолбался... | |
|
| |
|
|
|
| Двойные названия исключаются на уровне таблицы уникальным индексом. | |
|
| |
|
67 Кб. |
|
| Д.Федор наш народ победить нельзя - и это самое большое его горе.
вот посмотри - открыл базу, первое попавшееся название ввел.
вопрос откуда растут глаза, голова и на месте ли мозк у юзеров.
при том что ввод осуществляют 3 чела, которым я регулярно обещаю яйцы откручивать. | |
|
| |
|
|
|
|
Но этот фильтр же не корретный.
|
????? | |
|
| |
|
|
|
| а еще поле из 100 символов и более
если в слове "ещё" умудряются 4 ошибки делать | |
|
| |
|
|
|
|
| а в слове хлеб можно сделать 4 ошибки и будет слово ПИВО | |
|
| |
|
|
|
| Если поиск выполняется в одном столбце таблицы, то может логичнее вместо свободного поля использовать комбобокс с тем же источником, что и ваша форма (этот столбец этой таблицы) с включенным "Ограничиться списком"?
Тогда при наборе символов будет подставляться существующее в списке значение и возникнет событие NotInList, когда такого нет. На этом событии можно и значение в таблицу добавить и список обновить. | |
|
| |
|
|
|
| Подобное пробовал. Но получалось не очень. Допустим пустое поле. Вводят Иванов
Едва ввели И, как определяется, что такого нет и добавляет. У меня получилось вообще
И
в
а
н
о
в
Построчно. Может я с кодом что-то напутал как всегда, но удалил его и переделал.
Сейчас добавляется кнопкой. А поля действительно полесосписком. В первое вводится Фамилия. В списке все на эту фамилию. Затем либо находят нужного, либо вводят инициалы во второе полесосписком и в списке отсев по фамилии и инициалам. Если таковые есть, то далее водится дата рождения, затем пол. И с каждым разом список сокращается. | |
|
| |
|
|
|
| вообщето оно добавляет по ентеру после ввода, тогда и возникает НолтЛист - а ты куда-то ни туда прицепил обработку. | |
|
| |
|
|
|
| Да это дела давно минувших лет. Хреново то, что из всего вышеперечисленного Анатолием и другими не работает. БЛИН не знаю почему. Если полесосписком пустое, то лучше не упоминать вообще данное поле сосписком или ставить null и больше никак. | |
|
| |