powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Обновляемое представление и грид
24 сообщений из 24, страница 1 из 1
Обновляемое представление и грид
    #35488948
АленаШ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет! Мучаюсь с представлением и гридом.
Есть обновляемое программно созданное 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. Как сделать, чтобы представление при каждом входе в форму создавалось снова. Удалять его совсем?
...
Рейтинг: 0 / 0
Обновляемое представление и грид
    #35489188
LUCIAN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
АленаШ -хорошую тему затронули я посмотрел ближаюшую свою программу и там увидел:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
*объект column.tex1
PROC TEXT1.VALID && при изм поля VIEW
This.Parent.Parent.REFRESH && GRID.REFRESH

PROC grdDettn.REFRESH
SELE DETTN && DETTN-VIEW (ДЕТАЛЬНЫЕ СТРОКИ ТТН)
NZ=RECNO()
requery("DETTN")
KZ=_TALLY
This.grdDettn.KZAP=KZ
IIF KZ>=NZ AND NZ> 0 
	GO NZ
ENDIF	
...
Рейтинг: 0 / 0
Обновляемое представление и грид
    #35489243
LUCIAN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
АленаШ 3. Как сделать, чтобы представление при каждом входе в форму создавалось снова. Удалять его совсем?
Не понятен вопрос,если представление включено в DataEnv.. формы то оно обязательно откроется при входе в форму если предварительно заданы параметры этого представл,.
...
Рейтинг: 0 / 0
Обновляемое представление и грид
    #35489323
Sergey Sizov.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
АленаШ Есть форма, на которой отображаются поля из представления и грид.

1. Когда меняю значение в поле на форме, то вообще ничего не меняется, хотя проверила все ControlSource (vusl.k_lpu, vusl.k_mani....). До этого у меня источником была таблица proba (ControlSource proba.k_lpu, proba.k_mani...), и все работало.
А что и где должно меняться?

2. Когда меняю значение поля в грид, оно меняется, но только если сначала убираю фокус с грида, а потом делаю requery('vusl'), затем refresh формы. Но после этого курсор верх-вниз по этому полю в грид не бегает, как будто блокирован на одной записи. Делала REQUERY('vUsl') в методе AfterRowColChange, то блокируются все столбцы, т.е. можно перемещаться только по строке. Может это глюк грида?
Это - это что? Кусок кода, демонстрирующий проблему показать бы?

3. Как сделать, чтобы представление при каждом входе в форму создавалось снова. Удалять его совсем?
А зачем? Не определив причины гадаем "а может так будет так как нам надо?"
...
Рейтинг: 0 / 0
Обновляемое представление и грид
    #35489849
UNP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UNP
Гость
АлёнаШ! В приложении представление это не таблица, а SQL-запрос, по которому формируется курсор от удалённого источника (например SQL-сервер) при старте Вашего приложения. Когда Вы изменяете через поле формы какое-либо значение, то Вы изменяете его только в этом курсоре, т.е. только в своём сеансе. Поэтому, если перезапустить приложение, изменений в данных не будет. Т.е. Вам нужно вносить изменения в сам удалённый источник данных и только после этого обновить представление и затем GRID (RecordSource и ControlSource для каждой колонки) и другие поля ввода или отбражения информации.
...
Рейтинг: 0 / 0
Обновляемое представление и грид
    #35490053
АленаШ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LUCIAN АленаШ 3. Как сделать, чтобы представление при каждом входе в форму создавалось снова. Удалять его совсем?
Не понятен вопрос,если представление включено в DataEnv.. формы то оно обязательно откроется при входе в форму если предварительно заданы параметры этого представл,.


Почему спрашиваю про удаление представления:

У меня грид с фильтром, отладчиком поймала, что при выходе из формы и при повторном входе в нёё у меня View не формируется новый, а остаётся старый. Вообще приведенный выше код из метода INIT грида. Формирую его программно потому что промучилась с дизайнером: у меня расшифровка полей идёт из 5 таблиц-кодификаторов, а автоматически построенный работает правильно только с двумя. Эту тему уже затрагивали, я сегодня на нёё наткнулась. ВладимирМю отвечал на этот вопрос так:

"Правильно. Глюк дизайнера запросов. Он строит запрос вида:

JOIN ... JOIN ... JOIN ... ON ... ON ... ON ...

а должно быть

JOIN ... ON ... JOIN ... ON ... JOIN ... ON ... "

Поэтому хочу добиться, чтобы View формировался по новой.
...
Рейтинг: 0 / 0
Обновляемое представление и грид
    #35490074
АленаШ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
UNPАлёнаШ! В приложении представление это не таблица, а SQL-запрос, по которому формируется курсор от удалённого источника (например SQL-сервер) при старте Вашего приложения. Когда Вы изменяете через поле формы какое-либо значение, то Вы изменяете его только в этом курсоре, т.е. только в своём сеансе. Поэтому, если перезапустить приложение, изменений в данных не будет. Т.е. Вам нужно вносить изменения в сам удалённый источник данных и только после этого обновить представление и затем GRID (RecordSource и ControlSource для каждой колонки) и другие поля ввода или отбражения информации.

Получается, я совсем запуталась, я думала, что вышеописанный пример создания SQL-запроса и прописывание его свойств - обновляемые поля, разрешение на Update, - это и есть изменения в удалённом источнике. Или нет? Причём я смотрю этот удалённый источник, в нём меняются данные (по п.2), а затем REQUery и Refresh, всё обновляется, но курсор по этому столбцу дергается на одной строке.
...
Рейтинг: 0 / 0
Обновляемое представление и грид
    #35490182
LUCIAN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
АленаШ У меня грид с фильтром, отладчиком поймала, что при выходе из формы и при повторном входе в нёё у меня View не формируется новый, а остаётся старый.
Если в определении представления vUsl участвуют другое предствление(я),то для того чтобы
REQUERY('vUsl') обновило vUsl необходимо предварительно сделать REQUERY() для порождающих
представлений
...
Рейтинг: 0 / 0
Обновляемое представление и грид
    #35490248
АленаШ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LUCIAN АленаШ У меня грид с фильтром, отладчиком поймала, что при выходе из формы и при повторном входе в нёё у меня View не формируется новый, а остаётся старый.
Если в определении представления vUsl участвуют другое предствление(я),то для того чтобы
REQUERY('vUsl') обновило vUsl необходимо предварительно сделать REQUERY() для порождающих
представлений


Да нет, представление одно, и обновление идёт только в одной таблице - источнике, все остальные таблицы - для наглядной расшифровки кодов.
...
Рейтинг: 0 / 0
Обновляемое представление и грид
    #35490326
LUCIAN
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
АленаШ Вообще приведенный выше код из метода INIT грида. Формирую его программно потому что промучилась с дизайнером:
Попробуйте приведенный Вами код удалить из метода INIT грида и поместить в Prg-файл:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Open database immun_labr
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;
.........

Послать на выполнение этот файл
В DE формы добавить это View и все порождающие таблицы
Полученный таким образом View дизайнером не трогать
...
Рейтинг: 0 / 0
Обновляемое представление и грид
    #35490400
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для начала следует очень серьезно обдумать необходимость программного создания Local View.

Дело в том, что любое View - это объект контейнера базы данных. Вот и представьте себе, что два пользователя открыли один и тот же контейнер базы данных, но тут один из них программно изменил Local View. Что получит второй?

По сути, это подобно модификации "на лету" структуры таблиц. Один пользователь посчитал, что вот эти поля - лишние и удалил их, а другой пытается обратится к этим удаленным полям. Приложение просто рухнет. Невозможно так работать.

Команды CREATE - это команды проектирования . В работающем приложении они крайне не желательны. Не стоит этого делать, особенно в начале изучения среды FoxPro.

View должны создаваться один раз при проектировании базы данных и их структура не должна меняться на протяжении всего времени работы приложения.

Вы вообще можете объяснить, хотя бы самой себе, ЗАЧЕМ Вам понадобилось программно создавать View?
...
Рейтинг: 0 / 0
Обновляемое представление и грид
    #35490466
АленаШ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМ
Вы вообще можете объяснить, хотя бы самой себе, ЗАЧЕМ Вам понадобилось программно создавать View?

Я вроде выше про это написала. Дизайнер строит JOIN ... JOIN ... JOIN ... ON ... ON ... ON ...

а должно быть

JOIN ... ON ... JOIN ... ON ... JOIN ... ON ...

Сначала я просто использовала грид с источником - таблицей, в котором были поля-расшифровки из связанных таблиц. И всё было бы прекрасно, но грид у меня - грид Petrovicha, а в нем есть возможности фильтра по колонкам, так вот он на колонках-расшифровках из связанных таблиц не работает, а как было бы удобно пользователю. Ведь он не обязан помнить соответствие кода диагноза - названию диагноза - их 14,5 тыс. А визуально в форме фильтра он может выбрать только значение кода. Вот поэтому я заморочилась с вьюшкой, чтобы все поля в гриде были ему родные и он мог фильтровать по названию, но вылезла куча других проблем.
...
Рейтинг: 0 / 0
Обновляемое представление и грид
    #35490501
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще-то, именно для INNER JOIN есть альтернативное решение вопроса связи полей в дизайнере.

1. Убрать все связи с закладки JOIN
2. Создать соответсвующие связи на закладке Filter.

Т.е. запрос получится вида

SELECT ...
FROM Tab1, Tab2, Tab3 ...
WHERE Tab1.Id1 = Tab2.Id1 AND Tab2.Id2 = Tab3.Id2 ...

Это абсолютно то же самое, что и INNER JOIN. Просто другой синтаксис.

Только, как мне кажется, Вы выбрали заведомо не удачное решение. Не должен запрос содержать столько таблиц-источников. Вы получите дикие тормоза. Думаю, надо "в консерватории что-то подправить". Либо написать свой собственный класс для фильтрации, либо "научить" чужой класс фильтровать данные нужным Вам способом, либо изменить интерфейс приложения.

Собственно, попробуйте описать задачу, а не придуманный Вами способ ее решения. Как Вы вообще представляете себе работу с Grid у которого такое количество столбцов?
...
Рейтинг: 0 / 0
Обновляемое представление и грид
    #35490546
АленаШ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМСобственно, попробуйте описать задачу, а не придуманный Вами способ ее решения. Как Вы вообще представляете себе работу с Grid у которого такое количество столбцов?

Во-первых, Владимир, Вам огромное спасибо за Ваше безграничное терпение и такт, с которым Вы пытаетесь помочь нуждающимся в помощи.

Попробую кратко описать задачу.
Есть база данных: в ней содержатся таблицы: 1. личные данные - tabl1
2. данные о пройденных обследованиях - tabl2
3. результаты - tabl3
4. таблицы-кодификаторы: диагнозы, исследования, список врачей, перечень материалов для исследования, ....

Так вот в Tabl1, Tabl2 хранятся только коды диагнозов, исследований, врачей... в форме выводятся данные обследований, например на Иванова, а в гриде показываются все пройденные им обследования. Естественно, что редактируемыми являются только поля с кодами, а все остальные поля-расшифровки этих кодов для наглядности ( у меня их 6 шт. из 17). Когда пользователи вводят или анализируют результаты, им нужно быстро выбрать или по исследованию (только "общий анализ крови" за весь период наблюдения за пациентом, или только по врачу - сколько раз направлял тот или иной доктор, или по направившему лечебному учреждению т.д.)
Вот так вкратце, вообщем-то структура довольно простая и прозрачная. Просто хочется, чтобы было всё удобно и понятно для конечного пользователя.
...
Рейтинг: 0 / 0
Обновляемое представление и грид
    #35490559
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В процессе редактирования отображаются данные только по одному пациенту? Т.е. стоит задача выбрать некоторые реквизиты одного пациента или выбрать пациентов по некоторым реквизитам?
...
Рейтинг: 0 / 0
Обновляемое представление и грид
    #35490591
АленаШ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМВ процессе редактирования отображаются данные только по одному пациенту? Т.е. стоит задача выбрать некоторые реквизиты одного пациента или выбрать пациентов по некоторым реквизитам?

Конечно, будет и то и другое. В настоящий момент делаю ввод на одного. Ввод у них бьется на два этапа: 1. Непосредственно ввод дичных данных и пройденных обследований.
2. Ввод результатов. Возможно через несколько дней. И вот тут будет ввод как по конкретному пациенту, так и по виду исследования. Хотим, чтобы каждый вводил свою методику, т.е анализ крови - один лаборант, анализ мочи - другой.
А уже анализировать будут, кто чего захочет.
...
Рейтинг: 0 / 0
Обновляемое представление и грид
    #35490605
Рома Б.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
К слову:

Я выработал для себя такую методу работы с представлениями. Ввиду того, что возможности встроенного конструктора Visual FoxPro по созданию представлений сильно ограничены, я создаю их (представления) по сути скриптами, а именно, хранимыми процедурами. Я создаю хранимые процедуры вида CreateView* (напр., CreateViewVw1) с телом из одной команды

CREATE SQL VIEW …

Но! Вызываю её лишь единожды - в редакторе. Тем самым я использую всю мощь языка SQL (UNION, FULL JOIN и т.п.), и одновременно представления у меня «грамотно» лежат в контейнере базы данных перманентно. Такие представления, разумеется, нельзя редактировать в редакторе. Но скрипт-то всегда под рукой. Легко переписать его и опять единожды вызвать в редакторе. Хранить скрипт лучше именно хранимой процедурой, а не файлом prg. Тогда гарантировано структура представления будет всегда рядом – иначе мы просто не сможем её (структуру) увидеть.

По-моему, очень удобно. Никаких проблем в сети и пр. Странно, что многие не замечают такого подхода.
...
Рейтинг: 0 / 0
Обновляемое представление и грид
    #35490627
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задачи ввода данных и анализа данных - это две принципиально разные задачи. И не надо их смешивать. Они решаются разными методами и в разных интерфейсах. Как правило, даже в разных продуктах (программах).

Интерфейс определяется логикой процесса. Т.е. а как вообще пользователь ищет нужное место для ввода изменений? ЧТО он ищет? Как формулируется задача для ввода данных?

У пациента Х, при проведении обследования Y, установлены результаты Z? Правильно?

Т.е. имеем некое "дерево" критериев (иерархию, лесницу) поочередно выполняя поиск по каждому критерию. При этом, невозможно "пропустить" какой-то критерий, поскольку не будет однозначности.

Ну например, если одно и то же обследование делали несколько врачей, то по значению результата невозможно сказать какой врач делал обследование и у какого пациента. Напомню, речь идет о заведении данных. Их еще нет. Поэтому нечего сравнить или сопоставить, чтобы сделать выводы.

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

Пользователь будет последовательно "спускаться" по иерархии критериев (по таблицам) и нет никакой необходимости отображать все таблицы сразу. В одном Grid. Можно распологать их рядом на одной форме или в разных формах. Это как будет удобно.

- Отдельный Grid на список пациентов по его личной информации (номер карточки, ФИО и т.п.)
- Отдельный Grid на список обследований одного (найденного) пациента (Какой обследование, когда)
- Отдельный Grid на список результатов одного (найденного) обследования

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

Тут важен сам принцип. Мы не сваливаем все в одну кучу (в один Grid). Мы разделяем данные по разным Grid. По сути, стремимся отображать данные максимально близко к тому, как они хранятся в базе данных.
...
Рейтинг: 0 / 0
Обновляемое представление и грид
    #35490640
АленаШ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМЗадачи ввода данных и анализа данных - это две принципиально разные задачи. И не надо их смешивать. Они решаются разными методами и в разных интерфейсах. Как правило, даже в разных продуктах (программах).

Тут важен сам принцип. Мы не сваливаем все в одну кучу (в один Grid). Мы разделяем данные по разным Grid. По сути, стремимся отображать данные максимально близко к тому, как они хранятся в базе данных.

Абсолютно с Вами согласна. Поэтому есть 1.) Личные данные tabl1: ФИО, дата рождения, адрес.
2.) Есть данные обследования Tabl2: а вот их много: Вид исследования, код контингента больного, направивиший врач, диагноз, материал(кровь, моча), лечебное учреждение, тип оплаты именно этого исследования, тест-система, на которой проводилось исследование. 3.) И уже отдельно - результаты Tabl3- там только код исследования и результаты. Ввод личных данных реализован в отдельной форме, И ввод результатов будет в отделной форме, она меняется динамически в зависимости от вида исследования, параметров везде разное количество. Так вот сейчас речь идет только о Tabl2 и расшифровке. Мой предшественник в Tabl2 хранил и все расшифровки, параллельно с таблицами-кодификаторами. Я считаю это абсолютно неправильным подходом к хранению данных, к раздуванию БД. А зачем тогда кодификаторы? Или опять я не права?
...
Рейтинг: 0 / 0
Обновляемое представление и грид
    #35491113
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АленаШПоэтому есть

1.) Личные данные tabl1: ФИО, дата рождения, адрес.

2.) Есть данные обследования Tabl2: а вот их много: Вид исследования, код контингента больного, направивиший врач, диагноз, материал(кровь, моча), лечебное учреждение, тип оплаты именно этого исследования, тест-система, на которой проводилось исследование.

3.) И уже отдельно - результаты Tabl3- там только код исследования и результаты.

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

Так вот сейчас речь идет только о Tabl2 и расшифровке. Мой предшественник в Tabl2 хранил и все расшифровки, параллельно с таблицами-кодификаторами. Я считаю это абсолютно неправильным подходом к хранению данных, к раздуванию БД. А зачем тогда кодификаторы? Или опять я не права?
Да нет. Все правильно. За исключением того, что нет необходимости цеплять в итоговый Grid данные из первой или третьей таблиц. Поскольку с конкретной записью из первой таблицы уже определились, а данных из третьей таблицы еще попросту нет. Вопрос только в том, как организовывать поиск.

Есть несколько стратегий:

1. То, что сделал Ваш предшественник. Дублировать данные из справочников (кодификаторов) в списке обследований.

Это избыточность. Согласен. Но это облегчает программирование, хотя сильно усложняет анализ. Непонятно по каким значениям строить анализ. По тем, которые сейчас есть в справочнике или по тем, которые остались сохранены в таблице обследований. По сути в таблице обследований будет хранится история изменений реквизитов справочников.

2. Отображать в Grid не только "расшифровку" кода, но и сам код.

"Расшифровку", разумеется, брать из справочника и по ней поиск в Grid невозможен. А вот сам код брать из таблицы обследований и по ней поиск возможен. Вы удивитесь, насколько быстро пользователи выучат эти внутренние коды.

Хотя, конечно, теоретически, пользователь не должен видеть эти внутренние коды, поскольку их основное назначение - это обеспечение внутренней ссылочной целостности. Но реальная задача - это всегда компромис. Баланс между тем как должно быть "по правилам" и тем как "оптимальнее". Все зависит от того, что вкладывается в понятие "оптимальнее".

3. Изменить способ поиска (фильтрации) нужных данных. Здесь вариантов огромное количество. Все зависит от фантазии разработчика.

Например, создать отдельную форму для поиска, где и формировать запросы удобным способом или просто "переводить" название справочника в его код и уже этот код использовать в фильтре.

Кстати, не вижу никаких проблем накладывать фильтр и на связанные таблицы.
...
Рейтинг: 0 / 0
Обновляемое представление и грид
    #35491217
Galyamov Rinat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> ... Вы удивитесь, насколько быстро пользователи выучат эти внутренние
> коды.

В существующей проге пользователи оперируют кодами улиц. Есть конечно
возможность выбора из справочника КОДА, но поиск абонентов идет именно по
КОДУ, а не по названию улицы.


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



Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Обновляемое представление и грид
    #35491365
АленаШ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМ
2. Отображать в Grid не только "расшифровку" кода, но и сам код. .


Код у меня в гриде отображается. Но вот, например, диагнозов - 14,5 тысяч, думаю, что запомнить их немного проблематично.

ВладимирМ3. Изменить способ поиска (фильтрации) нужных данных. Здесь вариантов огромное количество. Все зависит от фантазии разработчика.

Например, создать отдельную форму для поиска,

С этого и начала, сделала форму для поиска . Но потом наткнулась в решениях на грид Petrovicha, очень понравилась идея общего фильтра по колонкам, вот и захотела сделать так. Но споткнулась на полях из связанных таблиц, они в этом фильтре не работают, вот так и пришла к View.

Над идеологией, конечно, буду думать, но всё же, вопрос остался открытым. Кстати, по совету LUCIAN вынесла вышеприведённый код в PRG, ничего не изменилось. Попробую ещё раз сформулировать вопросы:

1. Сформирован View, отображён в гриде Petrovich (решения на сайте www.foxclub.ru).
Поля обновляю по Replace.
Сразу же делаю REQUERY.
Затем REfrech грида.


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

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
select MyView
REPLACE ...
IF TableUpdate(.T.,.T.) = .T.
	Requery('MyView')
ELSE
	LOCAL laError( 1 )
	=AERROR(laError)
	* Анализ массива laError для уточнения причины ошибки
ENDIF
...
Рейтинг: 0 / 0
Обновляемое представление и грид
    #35492633
АленаШ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ура! У меня всё получилось.

Спасибо всем большое.

Совершенно запутавшись и отчаявшись, сегодня создала форму и грид с нуля, все прописала аккуратно по новой и начало получаться. Теперь работает всё! Поняла, где косяки, но не совсем понимаю, почему.

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

Только тогда все стало на свои места. Что-то у меня в понимании этих нюансов ускользает, подскажите, что понимаю неправильно.
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Обновляемое представление и грид
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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