|
|
|
DoCmd.OpenForm c WhereCondition в ADP
|
|||
|---|---|---|---|
|
#18+
ADP (Access 2002,MSSQL2000) Наверное уже не раз проскакивало в форуме, но попытаюсь обобщить. В помощь себе и прочим переходящим на АДП, ибо в хелпе про это не нашел. Замечено что если вызывать метод DoCmd.OpenForm указывая аргумент условие (WhereCondition), то Access в зависимости от того в каком состоянии находилась форма до вызова действует достаточно нетривиально. Объясняю на примере поиска 1 записи. 1. Нач.Усл.:форма закрыта, свойство ServerFilter пустое. Результат вызова: в ServerFilter заностися WhereCondition и все ок! После закрытия формы свойство ServerFilter не сохраняется т.е. Н.У. не меняются. НО, как только во время разработки вы сохраните это свойство в режиме конструктора или сохранив макет во время выполнения, то начинаются проблемы а именно: Access начинает игнорировать аргумент WhereCondition, что не позволяет получить нужную запись методом DoCmd.OpenForm и приходится дополнительно устанавливать свойство ServerFilter и делать рефреш формы. Это грустно, особенно при открытии в режиме диалога :) Получается что перед отображением нужной записи Access запрашивает с сервера ненужные записи согласно старому фильтру. Выход – менять SQL у самого источника строк формы занося условие прямо туда. (Опять лишнее обращение к серверу) 2. Нач.Усл.:форма ОТКРЫТА, свойство ServerFilter не имеет значения Результат вызова: ServerFilter не меняется, а в Filter заностися WhereCondition и все Filter On=True. Короче все плохо. Выход проверять форму на открытость и менять ServerFilter программно и делать рефреш Вопрос: Какие у народа наработки в этом вопросе? Может я все усложняю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2005, 19:03:32 |
|
||
|
DoCmd.OpenForm c WhereCondition в ADP
|
|||
|---|---|---|---|
|
#18+
св-во InputParameters не пробовали использовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2005, 19:11:30 |
|
||
|
DoCmd.OpenForm c WhereCondition в ADP
|
|||
|---|---|---|---|
|
#18+
авторНО, как только во время разработки вы сохраните это свойство в режиме конструктора или сохранив макет во время выполнения, то начинаются проблемы Если не секрет, а зачем сохранять макет, и особенно работать в конструкторе и при этом изменять данные в форме? Достаточно отделить процесс разработки формы от тестирования работы и особенно от ввода данных. Т.е.: - режим конструктора - только исправление макета, сохранить закрыть - режим тестирования - только режим формы, только ввод данных, после завершения тестирования закрыть, открыть в режиме конструктора - режим реальной работы - только ADE никакие ServerFilter вообще не прицепятся ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2005, 19:12:42 |
|
||
|
DoCmd.OpenForm c WhereCondition в ADP
|
|||
|---|---|---|---|
|
#18+
2 incold Вах - как всё толково:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2005, 23:58:10 |
|
||
|
DoCmd.OpenForm c WhereCondition в ADP
|
|||
|---|---|---|---|
|
#18+
авторсв-во InputParameters не пробовали использовать?Честно - нет. У меня при разработке в mdb, сложился стиль открывать одну и туже форму с различными условиями отбора по разным полям из разных мест (форм, отчетов, просто из кода). Поэтому я не могу сослаться в InputParameters на элементы конкретной формы или даже задать точное колличество ? в источнике строк. Поэтому пока я меняю источник сток, "отправляя" ALTER VIEW с нужным условием на сервер перед запуском формы, мне это не нравится, но использовать OpenArgs для передачи условий в форму, с последующим использованием ServerFilter пока не делал. Сначала решил: "попрошу поделиться опытом, кто как выкручивается в похожих ситуациях?". авторЕсли не секрет, а зачем сохранять макет, и особенно работать в конструкторе и при этом изменять данные в форме? Достаточно отделить процесс разработки формы от тестирования работы и особенно от ввода данных. Т.е.: - режим конструктора - только исправление макета, сохранить закрыть - режим тестирования - только режим формы, только ввод данных, после завершения тестирования закрыть, открыть в режиме конструктора - режим реальной работы - только ADE никакие ServerFilter вообще не прицепятся Лирическое отступление: Access тем и хорош, что я на коленке могу налабать действующее приложение за 5 минут не задумываясь о стандартах програмирования. Жизнь не всегда можно вписать в стандарты. И утверждение о том что если сразу не делать правильно - потом себе дороже, не всегда верно. Иногда нужно нарушать и идти на осознанный риск. (даже в работающих приложениях Mde использую редко) В большинстве случаев код программы в Accees содержит открытие форм, отчетов с нужными условиями, работу с рекордсетами, обращение к элементам форм и обновление форм всякими рекверями. :) Когда знаешь, как правильно и эффективно реализовывать эти основы, разработка приложений увеличивается в разы. Я бы даже в фак добавил: стандарты (основы, приемы) программирования в Access в MDB и ADP. А то поиск возвращает иногда столько лишних ссылок, а в тех что надо зачастую бытуют прямо противоположные мнения. Понятно, что никто никому не обязан книги писать, но про счетчики же фак сочинили. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2005, 13:59:14 |
|
||
|
DoCmd.OpenForm c WhereCondition в ADP
|
|||
|---|---|---|---|
|
#18+
Поэтому пока я меняю источник сток, "отправляя" ALTER VIEW с нужным условием на сервер перед запуском формы ух ёёёё... я чуть со стула не упал. не проще ли RecordSource менять у формы в момент открытия??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2005, 14:23:16 |
|
||
|
DoCmd.OpenForm c WhereCondition в ADP
|
|||
|---|---|---|---|
|
#18+
КАК ВСЁ ЗАПУЩЕНО!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2005, 14:25:50 |
|
||
|
DoCmd.OpenForm c WhereCondition в ADP
|
|||
|---|---|---|---|
|
#18+
авторИ утверждение о том что если сразу не делать правильно - потом себе дороже, не всегда верно. Иногда нужно нарушать и идти на осознанный риск. В общем-то парвильно, но это до первого серьезного "облома" Про разработку есть другое утверждение: "Никогда нет времени сделать работу правильно, зато всегда находится время на переделку уже сделанного." авторКогда знаешь, как правильно и эффективно реализовывать эти основы, разработка приложений увеличивается в разы. Скорость разработки приложения выше - качество кода хуже, наличие ошибок и глюков больше. авторСначала решил: "попрошу поделиться опытом, кто как выкручивается в похожих ситуациях?". Что касается открытия форм с условием: уже подсказали - для ADP InputParameters Последний совет: перед началом перехода на ADP прочитать книжку о том, что такое клиент-сервер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2005, 14:51:54 |
|
||
|
DoCmd.OpenForm c WhereCondition в ADP
|
|||
|---|---|---|---|
|
#18+
2 incold Что касается открытия форм с условием: уже подсказали - для ADP InputParameters Ты невнимательно читаешь. Сказано же - разные условия по разным полям с параметрами из разных мест Если бы просто были параметры из разных мест - то можно было бы в InputParameters ссылаться на какую-нить глобальную пропертю, которую перед открытием формы нужным критерием инициализировать. Но если само условие отбора разный вид имеет, то придется либо усложнять вьюху на сервере, либо динамически формировать ее на клиенте. Лучше уж динамически формировать запрос на клиенте (только не через Alter View, конечно же ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2005, 15:01:14 |
|
||
|
DoCmd.OpenForm c WhereCondition в ADP
|
|||
|---|---|---|---|
|
#18+
З.Ы. А еще лучше, наверное, держать на сервере несколько заранее сконструированных вьюх с заранее известными параметрами, и динамически переключать форму с одной готовой вьюхи на другую. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2005, 15:03:14 |
|
||
|
DoCmd.OpenForm c WhereCondition в ADP
|
|||
|---|---|---|---|
|
#18+
Ну можно и динамический скл в хп использовать. А строку where туда передавать с клиента в отформаторованном виде. Ну имеет свои минусы конечно же:) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2005, 15:05:56 |
|
||
|
DoCmd.OpenForm c WhereCondition в ADP
|
|||
|---|---|---|---|
|
#18+
ЛПне проще ли RecordSource менять у формы в момент открытия???Возможно я так и сделаю, но тогда надо юзать OpenArgs (особенно при модальном открытии, а это лишний код), просто думал есть более элегантный и универсальный способ (а ля любимое WhereCondition в DoCmd.OpenForm, я даже думаю что разработчики банально не довели до ума метод DoCmd.OpenForm для Adp). авторНу можно и динамический скл в хп использовать. А строку where туда передавать с клиента в отформаторованном виде. Ну имеет свои минусы конечно же:)Да, кстати, и такую штуку пытались использовать. Но отказались из-за тех-же минусов :) авторКАК ВСЁ ЗАПУЩЕНО!!!Держимся, товарищи, пока только начало разработки. :) авторПоследний совет: перед началом перехода на ADP прочитать книжку о том, что такое клиент-сервер.Хороший совет. Наверно верится с трудом, но читал, и даже много штук (навероное не внимательно). авторЛучше уж динамически формировать запрос на клиенте (только не через Alter View, конечно же )А что в Alter View ужасного (кроме доп времени на выполнения Alter и разрушения сохраненного плана исполнения представления :) ). Зато плюс: имею форму и несколько вариантов отчетов на основе этого представления без доп строчек кода в них? А параметров действительно много (не говоря уж про возможные комбинации) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2005, 17:38:22 |
|
||
|
DoCmd.OpenForm c WhereCondition в ADP
|
|||
|---|---|---|---|
|
#18+
В особо запущеных случаях,когда надо по взрослому управлять формой обладающей некой универсальностью и меняющую вид изходя из контекста вызова я делаю так Оставляю RecordSourse пустым В форме делаю Public свойство в процедурах которого (SET,LET,GET) Делаю ЛЮБЫЕ черные дела Public Property Let ID_Val(ByVal ID_Value As Long) cnn.Execute "dbo.InC_InsTmp_p " & ID_Value Me.InputParameters = "@ID int=" & ID_Value Me.RecordSource = "dbo.InC_Vvod_p" ' можно канешна и так "exec dbo.InC_Vvod_p " & ID_Value Me.Visible = True End Property ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2005, 18:09:02 |
|
||
|
|

start [/forum/topic.php?fid=45&msg=32865287&tid=1669301]: |
0ms |
get settings: |
6ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
40ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
31ms |
get tp. blocked users: |
1ms |
| others: | 226ms |
| total: | 327ms |

| 0 / 0 |
