|
|
|
| имеем:
1. форму, основанную на запросе
2. в заголовке формы поле поиска записей, находящихся в области данных (ленточная форма)
чуть ранее на форуме долго выяснял, почему у меня при наборе в поле поиска слова, которого нет в списке ленточной формы, акс выдает ошибку. Нашел почему - оказалось, что в конце списка ленточной формы должна быть пустая строка
так вот запрос построен таким образом, чтобы не выводились повторы. (сделана группировка по записям и в группировке одного поля выбран параметр First)
все хорошо было, пока не попала вожжа под хвост и не сделал это самое поле поиска в форме. Дело в том, что при такой постановке задачи ни при каких условиях нельзя сделать, чтобы как в результатах запроса, так и в форме появлялась эта пустая строка.
А раз нет этой пустой строки, то возникает вероятность выдачи акцессом окошка ошибки, когда юзер пытается найти запись, которой нет в списке
так вот вопрос: можно ли в форме сделать так, чтобы не выводились повторы?
в форме и, соответственно в запросе, есть поле "№_Заказа"
или в запросе, убрав группировку, сделать так, чтобы эти повторы не выводились... | |
|
| |
|
|
|
| а не проше на функцию поиска повесить обработчик ошибок с выводом нужной информации "Звиняйте, но ничего не найдено" | |
|
| |
|
|
|
| как это сделать????????
я задавал такой вопрос в теме, где обсуждаллась эта проблемма..никто не ответил | |
|
| |
|
|
|
| Например так:
Private Sub Form_Error(DataErr As Integer, Response As Integer)
If DataErr = номер выдаваемой ошибки Then
MsgBox("Нельзя ")
Response = False
End If
End Sub | |
|
| |
|
|
|
| не работает
та же табличка выскакивает
может обработчик повесить не на форму, а на поле поиска? | |
|
| |
|
|
|
| Попробуйте еще If Err.Number вместо If DataErr
Ну и попробуйте на поле повесить. Да и вообще ACCESS это не минное поле, не бойтесь допустиь ошибку, пробуйте смело. Ощущение "ЭВРИКА" тоже не плохое. | |
|
| |
|
|
|
| Еще ,как вариант, можно пробежаться рекордсетом по ленточной форме и сравнивать значения со значение поля, Если совпадений нет, то выдать сообщение. | |
|
| |
|
|
|
| FORMAT спасибо
но пока не работает
Private Sub Поле64_Change()
DoCmd.ApplyFilter , "Название_Фирмы like '" & Me.Поле64.Text & "*'"
Me.Поле64.SelStart = Len(Me.Поле64.Text)
If Err.Number = 2185 Then
MsgBox ("Нельзя ")
End If
End Sub
|
на счет "Эврики" полностью с вами согласен
99% своей разработки на этом ощущении и было сделано :-) | |
|
| |
|
|
|
| Private Sub Поле64_Change()
On Error GoTo Err_Поле64_Change
DoCmd.ApplyFilter , "Название_Фирмы like '" & Me.Поле64.Text & "*'"
Me.Поле64.SelStart = Len(Me.Поле64.Text)
Err_Поле64_Change:
if MsgBox Err.Description = 2185 Then
MsgBox ("Нельзя ")
End If
Resume Exit_Поле64_Change
End Sub | |
|
| |
|
|
|
| Зарапортовался. Событие обработки ошибки нужно вешать на форм_еррор. Просто с соблюдением синтаксиса по аналогии с полем. | |
|
| |
|
|
|
| Но повторюсь еще раз. ИМХО в вашем случае лучше сделайте так как было до момента, пока вожжа под хвост не попала. Пото введите поле для поиска и поиск осуществляйте с помощью рекордсета . Если в ленточной форме не большое количество записей ( не измеряется десятками тысяч ), то рекордсет - то, что вам нужно. | |
|
| |
|
|
|
| >... ИМХО в вашем случае лучше сделайте так
>как было до момента, пока вожжа под хвост не попала...
я тоже склоняюсь к этому варианту уже
оставлю поиск как в "Борее" - кнопочки с буквами А, Б, В....
и с кодами
Private Sub Кнопка21_Click()
DoCmd.ApplyFilter "", "[Название_Фирмы] Like ""[А]*"""
End Sub
Private Sub Кнопка24_Click()
DoCmd.ApplyFilter "", "[Название_Фирмы] Like ""[Б]*"""
End Sub
Private Sub Кнопка25_Click()
DoCmd.ApplyFilter "", "[Название_Фирмы] Like ""[В]*"""
End Sub
и т.д.
|
| |
|
| |
|
|
|
| Ну таким макаром вам нужно повесить на форму все кнопки с русским алфавитом. После чего их останется только раскрасить в белые и черные цвета поочередно и назвать форму РОЯЛЕМ
Попробуйте что-то вроде этого:
Dim rst1 As Object
Set rst1 = Me.Recordset
Dim strok1 As String
DIM strok2 as string
strok1 = Forms!Ваша_форма!.Поле_для_поиска.value
Do While Not rst1.EOF
strok2= Forms!Ваша_форма!Имя_поля_для_сравнения
If InStr(strok1, strok2) <> 0 Then выполняем к.л. действия
rst1.MoveNext
Loop | |
|
| |
|
|
|
| Можно еще ленточную форму сделать подчиненной, а поле повесить на гланую форму. Тогда, если записей, совпадающих с полем не будет найдено, в подчиненной форме не будет выведено ниодной записи и при этом ошибка высвечиваться не будет. | |
|
| |
|
|
|
| повесить на обработчик кнопки? что-то вроде того
Private Sub Кнопка21_Click()
on error goto err_debug
me.Filter = "[Название_Фирмы] Like ""[А]*"""
me.FilterOn = true
exit_here:
exit sub
err_debug:
msgbox ("Есть ошибка")
resume exit_here
End Sub
|
| |
|
| |
|
|
|
| не..не кнопки
а обработчик поля "Поиск"
с кнопками как раз все нормально...как сказал Format - у меня рояль сейчас
вот я и хотел заменить этот рояль на поисковое поле... | |
|
| |
|
|
|
| и что мешает привесить подобный код на обработку изменения поля
пусть есть поле [Нужное поле], вводишь туда чего надо найти а рядом кнопку RunFilter и на кнопку след код.
Private Sub RunFilter_Click()
on error goto err_debug
me.Filter = "[Название_Фирмы] Like ""*" & [Нужное поле] & "*""
me.FilterOn = true
exit_here:
exit sub
err_debug:
msgbox ("Есть ошибка")
resume exit_here
End Sub
|
Ну или повесить на обновление самого поля
Private Sub Нужное_поле_UfterUpdate()
|
| |
|
| |
|
|
|
| Можно еще ленточную форму сделать подчиненной, а поле повесить на гланую форму. Тогда, если записей, совпадающих с полем не будет найдено, в подчиненной форме не будет выведено ниодной записи и при этом ошибка высвечиваться не будет | |
|
| |