Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Фильтрация в подчиненной форме / 10 сообщений из 10, страница 1 из 1
24.01.2005, 14:59:48
    #32880249
roman10
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фильтрация в подчиненной форме
Ситуация такая (AC2000, проект ADP):

есть форма master-detail. С помощью контролов в главной форме пользователь может накладывать на подчиненную фильтры. Например так:

Внедренный1.Form.Filter = "fk_section = " & edSection
Внедренный1.Form.FilterOn = True

Все хорошо работает, но только если свойство "Источник записей" подчиненной формы указывает непосредсвенно на таблицу. А вот если вместо нее указать SQL запрос (пусть даже SELECT * FROM), то все отваливается. Пишет "Возникла ошибка при обращении к свойству или методу объекта OLE.".
Также скажу, что в MDB такой код работал прекрасно. В чем тут может быть проблема?

И раз такое дело, в догонку еще один вопрос. Раз уж он пишет "при обращении к свойству или методу объекта OLE", то как можно узнать что это за объект и каков код ошибки. В данной ситуации я думаю, что имеется ввиду объект ADO, но вот коллекция CurrentProject.Connection.Errors подозрительно пуста...

Буду признателен за помощь.
...
Рейтинг: 0 / 0
24.01.2005, 15:09:09
    #32880290
Proga
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фильтрация в подчиненной форме
МОЖЕТ глюки с индексами, хотя не факт. Но всё равно проверь.
...
Рейтинг: 0 / 0
24.01.2005, 15:12:00
    #32880302
Программист-Любитель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фильтрация в подчиненной форме
Я с такой ошибкой не сталкивался, потому что люблю делать по-другому. Обычно "управляющих" контролов на форме много, да они все разные. Но все влияют на представление данных в подчиненной. Я формирую строку select, а конкретно ее чать where ручками, постепенно склеивая нужные условия. А потом сажаю подчиненную форму на новый Recordsource.

У вас сказано, что имеют место мастер-деталь формы. Тогда еще можно загнать условия отбора в LinkChild/MasterFields.

Вот, прямо не ответил, но два пути обхода подсказал. Может, пригодится...
...
Рейтинг: 0 / 0
24.01.2005, 15:51:23
    #32880448
roman10
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фильтрация в подчиненной форме
ProgaМОЖЕТ глюки с индексами, хотя не факт. Но всё равно проверьХм... а какие возможны глюки с индексами?

Программист-ЛюбительЯ с такой ошибкой не сталкивался, потому что люблю делать по-другому. Обычно "управляющих" контролов на форме много, да они все разные. Но все влияют на представление данных в подчиненной. Я формирую строку select, а конкретно ее чать where ручками, постепенно склеивая нужные условия. А потом сажаю подчиненную форму на новый Recordsource.Спасибо за рекомендацию. Просто это не совсем "честный" способ :). Я хотел бы использовать локальный фильтр, чтобы поменьше гонять данные по сетке. Но все идет к тому, что придется сделать именно так.

Программист-ЛюбительТогда еще можно загнать условия отбора в LinkChild/MasterFields.Попробовал. Появлявляются такие глюки.... на словах не объяснишь... короче в полях формы и починенной формы появляется полная чепуха. Очевидно, я что-то делаю не так, но вот как правильно, не понятно.
...
Рейтинг: 0 / 0
24.01.2005, 15:55:38
    #32880458
Proga
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фильтрация в подчиненной форме
Например 2 PK, или повторяющееся поле на ключе ну и т.д.
...
Рейтинг: 0 / 0
24.01.2005, 16:08:22
    #32880503
ЛП
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фильтрация в подчиненной форме
roman10Я хотел бы использовать локальный фильтр, чтобы поменьше гонять данные по сетке.
А вы уверены, что они не гоняются при использовании св-ва Filter?
...
Рейтинг: 0 / 0
24.01.2005, 16:22:24
    #32880552
Программист-Любитель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фильтрация в подчиненной форме
Сочинение строки WHERE отбирает с сервера только те данные, которые подпадают в ваше условие. В случае разных фильтров это неявно делается аксессом.
...
Рейтинг: 0 / 0
24.01.2005, 17:14:46
    #32880727
roman10
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фильтрация в подчиненной форме
ЛПА вы уверены, что они не гоняются при использовании св-ва Filter?Уже нет... :) Хотя вот у Гетца, 2-й том написано, что "... сугубо локальная клиентская технлогия, не предусматривающего никакого взаимодейсвтия с сервером".

На самом деле я проблему уже решил. Нужный мне SQL запрос я просто оформил в виде view, и уже его указал в качестве источника записей подчиненной формы. Вероятно, некие высокие моральные соображения не позволяют Акцессу фильтровать рекордсет, если он получен явным указанием текста запроса. Будемь знать :).

Больше спасибо всем откликнувшимся на мой пост.
...
Рейтинг: 0 / 0
24.01.2005, 17:18:14
    #32880745
Программист-Любитель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фильтрация в подчиненной форме
автор
Уже нет... :) Хотя вот у Гетца, 2-й том написано, что "... сугубо локальная клиентская технлогия, не предусматривающего никакого взаимодейсвтия с сервером".


Из чего следует вывод, что даже при жестком Filter с сервера будут утянуты все записи ?
...
Рейтинг: 0 / 0
24.01.2005, 17:35:29
    #32880828
ЛП
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Фильтрация в подчиненной форме
Программист-Любитель автор
Уже нет... :) Хотя вот у Гетца, 2-й том написано, что "... сугубо локальная клиентская технлогия, не предусматривающего никакого взаимодейсвтия с сервером".


Из чего следует вывод, что даже при жестком Filter с сервера будут утянуты все записи ?
Это же не серверный фильтр (Form.ServerFilter)
Раз фильтр локальный - то и фильтруется локально. А с сервера идет все подряд.

-------------------------------

Кстати, я вот тут сижу и ради интереса пытаюсь от этого избавиться.
Мыслил я, что если повесить форму на отсоединенный рекордсет - то он не будет к серверу обращаться. Хрена лысого.
Имею код:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Option Compare Database
Option Explicit

Private Sub Command4_Click()
    Me.Filter = Nz(Me!fltr.Value, "")
    Me.FilterOn = True
End Sub

Private Sub Form_Open(Cancel As Integer)
    Dim cnn As ADODB.Connection
    Set cnn = New ADODB.Connection
    cnn.Open "тута коннекшн"

    Dim rst As ADODB.Recordset
    Set rst = New ADODB.Recordset
    rst.CursorLocation = adUseClient ' на всякий случай
    rst.Open "select * from t", cnn, adOpenStatic, adLockReadOnly
    Set rst.ActiveConnection = Nothing

    cnn.Close ' тож на всякий случай

    Set Me.Recordset = rst
End Sub
На каждое нажатие кнопки - имею результат работы профайлера:
профайлерselect * from t
select * from t
EXEC sp_MShelpcolumns N't', NULL, N'id', 1

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

Аксес 2003 SP1, MS SQL 2000 SP3a
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Фильтрация в подчиненной форме / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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