|
Обновляемое представление и грид
|
|||
---|---|---|---|
#18+
Всем привет! Мучаюсь с представлением и гридом. Есть обновляемое программно созданное View vUsl. Create sql View vUsl as SELECT Proba.reg_nom, Proba.reg_data, Proba.k_usl, Usl_new.n_usl,; Proba.k_kont, Proba.nom_ds, Mkb10.ds, Proba.k_lpu, Lpu.lpu, Proba.k_mani,; Mani.n_mani, Proba.k_vrach, Vrach_podp.fio_rus, Proba.k_mat, Mater.n_mater,; Proba.nom_prob, Proba.udal, proba.dat_vvod, user_t.id_user, proba.tab_n, proba.nomer; FROM immun_labr!pazient INNER JOIN immun_labr!proba ON Pazient.nomer = Proba.nomer ; INNER JOIN immun_labr!usl_new ON Proba.k_usl = Usl_new.k_usl ; INNER JOIN immun_labr!lpu ON Proba.k_lpu = Lpu.k_lpu; INNER JOIN immun_labr!mani ON Proba.k_mani = Mani.k_mani; INNER JOIN immun_labr!mater ON Proba.k_mat = Mater.k_mater; INNER JOIN immun_labr!mkb10 ON Proba.nom_ds = Mkb10.nom_ds; INNER JOIN immun_labr!vrach_podp ON Proba.k_vrach = Vrach_podp.fio_doc_nomer; INNER JOIN user_t ON Proba.tab_n = user_t.tab_n; INNER JOIN immun_labr!mani ON Proba.k_mani = Mani.k_mani DISTINCT ORDER BY reg_nom = DbSetProp('vUsl', 'View', 'Tables', 'Proba') = DbSetProp('vUsl', 'View', 'SendUpdates', .t.) = DbSetProp('vUsl.reg_nom', 'Field', 'KeyField', .t.) = DbSetProp('vUsl.reg_nom', 'Field', 'Updatable', .f.) = DbSetProp('vUsl.reg_nom', 'Field', 'UpdateName', 'proba.reg_nom') = DbSetProp('vUsl.k_lpu', 'Field', 'KeyField', .f.) = DbSetProp('vUsl.k_lpu', 'Field', 'UpdateName', 'proba.k_lpu') = DbSetProp('vUsl.k_lpu', 'Field', 'Updatable', .t.) = DbSetProp('vUsl.k_kont', 'Field', 'KeyField', .f.) = DbSetProp('vUsl.k_kont', 'Field', 'UpdateName', 'proba.k_kont') = DbSetProp('vUsl.k_kont', 'Field', 'Updatable', .t.) и т.д. Т.е. описываются все обновляемые поля. Есть форма, на которой отображаются поля из представления и грид. 1. Когда меняю значение в поле на форме, то вообще ничего не меняется, хотя проверила все ControlSource (vusl.k_lpu, vusl.k_mani....). До этого у меня источником была таблица proba (ControlSource proba.k_lpu, proba.k_mani...), и все работало. 2. Когда меняю значение поля в грид, оно меняется, но только если сначала убираю фокус с грида, а потом делаю requery('vusl'), затем refresh формы. Но после этого курсор верх-вниз по этому полю в грид не бегает, как будто блокирован на одной записи. Делала REQUERY('vUsl') в методе AfterRowColChange, то блокируются все столбцы, т.е. можно перемещаться только по строке. Может это глюк грида? 3. Как сделать, чтобы представление при каждом входе в форму создавалось снова. Удалять его совсем? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2008, 10:18 |
|
Обновляемое представление и грид
|
|||
---|---|---|---|
#18+
АленаШ -хорошую тему затронули я посмотрел ближаюшую свою программу и там увидел: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2008, 11:33 |
|
Обновляемое представление и грид
|
|||
---|---|---|---|
#18+
АленаШ 3. Как сделать, чтобы представление при каждом входе в форму создавалось снова. Удалять его совсем? Не понятен вопрос,если представление включено в DataEnv.. формы то оно обязательно откроется при входе в форму если предварительно заданы параметры этого представл,. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2008, 11:52 |
|
Обновляемое представление и грид
|
|||
---|---|---|---|
#18+
АленаШ Есть форма, на которой отображаются поля из представления и грид. 1. Когда меняю значение в поле на форме, то вообще ничего не меняется, хотя проверила все ControlSource (vusl.k_lpu, vusl.k_mani....). До этого у меня источником была таблица proba (ControlSource proba.k_lpu, proba.k_mani...), и все работало. А что и где должно меняться? 2. Когда меняю значение поля в грид, оно меняется, но только если сначала убираю фокус с грида, а потом делаю requery('vusl'), затем refresh формы. Но после этого курсор верх-вниз по этому полю в грид не бегает, как будто блокирован на одной записи. Делала REQUERY('vUsl') в методе AfterRowColChange, то блокируются все столбцы, т.е. можно перемещаться только по строке. Может это глюк грида? Это - это что? Кусок кода, демонстрирующий проблему показать бы? 3. Как сделать, чтобы представление при каждом входе в форму создавалось снова. Удалять его совсем? А зачем? Не определив причины гадаем "а может так будет так как нам надо?" ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2008, 12:14 |
|
Обновляемое представление и грид
|
|||
---|---|---|---|
#18+
АлёнаШ! В приложении представление это не таблица, а SQL-запрос, по которому формируется курсор от удалённого источника (например SQL-сервер) при старте Вашего приложения. Когда Вы изменяете через поле формы какое-либо значение, то Вы изменяете его только в этом курсоре, т.е. только в своём сеансе. Поэтому, если перезапустить приложение, изменений в данных не будет. Т.е. Вам нужно вносить изменения в сам удалённый источник данных и только после этого обновить представление и затем GRID (RecordSource и ControlSource для каждой колонки) и другие поля ввода или отбражения информации. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2008, 14:24 |
|
Обновляемое представление и грид
|
|||
---|---|---|---|
#18+
LUCIAN АленаШ 3. Как сделать, чтобы представление при каждом входе в форму создавалось снова. Удалять его совсем? Не понятен вопрос,если представление включено в DataEnv.. формы то оно обязательно откроется при входе в форму если предварительно заданы параметры этого представл,. Почему спрашиваю про удаление представления: У меня грид с фильтром, отладчиком поймала, что при выходе из формы и при повторном входе в нёё у меня View не формируется новый, а остаётся старый. Вообще приведенный выше код из метода INIT грида. Формирую его программно потому что промучилась с дизайнером: у меня расшифровка полей идёт из 5 таблиц-кодификаторов, а автоматически построенный работает правильно только с двумя. Эту тему уже затрагивали, я сегодня на нёё наткнулась. ВладимирМю отвечал на этот вопрос так: "Правильно. Глюк дизайнера запросов. Он строит запрос вида: JOIN ... JOIN ... JOIN ... ON ... ON ... ON ... а должно быть JOIN ... ON ... JOIN ... ON ... JOIN ... ON ... " Поэтому хочу добиться, чтобы View формировался по новой. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2008, 15:20 |
|
Обновляемое представление и грид
|
|||
---|---|---|---|
#18+
UNPАлёнаШ! В приложении представление это не таблица, а SQL-запрос, по которому формируется курсор от удалённого источника (например SQL-сервер) при старте Вашего приложения. Когда Вы изменяете через поле формы какое-либо значение, то Вы изменяете его только в этом курсоре, т.е. только в своём сеансе. Поэтому, если перезапустить приложение, изменений в данных не будет. Т.е. Вам нужно вносить изменения в сам удалённый источник данных и только после этого обновить представление и затем GRID (RecordSource и ControlSource для каждой колонки) и другие поля ввода или отбражения информации. Получается, я совсем запуталась, я думала, что вышеописанный пример создания SQL-запроса и прописывание его свойств - обновляемые поля, разрешение на Update, - это и есть изменения в удалённом источнике. Или нет? Причём я смотрю этот удалённый источник, в нём меняются данные (по п.2), а затем REQUery и Refresh, всё обновляется, но курсор по этому столбцу дергается на одной строке. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2008, 15:25 |
|
Обновляемое представление и грид
|
|||
---|---|---|---|
#18+
АленаШ У меня грид с фильтром, отладчиком поймала, что при выходе из формы и при повторном входе в нёё у меня View не формируется новый, а остаётся старый. Если в определении представления vUsl участвуют другое предствление(я),то для того чтобы REQUERY('vUsl') обновило vUsl необходимо предварительно сделать REQUERY() для порождающих представлений ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2008, 16:03 |
|
Обновляемое представление и грид
|
|||
---|---|---|---|
#18+
LUCIAN АленаШ У меня грид с фильтром, отладчиком поймала, что при выходе из формы и при повторном входе в нёё у меня View не формируется новый, а остаётся старый. Если в определении представления vUsl участвуют другое предствление(я),то для того чтобы REQUERY('vUsl') обновило vUsl необходимо предварительно сделать REQUERY() для порождающих представлений Да нет, представление одно, и обновление идёт только в одной таблице - источнике, все остальные таблицы - для наглядной расшифровки кодов. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2008, 16:21 |
|
Обновляемое представление и грид
|
|||
---|---|---|---|
#18+
АленаШ Вообще приведенный выше код из метода INIT грида. Формирую его программно потому что промучилась с дизайнером: Попробуйте приведенный Вами код удалить из метода INIT грида и поместить в Prg-файл: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8.
Послать на выполнение этот файл В DE формы добавить это View и все порождающие таблицы Полученный таким образом View дизайнером не трогать ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2008, 16:45 |
|
Обновляемое представление и грид
|
|||
---|---|---|---|
#18+
Для начала следует очень серьезно обдумать необходимость программного создания Local View. Дело в том, что любое View - это объект контейнера базы данных. Вот и представьте себе, что два пользователя открыли один и тот же контейнер базы данных, но тут один из них программно изменил Local View. Что получит второй? По сути, это подобно модификации "на лету" структуры таблиц. Один пользователь посчитал, что вот эти поля - лишние и удалил их, а другой пытается обратится к этим удаленным полям. Приложение просто рухнет. Невозможно так работать. Команды CREATE - это команды проектирования . В работающем приложении они крайне не желательны. Не стоит этого делать, особенно в начале изучения среды FoxPro. View должны создаваться один раз при проектировании базы данных и их структура не должна меняться на протяжении всего времени работы приложения. Вы вообще можете объяснить, хотя бы самой себе, ЗАЧЕМ Вам понадобилось программно создавать View? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2008, 17:08 |
|
Обновляемое представление и грид
|
|||
---|---|---|---|
#18+
ВладимирМ Вы вообще можете объяснить, хотя бы самой себе, ЗАЧЕМ Вам понадобилось программно создавать View? Я вроде выше про это написала. Дизайнер строит JOIN ... JOIN ... JOIN ... ON ... ON ... ON ... а должно быть JOIN ... ON ... JOIN ... ON ... JOIN ... ON ... Сначала я просто использовала грид с источником - таблицей, в котором были поля-расшифровки из связанных таблиц. И всё было бы прекрасно, но грид у меня - грид Petrovicha, а в нем есть возможности фильтра по колонкам, так вот он на колонках-расшифровках из связанных таблиц не работает, а как было бы удобно пользователю. Ведь он не обязан помнить соответствие кода диагноза - названию диагноза - их 14,5 тыс. А визуально в форме фильтра он может выбрать только значение кода. Вот поэтому я заморочилась с вьюшкой, чтобы все поля в гриде были ему родные и он мог фильтровать по названию, но вылезла куча других проблем. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2008, 17:43 |
|
Обновляемое представление и грид
|
|||
---|---|---|---|
#18+
Вообще-то, именно для INNER JOIN есть альтернативное решение вопроса связи полей в дизайнере. 1. Убрать все связи с закладки JOIN 2. Создать соответсвующие связи на закладке Filter. Т.е. запрос получится вида SELECT ... FROM Tab1, Tab2, Tab3 ... WHERE Tab1.Id1 = Tab2.Id1 AND Tab2.Id2 = Tab3.Id2 ... Это абсолютно то же самое, что и INNER JOIN. Просто другой синтаксис. Только, как мне кажется, Вы выбрали заведомо не удачное решение. Не должен запрос содержать столько таблиц-источников. Вы получите дикие тормоза. Думаю, надо "в консерватории что-то подправить". Либо написать свой собственный класс для фильтрации, либо "научить" чужой класс фильтровать данные нужным Вам способом, либо изменить интерфейс приложения. Собственно, попробуйте описать задачу, а не придуманный Вами способ ее решения. Как Вы вообще представляете себе работу с Grid у которого такое количество столбцов? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2008, 18:04 |
|
Обновляемое представление и грид
|
|||
---|---|---|---|
#18+
ВладимирМСобственно, попробуйте описать задачу, а не придуманный Вами способ ее решения. Как Вы вообще представляете себе работу с Grid у которого такое количество столбцов? Во-первых, Владимир, Вам огромное спасибо за Ваше безграничное терпение и такт, с которым Вы пытаетесь помочь нуждающимся в помощи. Попробую кратко описать задачу. Есть база данных: в ней содержатся таблицы: 1. личные данные - tabl1 2. данные о пройденных обследованиях - tabl2 3. результаты - tabl3 4. таблицы-кодификаторы: диагнозы, исследования, список врачей, перечень материалов для исследования, .... Так вот в Tabl1, Tabl2 хранятся только коды диагнозов, исследований, врачей... в форме выводятся данные обследований, например на Иванова, а в гриде показываются все пройденные им обследования. Естественно, что редактируемыми являются только поля с кодами, а все остальные поля-расшифровки этих кодов для наглядности ( у меня их 6 шт. из 17). Когда пользователи вводят или анализируют результаты, им нужно быстро выбрать или по исследованию (только "общий анализ крови" за весь период наблюдения за пациентом, или только по врачу - сколько раз направлял тот или иной доктор, или по направившему лечебному учреждению т.д.) Вот так вкратце, вообщем-то структура довольно простая и прозрачная. Просто хочется, чтобы было всё удобно и понятно для конечного пользователя. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2008, 18:30 |
|
Обновляемое представление и грид
|
|||
---|---|---|---|
#18+
В процессе редактирования отображаются данные только по одному пациенту? Т.е. стоит задача выбрать некоторые реквизиты одного пациента или выбрать пациентов по некоторым реквизитам? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2008, 18:36 |
|
Обновляемое представление и грид
|
|||
---|---|---|---|
#18+
ВладимирМВ процессе редактирования отображаются данные только по одному пациенту? Т.е. стоит задача выбрать некоторые реквизиты одного пациента или выбрать пациентов по некоторым реквизитам? Конечно, будет и то и другое. В настоящий момент делаю ввод на одного. Ввод у них бьется на два этапа: 1. Непосредственно ввод дичных данных и пройденных обследований. 2. Ввод результатов. Возможно через несколько дней. И вот тут будет ввод как по конкретному пациенту, так и по виду исследования. Хотим, чтобы каждый вводил свою методику, т.е анализ крови - один лаборант, анализ мочи - другой. А уже анализировать будут, кто чего захочет. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2008, 18:56 |
|
Обновляемое представление и грид
|
|||
---|---|---|---|
#18+
К слову: Я выработал для себя такую методу работы с представлениями. Ввиду того, что возможности встроенного конструктора Visual FoxPro по созданию представлений сильно ограничены, я создаю их (представления) по сути скриптами, а именно, хранимыми процедурами. Я создаю хранимые процедуры вида CreateView* (напр., CreateViewVw1) с телом из одной команды CREATE SQL VIEW … Но! Вызываю её лишь единожды - в редакторе. Тем самым я использую всю мощь языка SQL (UNION, FULL JOIN и т.п.), и одновременно представления у меня «грамотно» лежат в контейнере базы данных перманентно. Такие представления, разумеется, нельзя редактировать в редакторе. Но скрипт-то всегда под рукой. Легко переписать его и опять единожды вызвать в редакторе. Хранить скрипт лучше именно хранимой процедурой, а не файлом prg. Тогда гарантировано структура представления будет всегда рядом – иначе мы просто не сможем её (структуру) увидеть. По-моему, очень удобно. Никаких проблем в сети и пр. Странно, что многие не замечают такого подхода. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2008, 19:07 |
|
Обновляемое представление и грид
|
|||
---|---|---|---|
#18+
Задачи ввода данных и анализа данных - это две принципиально разные задачи. И не надо их смешивать. Они решаются разными методами и в разных интерфейсах. Как правило, даже в разных продуктах (программах). Интерфейс определяется логикой процесса. Т.е. а как вообще пользователь ищет нужное место для ввода изменений? ЧТО он ищет? Как формулируется задача для ввода данных? У пациента Х, при проведении обследования Y, установлены результаты Z? Правильно? Т.е. имеем некое "дерево" критериев (иерархию, лесницу) поочередно выполняя поиск по каждому критерию. При этом, невозможно "пропустить" какой-то критерий, поскольку не будет однозначности. Ну например, если одно и то же обследование делали несколько врачей, то по значению результата невозможно сказать какой врач делал обследование и у какого пациента. Напомню, речь идет о заведении данных. Их еще нет. Поэтому нечего сравнить или сопоставить, чтобы сделать выводы. А раз имеем последовательный процесс отбора, то его и надо реализовывать последовательно . В отдельных элементах (Grid). Не пытаясь свалить всю имеющеюся информацию в одну кучу. Пользователь будет последовательно "спускаться" по иерархии критериев (по таблицам) и нет никакой необходимости отображать все таблицы сразу. В одном Grid. Можно распологать их рядом на одной форме или в разных формах. Это как будет удобно. - Отдельный Grid на список пациентов по его личной информации (номер карточки, ФИО и т.п.) - Отдельный Grid на список обследований одного (найденного) пациента (Какой обследование, когда) - Отдельный Grid на список результатов одного (найденного) обследования В результате, каждый Grid содержит специфическую информацию "притянутую" из одной..двух таблиц. В качестве критерия отбра выступает текущая запись из таблицы предыдущего уровня иерархии. Тут важен сам принцип. Мы не сваливаем все в одну кучу (в один Grid). Мы разделяем данные по разным Grid. По сути, стремимся отображать данные максимально близко к тому, как они хранятся в базе данных. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2008, 19:42 |
|
Обновляемое представление и грид
|
|||
---|---|---|---|
#18+
ВладимирМЗадачи ввода данных и анализа данных - это две принципиально разные задачи. И не надо их смешивать. Они решаются разными методами и в разных интерфейсах. Как правило, даже в разных продуктах (программах). Тут важен сам принцип. Мы не сваливаем все в одну кучу (в один Grid). Мы разделяем данные по разным Grid. По сути, стремимся отображать данные максимально близко к тому, как они хранятся в базе данных. Абсолютно с Вами согласна. Поэтому есть 1.) Личные данные tabl1: ФИО, дата рождения, адрес. 2.) Есть данные обследования Tabl2: а вот их много: Вид исследования, код контингента больного, направивиший врач, диагноз, материал(кровь, моча), лечебное учреждение, тип оплаты именно этого исследования, тест-система, на которой проводилось исследование. 3.) И уже отдельно - результаты Tabl3- там только код исследования и результаты. Ввод личных данных реализован в отдельной форме, И ввод результатов будет в отделной форме, она меняется динамически в зависимости от вида исследования, параметров везде разное количество. Так вот сейчас речь идет только о Tabl2 и расшифровке. Мой предшественник в Tabl2 хранил и все расшифровки, параллельно с таблицами-кодификаторами. Я считаю это абсолютно неправильным подходом к хранению данных, к раздуванию БД. А зачем тогда кодификаторы? Или опять я не права? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.08.2008, 20:08 |
|
Обновляемое представление и грид
|
|||
---|---|---|---|
#18+
АленаШПоэтому есть 1.) Личные данные tabl1: ФИО, дата рождения, адрес. 2.) Есть данные обследования Tabl2: а вот их много: Вид исследования, код контингента больного, направивиший врач, диагноз, материал(кровь, моча), лечебное учреждение, тип оплаты именно этого исследования, тест-система, на которой проводилось исследование. 3.) И уже отдельно - результаты Tabl3- там только код исследования и результаты. Ввод личных данных реализован в отдельной форме, И ввод результатов будет в отделной форме, она меняется динамически в зависимости от вида исследования, параметров везде разное количество. Так вот сейчас речь идет только о Tabl2 и расшифровке. Мой предшественник в Tabl2 хранил и все расшифровки, параллельно с таблицами-кодификаторами. Я считаю это абсолютно неправильным подходом к хранению данных, к раздуванию БД. А зачем тогда кодификаторы? Или опять я не права? Да нет. Все правильно. За исключением того, что нет необходимости цеплять в итоговый Grid данные из первой или третьей таблиц. Поскольку с конкретной записью из первой таблицы уже определились, а данных из третьей таблицы еще попросту нет. Вопрос только в том, как организовывать поиск. Есть несколько стратегий: 1. То, что сделал Ваш предшественник. Дублировать данные из справочников (кодификаторов) в списке обследований. Это избыточность. Согласен. Но это облегчает программирование, хотя сильно усложняет анализ. Непонятно по каким значениям строить анализ. По тем, которые сейчас есть в справочнике или по тем, которые остались сохранены в таблице обследований. По сути в таблице обследований будет хранится история изменений реквизитов справочников. 2. Отображать в Grid не только "расшифровку" кода, но и сам код. "Расшифровку", разумеется, брать из справочника и по ней поиск в Grid невозможен. А вот сам код брать из таблицы обследований и по ней поиск возможен. Вы удивитесь, насколько быстро пользователи выучат эти внутренние коды. Хотя, конечно, теоретически, пользователь не должен видеть эти внутренние коды, поскольку их основное назначение - это обеспечение внутренней ссылочной целостности. Но реальная задача - это всегда компромис. Баланс между тем как должно быть "по правилам" и тем как "оптимальнее". Все зависит от того, что вкладывается в понятие "оптимальнее". 3. Изменить способ поиска (фильтрации) нужных данных. Здесь вариантов огромное количество. Все зависит от фантазии разработчика. Например, создать отдельную форму для поиска, где и формировать запросы удобным способом или просто "переводить" название справочника в его код и уже этот код использовать в фильтре. Кстати, не вижу никаких проблем накладывать фильтр и на связанные таблицы. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2008, 17:30 |
|
Обновляемое представление и грид
|
|||
---|---|---|---|
#18+
> ... Вы удивитесь, насколько быстро пользователи выучат эти внутренние > коды. В существующей проге пользователи оперируют кодами улиц. Есть конечно возможность выбора из справочника КОДА, но поиск абонентов идет именно по КОДУ, а не по названию улицы. Когда говорю пользователям, что я коды собираюсь убрать - они на меня смотрят как на идиота, как будто я им руки отрываю. Но думаю, что в новой проге, я все таки от кодов избавлюсь. Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2008, 21:24 |
|
Обновляемое представление и грид
|
|||
---|---|---|---|
#18+
ВладимирМ 2. Отображать в Grid не только "расшифровку" кода, но и сам код. . Код у меня в гриде отображается. Но вот, например, диагнозов - 14,5 тысяч, думаю, что запомнить их немного проблематично. ВладимирМ3. Изменить способ поиска (фильтрации) нужных данных. Здесь вариантов огромное количество. Все зависит от фантазии разработчика. Например, создать отдельную форму для поиска, С этого и начала, сделала форму для поиска . Но потом наткнулась в решениях на грид Petrovicha, очень понравилась идея общего фильтра по колонкам, вот и захотела сделать так. Но споткнулась на полях из связанных таблиц, они в этом фильтре не работают, вот так и пришла к View. Над идеологией, конечно, буду думать, но всё же, вопрос остался открытым. Кстати, по совету LUCIAN вынесла вышеприведённый код в PRG, ничего не изменилось. Попробую ещё раз сформулировать вопросы: 1. Сформирован View, отображён в гриде Petrovich (решения на сайте www.foxclub.ru). Поля обновляю по Replace. Сразу же делаю REQUERY. Затем REfrech грида. Если нахожусь на гриде, Requery не отрабатывает. Когда перед Requery убираю фокус на другой элемент формы, происходит корректное обновление таблицы-источника и обновление грида тоже, но курсор в этой колонке больше не перемещается ни вверх ни вниз, только влево-вправо. Если ухожу на другую колонку, где не делала Requery, всё двигается. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2008, 08:54 |
|
Обновляемое представление и грид
|
|||
---|---|---|---|
#18+
А так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2008, 11:51 |
|
Обновляемое представление и грид
|
|||
---|---|---|---|
#18+
Ура! У меня всё получилось. Спасибо всем большое. Совершенно запутавшись и отчаявшись, сегодня создала форму и грид с нуля, все прописала аккуратно по новой и начало получаться. Теперь работает всё! Поняла, где косяки, но не совсем понимаю, почему. 1. Значит, с гридом: в свойстве RecordSourceType вдруг оказалась 0 - Table, это всё портило. Сейчас стоит Alias. 2. На форме есть объект Combobox Lpu. Свойства: BoundColumn = 2 , BoundTo = .t., ControlSource = vusl.k_lpu, RowSource = lpu.lpu,k_lpu, RowSourseType = 6 - Fields. Когда вместо View vusl использовалась таблица proba, т.е. ControlSource = proba.k_lpu, то из всплывающего списка выбиралось значение и proba.k_lpu обновлялось автоматически. C View так не получается, пришлось прописывать явно REPLACE vusl.k_lpu WITH thisform.lpu.Value gn = RECNO() REQUERY('vUsl') GO gn _screen.Activeform.refresh Только тогда все стало на свои места. Что-то у меня в понимании этих нюансов ускользает, подскажите, что понимаю неправильно. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2008, 14:17 |
|
|
start [/forum/topic.php?fid=41&msg=35490501&tid=1587373]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
60ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
others: | 342ms |
total: | 502ms |
0 / 0 |