|
|
|
| Access 2003/2007
Подскажите кто разбирается как сделать поиск нормально?
Проблема в том что если есть 10 Ивановых в базе то при этом поиске показывает первую запись Иванова, хотелось бы чтобы показывалась последняя запись Иванова.
Для поиска использую поле r_search вот код для поиска записи
Private Sub r_search_LostFocus()
Dim RBev As DAO.Recordset
Set RBev = CurrentDb.OpenRecordset("maindata") 'название таблицы
Dim BW As Variant
Dim I As Integer
Dim LN As Double
Dim SN As String
Dim ZN As String
BW = RBev.Bookmark
If Not IsNull(r_search) And (Trim(r_search) <> "") Then
SN = ""
ZN = Trim(r_search)
LN = 0
For I = 1 To Len(ZN)
If (Mid(ZN, I, 1) >= "0") And (Mid(ZN, I, 1) <= "9") Then
LN = I
End If
Next
If LN = 0 Then
RBev.Index = "tw_clientname" 'поле ИМЯ КЛИЕНТА
RBev.Seek ">=", r_search
r_sortedby = "Client name" 'r_sortedby информационное поле показывающее как происходил поиск по имени или по порядковому номеру или адресу
Else
If LN = 6 Then
LN = Val(r_search)
RBev.Index = "tw_bookingnumber" 'порядковый номер записи
RBev.Seek ">=", LN
r_sortedby = "Booking number" 'найдено по номеру записи
Else
RBev.Index = "tw_address" 'поиск по адресу
RBev.Seek ">=", r_search
r_sortedby = "Address" 'найдено по адресу
End If
End If
If RBev.NoMatch Then 'если не найдено то..
MsgBox ("Not found") 'ничего не нашли..
RBev.Bookmark = BW
End If
Selectie = "SELECT * FROM maindata WHERE tw_bookingnumber = " & RBev!tw_bookingnumber
Forms.maindata.RecordSource = Selectie
Forms.maindata.r_search.SetFocus
Else
RBev.Bookmark = BW
End If
r_search = ""
End Sub
|
| |
|
| |
|
|
|
| А можно кусочек той таблицы, где поиск идёт
с 10 ивановыми? | |
|
| |
|
|
|
| Пример тут http://sir22.com/1.rar | |
|
| |
|
|
|
| вместо seek используйте FindFirst и FindNext, тем более что SEEK не работает со связанными таблицами
Кроме тотого значительно выстрее будет открыть рекордсет с заданным условием (а не по всей таблице) и взять последнюю запись этого рекордсета.
или открыть рекодсет с условием и сортировкой в обратном порядке (т.е. что бы 10-я запись стала первой) и использовать Select top 1 .... | |
|
| |