Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Добавить в таблицу
 
 автор: Гоблин   (10.07.2012 в 23:50)   личное сообщение
 
 

Привет народ. Туплю. есть ленточная форма. В заголовке этой формы свободное поле, по мере набора в котором (с добавлением каждого нового знака) форма сокращается. Отфильтровывается. Теперь внимание вопрос. Если по мере набора в поле данных форма пустая. (нет такой записи) На какое событие ставить код добавления содержимого поля в таблицу. Кнопку не хочется, а так, что бы по нажатии ввода... далее дело техники.
На послеобновления, почему-то получается новая строка на каждый символ, на потерю фокуса из поля - то же самое. ЧТо-то не пойму. А то получается, что каждый новый введенный символ в новой строке и слово по вертикали... В общем бред.
Подскажите, что-то совсем затупил.

  Ответить  
 
 автор: Надежда_С   (11.07.2012 в 02:37)   личное сообщение
 
 

  Ответить  
 
 автор: snipe   (11.07.2012 в 08:27)   личное сообщение
 
 

А может наоборот
при заполнении любого поля в ленте считывать код со свободного поля и заполнять нужное поле

  Ответить  
 
 автор: kot_k_k   (11.07.2012 в 09:07)   личное сообщение
 
 

можно на событие PressKey или Изменение

  Ответить  
 
 автор: silich   (11.07.2012 в 09:46)   личное сообщение
 
 

BeforeUpdate

  Ответить  
 
 автор: Анатолий (Киев)   (11.07.2012 в 10:55)   личное сообщение
 
 

Например, установить флажок уровня модуля, а на событии Current при установленном флажке сбросить его и проверить NewRecord.

  Ответить  
 
 автор: Дядя Федор   (11.07.2012 в 11:14)   личное сообщение
 
 

Там же, где фильтруется.
После фильтрации проверить ко-во записей.

  Ответить  
 
 автор: Анатолий (Киев)   (11.07.2012 в 11:39)   личное сообщение
 
 


После фильтрации проверить ко-во записей.

А на каком событии? ApplyFilter происходит до того как фильтрация выполнена.

  Ответить  
 
 автор: Гоблин   (11.07.2012 в 12:06)   личное сообщение
 
 

Всем спасибо. Не стал заморачиваться много. Поставил кнопку с кодом добавления записи. По мере набора в поле форма сокращается и видно все наименования. Если count=0 и наименование устраивает, жмут кнопку и добавляют запись.
События перепробовал все. Автоматически ерунда получается. (

  Ответить  
 
 автор: Надежда_С   (13.07.2012 в 04:21)   личное сообщение
 
 

или повесить на горячие клавиши....

  Ответить  
 
 автор: Дядя Федор   (13.07.2012 в 14:21)   личное сообщение
 
 

Вот так как-то

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


Проверено, работает.

  Ответить  
 
 автор: Гоблин   (13.07.2012 в 16:28)   личное сообщение
 
 

Вот, Дядя Федор. Именно такой код и работает.
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
'код для добавления и обновления формы
и спрашивал. Так что спасибо. Это и не додумкал. Но если в поле пробелы не будут получаться, то смысла нет.

Как заставить принимать пробелы. Не хочет гад. Если бы не сжирал пробелы, проблем бы не было.

  Ответить  
 
 автор: kot_k_k   (13.07.2012 в 16:32)   личное сообщение
 
 

отлови код нажатия клавиши (PressKey) - проанализируй - если пробел добавь к строке его принудительно

strFind =strFind & " "
ил strFind =strFind & CHR(32)
- может пройдёть

  Ответить  
 
 автор: Дядя Федор   (13.07.2012 в 16:44)   личное сообщение
58 Кб.
 
 

У меня это так (взял из давно работаюшей формы поиска)

Private Sub LisFilter_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = 32 Then SendKeys "*"
End Sub


а * в Like катит! -> см. карттинку
При добавлении * поменять на пробел.

  Ответить  
 
 автор: Надежда_С   (13.07.2012 в 23:41)   личное сообщение
45 Кб.
 
 

Работает...
Проверено) Хорошо Дядя Федор придумал.
Но этот фильтр же не корретный. Врет часто....
Запрос как источник данных с отбором в нем через
Like надежней

  Ответить  
 
 автор: Гоблин   (14.07.2012 в 00:41)   личное сообщение
 
 

Придумано хорошо. Только мне надо в процессе ввода данных, контролировать по ходу ввода наличие введенного, так же искать таким образом. И, если нет ничего, то добавление записи должно проходить автоматически.
А запросом на отбор, запросом на добавление - это просто и слишком стандартно.

PS Пример понравился. Этак если новое наименование будет из 100 символов, и каждый будет проверяться запросом вводить его или нет, то осталось добавить только уточняющие запросы по нажатии кнопки ОК "Вы точно желаете ввести символ .... Если да, то нажмите "Да"...
Такой запрос хорошо бы один раз после ввода и нажатия клавиши Enter, а по ходу набора никаких запросов не надо. Только фильтр должен работать.

В форме не хватает полясосписком для выбора критерия - поля, по которому идет фильтрация.

  Ответить  
 
 автор: kot_k_k   (16.07.2012 в 09:24)   личное сообщение
 
 


И, если нет ничего, то добавление записи должно проходить автоматически.



ты чё твориш? ты чё забыл от куда у них руки растут. ни какого автомата, только по нажанию кнопки и еще с вопросам - а точно вы хотите. сам потом задолбаешся двойные названия убирать.

  Ответить  
 
 автор: Гоблин   (20.11.2012 в 21:33)   личное сообщение
 
 

Да, кот. Ты прав как никогда. Задолбался...

  Ответить  
 
 автор: Дядя Федор   (21.11.2012 в 08:04)   личное сообщение
 
 

Двойные названия исключаются на уровне таблицы уникальным индексом.

  Ответить  
 
 автор: kot_k_k   (21.11.2012 в 11:17)   личное сообщение
67 Кб.
 
 

Д.Федор наш народ победить нельзя - и это самое большое его горе.
вот посмотри - открыл базу, первое попавшееся название ввел.
вопрос откуда растут глаза, голова и на месте ли мозк у юзеров.

при том что ввод осуществляют 3 чела, которым я регулярно обещаю яйцы откручивать.

  Ответить  
 
 автор: Дядя Федор   (16.07.2012 в 07:53)   личное сообщение
 
 


Но этот фильтр же не корретный.



?????

  Ответить  
 
 автор: snipe   (16.07.2012 в 09:50)   личное сообщение
 
 

а еще поле из 100 символов и более
если в слове "ещё" умудряются 4 ошибки делать

  Ответить  
 
 автор: Дядя Федор   (16.07.2012 в 10:19)   личное сообщение
 
 

5 - истчо

  Ответить  
 
 автор: kot_k_k   (21.11.2012 в 11:19)   личное сообщение
 
 

а в слове хлеб можно сделать 4 ошибки и будет слово ПИВО

  Ответить  
 
 автор: Анатолий (Киев)   (21.11.2012 в 11:49)   личное сообщение
 
 

Если поиск выполняется в одном столбце таблицы, то может логичнее вместо свободного поля использовать комбобокс с тем же источником, что и ваша форма (этот столбец этой таблицы) с включенным "Ограничиться списком"?
Тогда при наборе символов будет подставляться существующее в списке значение и возникнет событие NotInList, когда такого нет. На этом событии можно и значение в таблицу добавить и список обновить.

  Ответить  
 
 автор: Гоблин   (21.11.2012 в 20:35)   личное сообщение
 
 

Подобное пробовал. Но получалось не очень. Допустим пустое поле. Вводят Иванов
Едва ввели И, как определяется, что такого нет и добавляет. У меня получилось вообще
И
в
а
н
о
в
Построчно. Может я с кодом что-то напутал как всегда, но удалил его и переделал.
Сейчас добавляется кнопкой. А поля действительно полесосписком. В первое вводится Фамилия. В списке все на эту фамилию. Затем либо находят нужного, либо вводят инициалы во второе полесосписком и в списке отсев по фамилии и инициалам. Если таковые есть, то далее водится дата рождения, затем пол. И с каждым разом список сокращается.

  Ответить  
 
 автор: kot_k_k   (22.11.2012 в 09:49)   личное сообщение
 
 

вообщето оно добавляет по ентеру после ввода, тогда и возникает НолтЛист - а ты куда-то ни туда прицепил обработку.

  Ответить  
 
 автор: Гоблин   (23.11.2012 в 19:57)   личное сообщение
 
 

Да это дела давно минувших лет. Хреново то, что из всего вышеперечисленного Анатолием и другими не работает. БЛИН не знаю почему. Если полесосписком пустое, то лучше не упоминать вообще данное поле сосписком или ставить null и больше никак.

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList