Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Поиск данных на форме в Access. / 17 сообщений из 17, страница 1 из 1
11.09.2002, 19:00
    #32049844
gtsroger
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск данных на форме в Access.
Ситуация следующая : имеется форма, на ней в таблица с данными. Каким образом можно организовать поиск данных в этой таблице по нажатию нескольких уже наличествующих в некотором поле таблицы данных. Т. е. например, в поле таблицы есть запись “Предприятие”, а мы, набрав на клавиатуре буквы “П”, ”р”, ”е”, должны перейти к этой записи. Помогите! а то я просто не знаю как к этой задаче подойти.
...
Рейтинг: 0 / 0
12.09.2002, 10:25
    #32049919
Juice
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск данных на форме в Access.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Dim rst As Recordset, str1 As String, strLike As String
Set rst = Me![ПодчинФорма].Form.RecordsetClone
    strLike =  "фио like '*"
str1 = Nz(Me![ПолеВводаКритерия], "")
    rst.FindFirst strLike & str1 & "*'" 
If Not rst.NoMatch Then Me![ПодчинФорма].Form.Bookmark = rst.Bookmark
rst.Close
Set rst = Nothing
...
Рейтинг: 0 / 0
30.07.2003, 17:00
    #32222720
Alexus12
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск данных на форме в Access.
Народ!
Нижайше прошу объяснить, почему не посоветовали вот так
(почти одна строка):

Me.подчиненная_форма.Form.Recordset.FindFirst strCriteria

Может быть, есть какая-то пакость?..
...
Рейтинг: 0 / 0
30.07.2003, 17:06
    #32222737
Владимир Саныч
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск данных на форме в Access.
Не в каждой версии Аксесса у формы есть Recordset.
...
Рейтинг: 0 / 0
30.07.2003, 19:21
    #32222997
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск данных на форме в Access.
посмотри
...
Рейтинг: 0 / 0
30.07.2003, 19:56
    #32223015
Hummer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск данных на форме в Access.
Я фильтром обычно пользуючь для таких целей.
Имеем табличную форму на некой форме с полем для ввода текста, по которому будем фильтровать, после набора жмём на кнопку с таким кодом.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
With Me![имя формы].Form
If Len([имя поля с фильтром]) >  0  Then
    .ServerFilter =  "Field1 LIKE '%" & [имя поля с фильтром] & "%'" 
Else
    .ServerFilter = ""
End If
.Requery
End With


Это в ХП аксессе при проекте adp. В мдб можно обращаться так же к свойству Filter (только % поменять на *).
...
Рейтинг: 0 / 0
30.07.2003, 21:31
    #32223066
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск данных на форме в Access.
а если тебе на до условиеА & условиеВ & условиеС &...

более качественный поиск/фильтр
...
Рейтинг: 0 / 0
31.07.2003, 09:07
    #32223211
Hummer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск данных на форме в Access.
Не уверен, что он более качественный, так как строка фильтра формируется так же как и Where. Это при условии, что набор записей уже есть (т.е. виден и в нём нужно что-то фильтровать).

Другой вопрос в том, что, организовать выборку данных можно по-другому, сначала сделать форму поиска (т.е. не фильтра существующего результата), потом вывод результатов и работа с ними, вот в такой форме поиска уже формируется where (делается цикл по всем контролам и берутся значения из заполненных).
...
Рейтинг: 0 / 0
31.07.2003, 09:44
    #32223239
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск данных на форме в Access.
не слишком ли сложно?
в предложеннном варианте при помощи Lik создается условие для WHERE
для поля со списком.
если отобранный набор устраивает - применяешь это условие для источника строк формы.
для формы оптимальный набор данных для отображения 50-60 записей.
предложенная функция позволяет это сделать.

у меня сначала формируется набор для поля со списком. оператор вводит сочетание - ентер - спок раскрываеися, если в списке слишком много - пробел добавляет 2-3 символа , так чтоб укоротить список -ентер
раскрывается список уже с новым , уменьшенным набором. как правило 5-9 строк . в этом уже можно и стрелками выбрать.
опкратор , по практике набирает сразу 2-3 условия и сразу спиок получается в 5-9 строк.
а уж для одно выбранной записи открвыается таблица.
очень удобно для названия фирм, товаров
...
Рейтинг: 0 / 0
31.07.2003, 09:59
    #32223263
Geo
Geo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск данных на форме в Access.
Давно уже делал, пока работает вроде:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
Private sSearch As String

Private Sub Form_KeyPress(KeyAscii As Integer)
  Dim rs As Recordset
  Dim sName As String
  Dim FieldType As Long
  Dim tsSearch As String
  
  If KeyAscii <  32  Then Exit Sub
  
  On Error Resume Next
  FieldType = Me.RecordsetClone.Fields(Me.ActiveControl.ControlSource).Type
  If Err.Number <>  0  Then Exit Sub ' Если нажата Esc, форма уже закрыта'
  On Error GoTo  0 
  
  If FieldType <> dbBigInt And _
     FieldType <> dbByte And _
     FieldType <> dbDecimal And _
     FieldType <> dbDouble And _
     FieldType <> dbFloat And _
     FieldType <> dbInteger And _
     FieldType <> dbLong And _
     FieldType <> dbNumeric And _
     FieldType <> dbSingle And _
     FieldType <> dbChar And _
     FieldType <> dbText Then ' Поиск по этому полю невозможен :)'
    Beep
    KeyAscii =  0 
    Exit Sub
  End If
  
  sName = Me.ActiveControl.Name
  
  If Me.OrderBy <> Me.ActiveControl.ControlSource Then sSearch =  ""
  If sSearch = "  " Then
    ' сортирую базу по текущему полю'
    Me.OrderBy = Me.ActiveControl.ControlSource
    Me.OrderByOn = True
    Me.Requery
  End If
  
  ' Возвращаюсь на то же поле'
  Me.Controls(sName).SetFocus
  
  ' Начинаю поиск записи'
  Set rs = Me.RecordsetClone
  If FieldType = dbBigInt Or _
     FieldType = dbByte Or _
     FieldType = dbDecimal Or _
     FieldType = dbDouble Or _
     FieldType = dbFloat Or _
     FieldType = dbInteger Or _
     FieldType = dbLong Or _
     FieldType = dbNumeric Or _
     FieldType = dbSingle Then ' Поиск ведется в числовом поле'
    If Not ((Chr(KeyAscii) >= "  0  " And Chr(KeyAscii) <= "  9  ") Or _
       Chr(KeyAscii) = " - " Or Chr(KeyAscii) = " . " Or Chr(KeyAscii) = " , ") Then
      KeyAscii = 0 
      Exit Sub ' Недопустимый для числа символ'
    End If
    If IIf(IsNull(InStr(sSearch, ". ")), False, InStr(sSearch, " . ") > 0 ) _
       And (Chr(KeyAscii) = ". " Or Chr(KeyAscii) = " , ") Then
      KeyAscii = 0 
      Exit Sub ' Уже есть точка'
    End If
    If Len(sSearch) >  0  And Chr(KeyAscii) = "- " Then
      KeyAscii = 0 
      Exit Sub ' Минус уже нельзя'
    End If
    If sSearch = "- " And (Chr(KeyAscii) = " . " Or Chr(KeyAscii) = " , ") Then
      sSearch = " - 0  "
    End If
  
    rs.FindFirst Me.ActiveControl.ControlSource & " >= " & sSearch & IIf(Chr(KeyAscii) = " , ", " . ", Chr(KeyAscii)) & IIf(sSearch = "  " And Chr(KeyAscii) = " - ", "  0  ", "  ")
    If Not rs.NoMatch Then
      tsSearch = sSearch
      Me.Bookmark = rs.Bookmark
      sSearch = tsSearch & UCase(Chr(KeyAscii))
      Me.ActiveControl.SelStart = 0 
      Me.ActiveControl.SelLength = Len(sSearch)
    End If
  
  End If
  
  If FieldType = dbChar Or _
     FieldType = dbText Then ' Поиск ведется в текстовом поле'
    rs.FindFirst Me.ActiveControl.ControlSource & ">='" & sSearch & UCase(Chr(KeyAscii)) & "'"
    If Not rs.NoMatch Then
      If Left(rs.Fields(Me.ActiveControl.ControlSource), Len(sSearch)) = sSearch Then
        tsSearch = sSearch
        Me.Bookmark = rs.Bookmark
        sSearch = tsSearch
        If UCase(Left(Me.ActiveControl, Len(sSearch) +  1 )) = _
          sSearch & UCase(Chr(KeyAscii)) Then
          sSearch = sSearch & UCase(Chr(KeyAscii))
        End If
        Me.ActiveControl.SelStart =  0 
        Me.ActiveControl.SelLength = Len(sSearch)
      End If
    End If
  End If
  
  KeyAscii =  0 
End Sub


ЗЫ. Несильно я вчера шумел тут? :)
...
Рейтинг: 0 / 0
31.07.2003, 10:06
    #32223280
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск данных на форме в Access.
а если UNICOD?
а если по нескольким условиям в одном поле?
...
Рейтинг: 0 / 0
31.07.2003, 10:07
    #32223282
Лох Позорный
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск данных на форме в Access.
2 Geo
С добрым утром
...
Рейтинг: 0 / 0
31.07.2003, 10:09
    #32223285
Geo
Geo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск данных на форме в Access.
2вадя
а если UNICOD?
а если по нескольким условиям в одном поле?
А фих знает. Доделать, опять же можно. Что было, то и дал. :)

2ЛП
С добрым :))
...
Рейтинг: 0 / 0
31.07.2003, 10:15
    #32223293
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск данных на форме в Access.
встретились два одиночества.....


помятые , но вежливые, почти ласковые, пушистые
...
Рейтинг: 0 / 0
31.07.2003, 10:47
    #32223350
progist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск данных на форме в Access.
повторюсь насче FilterBySelection и FilterExcludingSelection

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

Я ей предлагал похожие решения, (обсуждаемые здесь) и так и этак, готов был уже .... (короче реччь шла о сдаче проекта заказчику. А у нее муж программист на фоксе. Предлагал свое решение, но заказчик был умный, создал конкуренцию. От тетки зависело конечно многое.) И вот я плюнул на все формы ввода условий фильтра и показал ей эти самые встроенные фильтры, запускаемые нажатием мыши, да еще с сортировкой.
Foxist стоял рядом, пытался что-то возразить, так тетка (еще та) послала его подальше, сказала, что ей больше ничего не надо, и она хочет меня с аксесом :)
Так и пишу для них уже 3 года, причем уже на SQL 2K

Мораль: в интерфейсе аксеса уже есть все, что надо стандартному пользователю, а если нет - надо поискать получше - чаще это будет быстрее и эффективнее придуманного.
...
Рейтинг: 0 / 0
31.07.2003, 15:38
    #32223986
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск данных на форме в Access.
вся фишка в том, что набрать в одном поле(со списком ) (можно обозвать его поле с предварительным поиском) несколько условий хотя бы связанных по & (AND) . и преобразовать это в вид для WHERE , который подсунуть в качестве источника строк для этого же поля.
...
Рейтинг: 0 / 0
31.07.2003, 15:40
    #32223990
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поиск данных на форме в Access.
пришли какой-нибудь набор из чем больше тем лучше. сделаю демку попробуешь.
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Поиск данных на форме в Access. / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]