:: Visual Foxpro, Foxpro for DOS
Re: Как определить что поле в Grid изменили
XAndy

Сообщений: 3803
Откуда: Киев
Дата регистрации: 05.02.2004
Igor Korolyov
Для того чтобы описывать формы справочников совершенно не требуется что-либо куда-либо копировать. Нужно лишь разместить визуально нужные элементы (если грид, то просто колонки, и контролы в них - если нужны не штатные текстбоксы) и задать им свойства
Имел ввиду, что ради примитивных справочников незачем программу менять, заводится справочник прямо в интерфейсе программы (или при апдейте системы скриптом). И таких простейших справочников в жизни большинство. Без разницы, где метаинформация будет храниться, в классе, или вне программы. Зато не нужно
Igor Korolyov
разместить визуально нужные элементы
Вижуал копипастер детектед

А если вдруг возникнет
Igor Korolyov
"необходимость использовать для заполнения комбо или чекбокс или datetime picker и их параметры", "функцию проверки корректности заполнения поля", "функцию обязательную для исполнения после модификации записи" и т.п.
вот тогда будет другой класс, собственный. Что, впрочем, случается редко для справочников уровня "мужчина/женщина"
Ratings: 0 negative/0 positive
Re: Как определить что поле в Grid изменили
Владимир Максимов

Сообщений: 14095
Откуда: Москва
Дата регистрации: 02.09.2000
XAndy
Имел ввиду, что ради примитивных справочников незачем программу менять, заводится справочник прямо в интерфейсе программы (или при апдейте системы скриптом). И таких простейших справочников в жизни большинство. Без разницы, где метаинформация будет храниться, в классе, или вне программы.

Во-первых, "Кролики, это не только ценный мех..." (с)

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

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

Во-вторых, "безумству храбрых, поем мы песню..." (с)

Начнем с простого. Чтобы отобразить справочник нам надо знать

- Имя таблицы
- Имена всех полей таблицы
- Русское название таблицы (заголовок справочника)
- Русское название полей таблицы (заголовки в Grid)

Вопрос в том, откуда Вы собираетесь брать эту информацию для нового справочника? Того, которого раньше не существовало? Если Вы пишите универсальный класс, то для этого потребуется дополнительная (!) настроечная таблица. Т.е. Вы вынуждены будете создать дубль метаинформации. Т.е. кроме базы данных, создать еще некую параллельную структуру для хранения "информации об информации". А потом еще ломать голову о периодической проверки актуальности этой информации и синхронизации ее с базой данных

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

Т.е. написать универсальный справочник можно, но при более менее длительной работе приложения такой справочник начнет катастрофически быстро усложнять свой код, обрастая многочисленными условиями и дополнениями. Сдержать этот процесс можно только если ввести некие дополнительные правила ведения справочников. Оранизационные. Внепрограммные. Тупо договорится, например, что все идентификаторы - это числовые поля автоинкремента и никак иначе.

Ну, и смысл? Не проще ли во всех смыслах сделать конечный объект под конкретный справочник? Все-равно ведь это придется делать в Вашем универсальном коде, просто другими, более сложными и не очевидными способами...
Ratings: 0 negative/1 positive
Re: Как определить что поле в Grid изменили
lulgu

Сообщений: 1838
Дата регистрации: 30.11.2016
Далось это неосторожно вброшенное слово - "универсальный", раздразнили.
Замените его хотя бы на "типовой", и вопросы начнут рассасываться.
И останется обычный класс формы для типовых справочников.
Ratings: 0 negative/0 positive
Re: Как определить что поле в Grid изменили
Перминов Игорь

Сообщений: 1591
Откуда: Красная Орловка
Дата регистрации: 16.09.2001
lulgu
Далось это неосторожно вброшенное слово - "универсальный", раздразнили.
Замените его хотя бы на "типовой", и вопросы начнут рассасываться.
И останется обычный класс формы для типовых справочников.
Универсальный/Типовой
Сделайте класс формы с гридом, необходимым кол-вом кнопок, статусбаром и т.п.
Обмазгуйте какие методы, свойства могут/должны быть, и стройте на базе этого класса свои справочники, как должна вести себя эта форма-класс.
В любом случае при изменении/добавлении нового метода/свойства они автоматом будут доступны и в других формах-справочниках.


------------------
Без коментариев..
Ratings: 0 negative/0 positive
Re: Как определить что поле в Grid изменили
lulgu

Сообщений: 1838
Дата регистрации: 30.11.2016
Перминов Игорь
lulgu
Далось это неосторожно вброшенное слово - "универсальный", раздразнили.
Замените его хотя бы на "типовой", и вопросы начнут рассасываться.
И останется обычный класс формы для типовых справочников.
Универсальный/Типовой
Сделайте класс формы с гридом, необходимым кол-вом кнопок, статусбаром и т.п.
Обмазгуйте какие методы, свойства могут/должны быть, и стройте на базе этого класса свои справочники, как должна вести себя эта форма-класс.
В любом случае при изменении/добавлении нового метода/свойства они автоматом будут доступны и в других формах-справочниках.

О чем и речь.
Элементарные справочники типа "мужчина/женщина" можно объединить по методу предложенном xAndy, их немало.
Типовые справочники типа ID, cName, cValue (Код, Наименование, Значение) требуют себе уже отдельный класс, в формах разные нюансы можно отрабатывать.
А для суперсложных справочников, понятно, надо создавать свои формы.
Ratings: 0 negative/0 positive
Re: Как определить что поле в Grid изменили
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
XAndy
Имел ввиду, что ради примитивных справочников незачем программу менять
Сферический справочник в вакууме? Существует заради себя и всё
Такого не бывает. А значит на уровень метаинформации (чтобы таки "заводить прямо в интерфейсе программы") придётся выносить практически ВСЁ - от форм "рабочих таблиц" до расчётных методов и "отчётов" (там где этот справочник будет использоваться - т.е. для сущностей на него так или иначе ссылающихся).
О чём, собственно говоря и шла речь - вместо scx/vcx/frx/fxp делаем свои аналоги для хранения и "визуальной разметки", и каких-то свойств (те же "русские заголовки полей/таблиц") и собственно логики - т.е. кода...
Я считаю это нецелесообразным. MS и так провела большую работу чтобы вместо писания на чистом Си мы могли использовать метаинформацию системы VFP

XAndy
Что, впрочем, случается редко для справочников уровня "мужчина/женщина"

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

Если у нас есть класс формы справочника (со всеми нужными "кнопками" Save/Revert/Add/Delete/Search/Filter/Export/Select and Close...), то в рекомендованном МС подходе (хотя я его и не разделяю) для создания формы его ведения нужно:
- выполнить команду Create Form newRef AS frmRef FROM myclasses.vcx - если этот класс формы не стоит как "класс формы по умолчанию", иначе даже писать имя класса/библиотеки не нужно.
- вызвать окно DataEnvironment.
- в появившемся диалоге выбрать требуемую таблицу справочника.
- после этого перетащить объект cursor из окна DE на форму.
- по желанию прописать заголовок формы.
- нажать Save. Форма готова.

И это даже безо всяких "мастеров и построителей". Совсем уж "вручную"

При том у нас УЖЕ есть форма которую можно будет при необходимости "усложнить". Т.е. не ждать когда мы перерастём возможности системы метаинформации, и потом весело и с песнями искать все вызовы автогенерируемой формы, дабы заменить их на вызовы новой, "вручную" созданной.


------------------
WBR, Igor
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 27 (Гостей: 27)

© 2000-2024 Fox Club 
Яндекс.Метрика