LEADERSOFT.ru Разработка на заказ программ и сайтов
Форумы по информационным технологиям
 
Регистрация  |  Вход
left
Форумы Минимизировать
ПоискСписок форумов
  Программирование  Microsoft Access. Файлы mdb и accdb  Тема: Поиск нао...
 Тема: Поиск наоборот, помогите!
 
 15.06.2007 21:04:16
Vlad
7 сообщения


Тема: Поиск наоборот, помогите!
Доброго времени суток!
Есть проблема... Необходимо отбирать записи в главной форме по нескольким записям в подчиненной форме, формируя для основной формы фильтр. Обе формы (главная и основная) являются табличными и вставлены в нейтральную форму ПОИСК.
У меня идея такова, что необходимо создавать временную таблицу, куда добавлять записи, удовлетворяющие критериям поиска, а затем из этой таблицы формировать "фильтр + AND" для основной табличной формы и применять его столько раз, сколько записей, удовлетв. условию, найдено, но это как-то коряво, да и быстродействие страдает...
Господа ГУРУ, подскажите начинающему решение!
Заранее СПАСИБО!


P.S. Поиск в формах
Автор: Влад от 25.06.2003 3:14:20 Источник ...
 15.06.2007 21:04:16
N_A
31 сообщения


RE: Поиск наоборот, помогите!
Не хватает подробностей для более точного ответа, но с большой вероятностью могу сказать, что можно обойтись без временных таблиц (они заставляют базу быстро «жиреть»). Не понятно какого рода условия (выбор по типа кодизтабл1=кодизтабл2 или куча разнородных условий, или ещё чо)
От этого зависит решение проблемы...

Общие идеи:
1 вариант. В процедуре отвечающей за фильтрацию программно формируете (и меняете) источник строк (включая условие отбора) для "главной?" формы, анализируя записи в подчинённой.

2 вариант. В некоторых случаях выручает условия типа
"WHERE t1.id1 In (select id2 From t2);"
(читай справку по "In" в запросах)

3 вариант. Использование пользовательской функции в условии отбора.
Детали:
Условие отбора в главной форме вида:
"WHERE GetSelectID(tableName.id)=True;"
где GetSelectID - функция в глоб.модуле
которая возвращает "Да" если уник.код записи (значение аргумента) следует включить в резузлтируюший набор записей.
Короче создаешь глобальный динамический массив типа long и функцию, которая вернет «да» если аргумент есть в массиве и «нет» если нет:)
Public MasId() As Long

Public Function GetSelectID(id As Long) As Boolean
Dim i As Long
Dim l As Long
On Error GoTo err_GetSelectID
l = UBound(MasId)
For i = 1 To l
If MasId(i) = id Then
GetSelectID = True
Exit Function
End If
Next i
err_GetSelectID:
GetSelectID = False
End Function

В процедуре фильтрации заполняешь его (массив MasId) нужными кодами записей.

Private Sub kn_Find_Click()
Dim l As Long, i As Long
Dim stDocName As String
l=число кодов которые нужно выбрать
ReDim MasId(l)
For i = 0 To l-1
MasId(i) =нужные коды (i)
Next i
...код обновления главной формы (реквери всякие:)
End Sub

Если чо не понятно, давай подробности (относящиеся к проблеме).



P.S. Поиск в формах
Автор: N_A от 25.06.2003 12:14:11 Источник ...
  Программирование  Microsoft Access. Файлы mdb и accdb  Тема: Поиск нао...
ПоискПоиск  Список форумовСписок форумов  
right