powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как сохранить пользовательские сортировки?
27 сообщений из 27, показаны все 2 страниц
Как сохранить пользовательские сортировки?
    #32432226
Фотография Latuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ADP, но открываю ленточную форму на основе DAORecordset-а
из локальной mdb таблицы (хотя это в общем на суть вопроса не влияет)

Пользователь делает на форме всякие сортировки и фильтры,
по ходу иногда приходится затягивать Recordset заново,
но хочется чтобы фильтры и сортировки,
которые наделал пользователь сохранялись.
С фильтром просто сохранил - применил заново.
А как быть с сортировкой?
...
Рейтинг: 0 / 0
Как сохранить пользовательские сортировки?
    #32432249
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что мешает сортировку сохранить?
...
Рейтинг: 0 / 0
Как сохранить пользовательские сортировки?
    #32432253
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
совершенно тоже самое
очень удобственно хранить в реестре - хранится отдельно для каждого юзера,
можно хранить для каждой формы отдельно

смотри savesetting

а зачем тебе MDB ?????

чем - то не устраивают временные пользовательские таблицы на сервере, видимые только из текущего коннекта?
...
Рейтинг: 0 / 0
Как сохранить пользовательские сортировки?
    #32432307
Фотография Latuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>А что мешает сортировку сохранить?
Мжно конкретный код?
типа

Сохранение сортировок
рекверя
востанавление сортировок

Я потому и спрашиваю , что лень выдумывать то,
что люди уже делали.

>а зачем тебе MDB ?????
ГлавногоЮзера начальник у которого клиент MDB-й
приучил самому вытаскивать инфу из формы
множественными сортировками и фильтрами

Клиентские сортировки на ADORecordset работают ЗНАЧИТЕЛЬНО медленнее
+ проблеммы с вычислением агрегирующих полей в примечании
(чтобы на них влияли клиентские фильтры надо мутить отдельный код,
где больше всего меня бесит несоответствие синтаксиса фильтра рекодсета
формы и стандартного ADOrecordset-а)
А так три строчки извращенного кода и форма сидит на DAORecordset-е
где все вычисляется само и работает мгновенно
т.к. основана на временном MDB-ке
лежащем локально на компе.
...
Рейтинг: 0 / 0
Как сохранить пользовательские сортировки?
    #32432331
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
заменяешь в своем коде
Me.Filter
Me.FilterOn

Me.OrderBy
Me.OrderByOn
...
Рейтинг: 0 / 0
Как сохранить пользовательские сортировки?
    #32432334
Фотография Лох Позорный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что нибудь типа такого
Код: plaintext
1.
2.
3.
4.
strOrderBy = Me.OrderBy
blnOrderByOn = Me.OrderByOn
Me.Requery
Me.OrderBy = strOrderBy
Me.OrderByOn = blnOrderByOn


Если надо совсем сохранять - то в реестр чеши/питай
Код: plaintext
1.
SaveSetting  "Прога Latuk'а", Me.Name, "OrderBy", Me.OrderBy
SaveSetting "Прога Latuk'а" , Me.Name,  "OrderByOn" , Me.OrderByOn
...
Рейтинг: 0 / 0
Как сохранить пользовательские сортировки?
    #32432354
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторКлиентские сортировки на ADORecordset работают ЗНАЧИТЕЛЬНО медленнее
+ проблеммы с вычислением агрегирующих полей в примечании

никогда не замечал тормозов... может проблема в вычислении итоговых значений как агрегатов в примечании ??? - так в адп делать неприемлемо.

для вычисления агрегатов можно программно :
1. вычислять значение и выводить его в текстбокс
2. вычислять по фильтру формы условие отбора и заменять его в источнике данных листбокса (можно несколько разных сумм в один контрол)
а) в несколько столбцов - подписи сверху
б) в несколько строк - select с именами параметров и их значениями
3. применять фильтр формы на клон рекордсета и вычислять в нем

а в твоем способе будут проблемы если пользователь захочет изменять данные
- синхронизация данных введенных пользователем и данными которые за время его работы в мдб изменили другие пользователи на сервере.
...
Рейтинг: 0 / 0
Как сохранить пользовательские сортировки?
    #32432486
Фотография Latuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>вычислять по фильтру формы условие отбора
>а) в несколько столбцов - подписи сверху
>б) в несколько строк - select с именами параметров и их значениями
представляеш сколько доп кода?
+инерция пользователей привыкших к MDB.
>3. применять фильтр формы на клон рекордсета и вычислять в нем
сам то пробывал?
Как насчет того что у них синтаксис разный?
>- синхронизация данных введенных пользователем и данными которые за
>время его работы в мдб изменили другие пользователи на сервере.
Тогда надо открыть DAORecordset на основе МВВ запроса к серверу
будет чуть медленнее чем на временной таблице,
но кстати быстрее чем через ADO(проверял)

Проходил я все это запарился.
Потом IgorM посоветовал путь с временным MDB.
Написал три строчки-Все работает
Я согласен что это извращение,
но результат достигнут и очень легко.
Применяю его на форме где тыкает СмыйГлавныйЮзер привыкший к MDB
с которым спорить себе дороже.

2ЛП
То что я хотел :)
...
Рейтинг: 0 / 0
Как сохранить пользовательские сортировки?
    #32432672
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор>вычислять по фильтру формы условие отбора
>а) в несколько столбцов - подписи сверху
>б) в несколько строк - select с именами параметров и их значениями
представляеш сколько доп кода?
а что мне представлять? у меня так много где сделано. совсем немного кода.

автор+инерция пользователей привыкших к MDB.
а для пользователя все совершенно одинаково выглядит форма как форма - он же не делает ревизию кода ...

автор>3. применять фильтр формы на клон рекордсета и вычислять в нем
сам то пробывал?

так не делал, всегда генерю запрос возвращающий одно суммовое значение или список суммовых значений и потом их помещаю в контролы,

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

авторКак насчет того что у них синтаксис разный?

а то что разное заменяем реплейсом а заменить там надо имя формы с точкой на ""


автор>- синхронизация данных введенных пользователем и данными которые за
>время его работы в мдб изменили другие пользователи на сервере.
Тогда надо открыть DAORecordset на основе МВВ запроса к серверу
будет чуть медленнее чем на временной таблице,
но кстати быстрее чем через ADO(проверял)

гы, всякое видел , но такого....

Кстати сейчас, и твой топик еще раз мне напомнил о моей задумке, хочу добить вопрос почему при присвоению рекордсета отчету в нем та же лажа что и с формой -в плане функций группировки.

в чем прелесть рекордсета который создает сам отчет на основе recordsource? и как сделать такой же для формы.

сижу, сравниваю параметры, пока ничего не помогает
...
Рейтинг: 0 / 0
Как сохранить пользовательские сортировки?
    #32432700
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потом IgorM посоветовал путь с временным MDB.
Написал три строчки-Все работает
Я согласен что это извращение

Ну почему же извращение? Тогда я тоже извращенец - у меня к адп прицеплен мдб с единственной табличкой настроек. Сама таблица сделана по "деревянной" структуре и по ней строится дерево настроек проги (не все настройки, а только имеющие опреденный признак). В итоге: удобство хранения и скрытых и открытых для юзеров настроек, приятный интерфейс их изменения.
В момент запуска проги создается клиентский отсоединеный паблик рекодсет, по полям ID делаю Properties("Optimize") = True (типа локальный индекс создаю) - ищется быстро и на ура.

еще как вариант хранить специфичные настройки в свойствах самой формы, но тогда при обновлении проги они похерятся.
...
Рейтинг: 0 / 0
Как сохранить пользовательские сортировки?
    #32432734
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЭХ... понесло меня ))

2 Senin Viktor

иногда меня люди просто удивляют, иногда смешат.
в в твоем случае - просто нет слов, хотя понимаю что как правило что многие решения просто наследство старых решений...

как насчет хранить настройки на сервере в одной таблице в которой каждому пользователю дать уникальный код а его брать из реестра??

все настройки можно будет вытащить запросом SELECT * FROM настройки Where Код = <Код пользователя из реестра>
...
Рейтинг: 0 / 0
Как сохранить пользовательские сортировки?
    #32432755
incold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторкак насчет хранить настройки на сервере в одной таблице в которой каждому пользователю дать уникальный код а его брать из реестра??

В общем-то согласен.
Вот только причем здесь реестр?
Каждый пользователь при входе на сервер (ведь речь идет об ADP+SQL) и так известен.
...
Рейтинг: 0 / 0
Как сохранить пользовательские сортировки?
    #32432758
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 ALL
Полностью согласен с АлексейК - ну нафига использовать мдб файла в адп проектах? Всё можно решить на сервере, путём ини файлов, реестар (хотя последнее мне не очень нравится - например, пользователь крайне ограничен в правах на своей машине).


АлексейК так не делал, всегда генерю запрос возвращающий одно суммовое значение или список суммовых значений и потом их помещаю в контролы

Вот абсолютно верное решение для вычисления итогов и не нужны никакие рекордсеты. Больше того, можно написать ОДИН раз хранимую в качестве параметров которой выступит таблица и столбцы для суммирования....
...
Рейтинг: 0 / 0
Как сохранить пользовательские сортировки?
    #32432796
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Incod

авторКаждый пользователь при входе на сервер (ведь речь идет об ADP+SQL) и так известен

вобщем то да но и нет одновременно :

1 не всегда под одним логином работает один человек
2 не всегда с одного компа работает один человек (несколько профилей)

2 Hummer

Хоть кто то меня поддерживает, а то все спорят , я так и в депрессию могу впасть ))


А никто не знает прогу -шпиончика для адо ?
хочу посмотреть как в ADP отчет формирует рекордсет
...
Рейтинг: 0 / 0
Как сохранить пользовательские сортировки?
    #32432835
incold
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторвобщем то да но и нет одновременно :

1 не всегда под одним логином работает один человек
2 не всегда с одного компа работает один человек (несколько профилей)

2 Hummer

Хоть кто то меня поддерживает, а то все спорят , я так и в депрессию могу впасть ))

Сначала о хорошем - я тоже во всем согласен (кроме реестра)

Теперь о плохом...имхо
1 - если под одним логином работает несколько человек - это проблемы с политикой безопасности.
2 - даже если с одного компа работает весь офис - есть такая вещь как завершение сеанса и вход под своим логином.

Т.е. при нормальной организации политики безопасности - логин юзера и есть тот уникальный код, который ты предлагаешь хранить в реестре.
...
Рейтинг: 0 / 0
Как сохранить пользовательские сортировки?
    #32432844
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все умные - один я дурак :)

2АлексейК
как насчет хранить настройки на сервере в одной таблице в которой каждому пользователю дать уникальный код а его брать из реестра??

SELECT * FROM настройки Where Код = <Код пользователя из реестра>

Настройки хранятся на сервере - но только как эталонные, и в момент создания нового юзера, в момент первой попытки обращения к локальной таблице (которая пока пустая или не полная) копируются эталонные записи.

На счет - дать код юзверю - дык я зае%%%сь кода раздовать - это надо дать код, размножить эталонные записи для этого кода юзверя - триггером на системную таблицу не повесишь (момент добавления нового юзверя) - прийдется извращаться через что-то. А меня моя прога в будущем разъедется по всем филалам СНГ (Челябинск, Киев, Казахстан) - а если учесть, что на некоторых предприятиях даже нормального инета нет и прогеров и любовь руководства к командировкам ... нет уж. Хотя и извратнуться можно элементароно - нет юзера - занчит размножаем записи и отдаем ему, НО настройки в некотрых местах используються ну очень даже активно - сотни запросов к серверу, сотни записей на сервер, когда 1 раз обновил и спокойно юзаешь, не тревожа сервер.


А никто не знает прогу -шпиончика для адо ?
хочу посмотреть как в ADP отчет формирует рекордсет

Profiler

2Hummer
ну нафига использовать мдб файла в адп проектах?
Хорошо поговорить с людьми, знающими специфику твоей работы, лучше чем я сам :)
...
Рейтинг: 0 / 0
Как сохранить пользовательские сортировки?
    #32432852
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторТ.е. при нормальной организации политики безопасности - логин юзера и есть тот уникальный код, который ты предлагаешь хранить в реестре.

видимо так, или логин + идентификатор приложения чьи настройки


а что касается политики безопасности то в небольших базах данных не всегда есть нужда задействовать роли - иногда достаточно одного логина для группы операторов выполняющих сходные функции, поэтому и высказал мнение про параметр в реестре
...
Рейтинг: 0 / 0
Как сохранить пользовательские сортировки?
    #32432860
Фотография Latuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>а то что разное заменяем реплейсом а заменить там надо имя формы с точкой на ""
ты просто не копал дальше.
Там еще много сюрпризов (взять хотя-бы Like<=>ALike,%<=>*)
для полноценной работы придется писать целый транслятор.
>совсем немного кода.
Уверен,что больше трех строк.
...
Рейтинг: 0 / 0
Как сохранить пользовательские сортировки?
    #32432872
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Senin Viktor
боже упаси мне умалять чьи либо достоинства.
совсем не собирался говорить обидные слова.

что касается удобства то :
самая близкая дорога - та которую лучше всего знаешь ...


А профилер мне не подойдет
я хочу смотреть опции устанавливаемые при вызове библиотеки ADO на локальном компьютере а не запросы , которые она шлет серверу (или я чего не понимаю?)

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

Auto Recalc DBPROP_ADC_AUTORECALC
...
Рейтинг: 0 / 0
Как сохранить пользовательские сортировки?
    #32432883
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2АлексейК
боже упаси мне умалять чьи либо достоинства.
совсем не собирался говорить обидные слова.

Где ты увидел АбыДные слова, я же смалик поставил :)
...
Рейтинг: 0 / 0
Как сохранить пользовательские сортировки?
    #32432898
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Latuk
Latuk Там еще много сюрпризов (взять хотя-бы Like<=>ALike,%<=>*)
для полноценной работы придется писать целый транслятор.

вобщем то да, но только написать его нужно только один раз, даже где -то был готовый, но найти не могу.

2 Senin Viktor
а я на всякий случай извенился, чтоб не обидеть хорошего человека. ))
...
Рейтинг: 0 / 0
Как сохранить пользовательские сортировки?
    #32432935
Hummer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Senin Viktor
Senin ViktorХорошо поговорить с людьми, знающими специфику твоей работы, лучше чем я сам :)

Да никто лучше и не знает:) Просто мы не используем:) Не знаю, по мне лучше инишник чем мдб (сугубо мой мнение).
...
Рейтинг: 0 / 0
Как сохранить пользовательские сортировки?
    #32432942
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а я на всякий случай извенился, чтоб не обидеть хорошего человека. ))

Чувствуется в тебе классный программист - даже в беседе проводишь обработку возможных ошибок
...
Рейтинг: 0 / 0
Как сохранить пользовательские сортировки?
    #32432948
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Hummer
по мне лучше инишник чем мдб (сугубо мой мнение).

Из-за молодости - с ini-файлами никогда не работал, а так же не хотелось бы выдумывать новую процедуру для заполнения TreeView
...
Рейтинг: 0 / 0
Как сохранить пользовательские сортировки?
    #32433246
Фотография Latuk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>но только написать его нужно только один раз, даже где -то был готовый
Если есть хотелосьбы поиметь (самому писать влом и так все работает
да и сам факт бесит - зачем было делать разный синтаксис у фильтров?)
...
Рейтинг: 0 / 0
Как сохранить пользовательские сортировки?
    #32434243
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Виктор авторпрограммист - даже в беседе проводишь обработку возможных ошибок
и смех и грех, тяжело по жизни (в общении) когда думаешь на VB и TSQL, не поверишь даже сны снятся в рамках контроля целостности данных ))


2 ALL
Затронутая проблема не давала мне спокойно жить все празники и вот к чему я пришел.

1. при запуске ACCESS 2003 есть нудное предостережение, что не установив
JET SP8 будут проблемы с фильтрами. Я несказанно обрадовался и стал качать с надеждой что замена ядра может поможет и ACCESS 2002 - фиг не помогает.
(вариант с акксесс 2003 буду тестить сегодня)

2. Решил что если программно заменять клиентский фильтр на серверный то проблем с суммовыми полями быть не должно да и скорость не должна упасть

Вот что получилось:
ADP, ACCESS 2002
замена клиентского фильтра на серверный:

Код: plaintext
1.
2.
3.
4.
5.
'в форму на событие применение фильтра (если фильтры сохраняются то и на загрузку)'


Private Sub Form_ApplyFilter(Cancel As Integer, ApplyType As Integer)
Call SET_serverfilter(Me)
End Sub



Код: 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.
'В общий модуль'
Option Compare Database

Public Sub SET_ServerFilter(ByRef FRM As Form)
Echo False

Dim SF As String
SF = FRM.Filter

If SF =  "" Or FRM.FilterOn = False Then              ''" 
    FRM.ServerFilter =  ""                                   ''"        
    FRM.RecordSource = FRM.RecordSource
    Echo True
    Exit Sub
End If

SF = Replace(FRM.Filter, Chr( 34 ),  "'", , , vbTextCompare)                            
'не стал заморачиваться с незаменой кавычек и ALIKE внутри других кавычек,   но думаю что для начала и так сгодится " 
SF = Replace(SF,  " ALike " ,  " Like " , , , vbTextCompare)
'В Аксесс 2003 исправлена эта ошибка - там ставится имя таблицы '
If Access.Version <>  "11 . 0 " Then SF = Replace(SF, FRM.Name &  "." ,  "", , , vbTextCompare)


If Trim(FRM.ServerFilter) = "  " Or IsNull(FRM.ServerFilter) Then
    FRM.ServerFilter = SF
Else
    FRM.ServerFilter = FRM.ServerFilter & "  AND  " & SF
End If
FRM.Filter = " "
FRM.RecordSource = FRM.RecordSource
Echo True
End Sub


проверено и работает при источнике данных таблице, SQL строке, представлении
не будет работать с хр.процедурой

В таком варианте работают суммовые поля при использовании фильтров.
для оценке скорости брал таблицу с 300 000 записей - я считаю что это много для вывода в форму скорость до 2 сек.
...
Рейтинг: 0 / 0
Как сохранить пользовательские сортировки?
    #32434301
Фотография АлексейК
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
самоисправляюсь:

Код: plaintext
1.
[SRC]'В Аксесс 2003 исправлена эта ошибка - там ставится имя таблицы '
If Access.Version <>  "11 . 0 " Then SF = Replace(SF, FRM.Name &  "." , "", , , vbTextCompare)


заблуждался будет правильно так

'В общий модуль'
Option Compare Database

Public Sub SET_ServerFilter(ByRef FRM As Form)
Echo False

Dim SF As String
SF = FRM.Filter

If SF = "" Or FRM.FilterOn = False Then ''"
FRM.ServerFilter = "" ''"
FRM.RecordSource = FRM.RecordSource
Echo True
Exit Sub
End If

SF = Replace(FRM.Filter, Chr(34), "'", , , vbTextCompare)
'не стал заморачиваться с незаменой кавычек и ALIKE внутри других кавычек, но думаю что для начала и так сгодится "
SF = Replace(SF, " ALike ", " Like ", , , vbTextCompare)
'Если в источнике данных не имя объекта а SQL строка то'
If frm.recordsource like "*SELECT*" Then SF = Replace(SF, FRM.Name & ".", "", , , vbTextCompare)


If Trim(FRM.ServerFilter) = "" Or IsNull(FRM.ServerFilter) Then
FRM.ServerFilter = SF
Else
FRM.ServerFilter = FRM.ServerFilter & " AND " & SF
End If
FRM.Filter = ""
FRM.RecordSource = FRM.RecordSource
Echo True
End Sub[/SRC]
...
Рейтинг: 0 / 0
27 сообщений из 27, показаны все 2 страниц
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как сохранить пользовательские сортировки?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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