Страница 1 из 3
Публикуя данную статью преследую одну главную цель – раскрыть для Вас свою идею по организованному ведению собственных свойств объектов Access (контролов, форм и т.д.).
Задачи, решаемые при реализации идеи:
Расширение свойств объекта с быстрым к ним обращением. Медленная альтернатива – создание таблицы [Тип объекта][Расположение объекта][Наименование объекта][Наименование свойства][Значение свойства].
Быстрое и удобное изменение переменных, используемых при отрабатывании событий объекта. Обращение производиться через панель «Окно свойств». Обычно приходится открывать код vba и изменять данные. Мы можем использовать альтернативу из п.1 или создавать спец поля на форме, но это часто неудобно.
Другие.
Область применения:
Универсализация часто используемых объектов (групп объектов). Пример1 Вы сделали кнопку [=] (см. Пользовательские свойства.accde ), которая приравнивает значение одного поля к другому. Теперь не надо создавать ее повторно на другой форме, копировать код обработчика vba (при копировании vba обработчик не наследуется), не надо подстраивать код обработчика в редакторе vba. Достаточно изменить собственное поле панели «Окно свойств». Пример2 Совершенствование функций ведения справочников http://hiprog.com/index.php?option=com_content&task=view&id=251661641&Itemid=35
Обработка особых сиуаций Пример2 в бухгалтерской очетности в столбце с балансом нужно выделять отрицательные значения цветом шрифта или фона, например. Тогда RGB код цвета для обычно и такой ситуации можно хранить с своем поле, а при вычислении значения поля (обработчик события) копировать в свойство цвета текста или фона значение своего поля.
Другие.
Как реализуется:
У всех объектов access есть свойство Tag (Дополнительные сведения). Свойство создано для ведения комментариев, но некоторые его используют в других целях, как и я.
Предлагаю разбить логически (через разделитель) свойство tag на массив элементов, которые будут выступать значениями собственных свойств, например через пробелы, запятые, фразы типа «Свойство1:»
Примечание: последнее решение более наглядно, но потребует доработки кода функции. Т.е. строка Tag= «Свойство1: , 123 , Свойство: , Текст» будет читаться функцией как 4 значения 4 свойств, но программно мы выкидываем нечетные, т.е. названия свойств. Соответсвенно функция чтения свойства GetParametr(2) должна обратиться к 4-му элемент Tag .
Таким образом пример 1 области применения реализуется путем указания через разделитель (в моем accde это пробел) в свойстве объекта Tag названия полей «txt1 txt2». При нажатии на кнопку значение txt2 копируется полю txt1. Примечание: пример ценности такого примера – копирование значения Поставщика счета Получателю средств по платежу на обстрактной финансовой форме исходящего счета.
А для того, чтобы копировать кнопку на другие формы достаточно реализовать обработчик в виде макроса, выполняющего функцию. Функция – фактический обработчик на vba с применением своих свойств в виде функцию. Теперь кнопка легко копируется с формы «Мои контролы для форм» на другие формы.
Комментарии автора:
Делюсь своей идеей и надеюсь, что она найдет отзыв читателей. Идею я придумал сам. Если кто-то уже подобное придумывал или встречал, то это не более чем совпадение, причем, буду рад на ссылку – приятно найти единомышленника. В таких случаях изобретения исторически обычно получают двойное имя ;) Я являюсь любителем в программировании, это не моя область, и развиваться в ней я не планирую. Буду рад, если читатель возьмется ее развить и опубликовать свою реализацию, конечно, с указанием автора самой идеи желательно ;).
Спасибо.
© Артем Золотинин [Баймер]Приложение. Мысли по развитию:
Реализовать ведение «Tag= «Свойство1: , 123 , Свойство: , Текст» (см. статью)
Реализовать возможность задания используемого разделителя на спец форме для параметров функции.
Реализовать код функции, изменяющей заданное свойство.
Реализовать таки использование идеи в авторской реализации функции ведения справочников http://hiprog.com/index.php?option=com_content&task=view&id=251661641&Itemid=35. с чем я уже успел обратиться к ее автору в комментарии в лице «Baimer ”a ;)
Пример реализации.
Просмотров: 11806 1 Написал(а) AlexSyr , в 03:48 04.12.2010 На мой взгляд - высказанная идея более чем спорная. Достоинства: --- Недостатки: 1. Фактически запрещается работать с Tag\'ом, т.к. будет использоваться в других целях и вероятность ошибок использования этого свойства значительно возрастет. 2. Пропадает возможность пользоваться IntelliSense, вследствии чего значительно возрастут ошибки одинакового начертания символов в разных раскладках клавиатуры (сc, оo, eе,Il1, ...). 3. Код усложняется. Через полгода опять придется разбираться откуда же берутся параметры, правильно ли указаны разделители (попробуйте вместо пробела набрать комбинацию Alt+255 ), ... И масса чего еще, что как правило с избытком подкидывает практика. А ради чего???? Если уж прямо так хочется (а иногда и требуется) унифицировать код, то есть стандартные способы: паблик функция с передачей в нее необходимых параметров; или свой класс. Думаю, что если бы Вы стукнулись в форум с этой идеей, то Вам бы спецы еще много чего нибудь присоветовали.
2 Написал(а) Баймер , в 17:16 04.12.2010 Спасибо за комментарий. Некоторые достоинства перечислены в статье. Может "---" как раз это и обозначало. По недостаткам: 1. Не понял, почему запрещается с ним работать? Tag позволяет ввести огромное кол-во символов (не считал), полностью которые, предполагаю, мало кто использует. Отсюда вывод: то, для чего его использовали, продолжает действовать в качестве одного из параметров. 2. Почитал немного по указанному термину. В коде, согласен, удобная вещь. НО на идею никак не влияет, т.к. это просто разные предметы разговора. 3. Повторюсь - указана лишь идея. Для простых случаев можно обойтись разделителями, для сложных идею можно реализовать лучше (см . мысли по развитию п.1). Для свойства Tag можно выбрать "Масштаб", тогда все отображается крупно и наглядно. Можно написать функцию, при которой можно будет вводить в Tag параметры с именем, ну и читать по имени. Например для приведенного ПРОСТЕНЬКОГО примера: Source, txt1, Receiver, txt2. Где для tag не требуется вести доп. параметры, то используем как обычно, а где нужно, то для коммента можно в таком случае сделать параметр Comment и расположить его первым 4. На вопрос: "Ради чего", - каждый должен ответить сам. Кому-то это не нужно - я не против. Кому-то понадобится - только за. Постараюсь привести в ближайшее время несколько примеров (без реализации), в которых, на мой взгляд, решение будет полезно. Отстраненно: слышал, что хороший программист решит задачу, если это возможно, используя самые простые средства и как можно меньше обращаясь к написанию своего кода (что-то такое). Так вот, в данном случае к коду обращаться вообще не надо - поменял значение свойства и все, не открывая редактор кода
3 Написал(а) AlexSyr , в 23:50 04.12.2010 Прочерк в графе "Достоинства" означает, что таковых, на мой взгляд, не обнаружено. По крайней мере по отношению к перечисленным стандартным способам решения. К примеру. Какой выигрыш получается у Вас по отношению к стандартному вызову паблик процедуры с передачей в нее необходимых параметров? Да никакого. Т.е. вместо того, чтобы напрямую передать в процедуру необходимые параметры, зачем то используется свойство Tag. Лишний посредник. А какой при этом выигрыш? Может пропала процедура? Нет. Быстрее начало работать? Ясно, что нет. Уменьшилось количество ошибок? Опять же нет, т.к. их теперь можно совершать и в написании передаваемых параметров и в синтаксисе. Сами попробуйте (и проверьте на ком нибудь еще) - при выборе "Масштаб" даже при громадном шрифте сможете отличить два пробела от одного (а результат при этом будет ой какой разный). Может быть стало легче управлять (модифицировать) кодом? А с чего это? Ведь кроме процедуры, выполняющей основную функцию, нужно еще следить за корректным разбором строки по передаваемым в процедуру параметрам. Теперь по "Недостаткам": 1. Сколько Tag позволяет ввести считать не надо - достаточно посмотреть в Help'е - 2048 символов. Почему запрещается? А потому, что если будет потребность это свойство использовать, то придется писать еще один разборщик строки по параметрам (нужно же как-то отделить мух от котлет), т.е. если нужно изменить что-то в одном разборщике, то не забыть изменить и в другом, или писать совместный, что является прямым отходом от универсальности. Т.е. вроде как используй это свойство (Де-юре), но лучше не надо (Де-факто)!!! 2. Если идея приводит к необходимости отказа от удобного инструмента, позволяющего уменьшить количество ошибок, а вследствие этого ускорить выход конечного продукта, то это дискредитирует идею. 3. Впрочем, думаю, что достаточно уже приведенных аргументов. Так в чем же заключается Ваша идея? Введя посредника в виде свойства Tag отказаться от программирования в VBA? Это к слову о "...не открывая редактор кода...". Улыбнуло!!! Так это больше похоже на параметрическую настройку уже готовой и отлаженной программы. А это уже другая идея.
4 Написал(а) Баймер , в 01:22 05.12.2010 Причиной текущих разногласий являются как минимум 2 момента: 1) я смотрю разрабочиком, разработчиком выходящим за рамки устаканившихся принципов, а Ваш взгляд скорее кодера(программиста), корректно реализующего код. Отсюда недопонимание с Вашей стороны. >Какой выигрыш получается у Вас по отношению к стандартному вызову паблик процедуры с передачей в нее необходимых параметров? - А что Вы понимаете под параметрами? А какая проверка параметров в функции без обращения к редактору кода (например сразу указывать в строке обработчика события)? Попробуйте посмотреть на этот вопрос шире. Я ведь даже не отрицал паблик функции, более того она необходима. > при выборе "Масштаб" даже при громадном шрифте сможете отличить два пробела от одного -А кто говорит о пробеле? Можно сделать любой символ, более того, о чем указывал в комментне 2, можно сделать намного более интеллектуальное решение. >Почему запрещается? А потому, что если будет потребность это свойство использовать, то придется писать еще один разборщик строки по параметрам - С чего вдруг? Придется, видимо подробнее пояснить. Создается набор паблик фукнций, работающий с доп. свойствами (свойствами и(или) параметрами, если копать глубже). Остальные функции, обработчики и т.д., которые были, остаются. Вот только параметры они получают через эти паблик функции. Теперь не нужно открывать код и править там значение - все рядом, под рукой. Я не сомневаюсь, что натасканный человек не сможет сделать это очень быстро, но это не определяет скорость. Так почему теперь вдруг придется отказаться от tag? Куда он денется? >Если идея приводит к необходимости отказа от удобного инструмента, позволяющего уменьшить количество ошибок, а вследствие этого ускорить выход конечного продукта, то это дискредитирует идею. - А чем инструкмент удобнее? Тем что он привычен? Тут я не согласен. Я боюсь даже оценивать удобство, так как все зависит от ситуации. А где Вы предлагаете хранить свойства объектов, которых нет в системе? В функциях? Если мне нужно посмотреть, что лежит в коробке - я просто смотрю в нее, а не расспрашиваю других. Если мне нужно поменять содержимое коробки - я меняю, а не ищу того, кто это сделает. Некоторые свойства принадлежат сугубо объекту и удобно хранить их непосредсвенно в нем. Вы же не храните ширину поля, цвет шрифта в функции, затем применяя при загрузке - это неудобно. В общем, нужно таки привести пару примеров. Не смотря на то, что конкретика портит философию, иногда к ней приходится обращаться. Но это позже. >Это к слову о "...не открывая редактор кода...". Улыбнуло!!! Много желающих забивать машинный код? А использовать ассемблер? Думаю сказать "нет навсегда" макросам тоже будет глупо. AlexSyr, попробуйте все-таки выйти за рамки, из которых Вы пуляете критикой из одних недостатков. В статье раскрыта идея, но не ее полная реализация. Пример сугубо показательный, и я изначально признавал его примитивность. Реализаций может быть много.
5 Написал(а) Баймер , в 01:29 05.12.2010 ПС а) Не указал 2 момент в первом обзаце. Так вот, я не программист. Отсюда свежий взгляд. б) Чтоб опять не возникла путаница. Говоря в одном из абзацев о паблик функциях, работающих с доп свойствами, я говорю о реализации функции НЕ работающих с доп. свойствами, а управляющих ими. Т.е. чтение свойства, изменение свойства и пр. Не хватает еще нескольких аппонентов... В разносторонней беседе идея раскроется быстрее.
6 Написал(а) Дглфы , в 07:46 05.12.2010 Почитал, посмотрел. Ужас. Вместо абсолютно понятной единственной строчки в обработчике события кнопки веер из макроса и внешних функций весьма сомнительного содержания. Не дай боже кому достанется такое \"творчество\" в сопровождение. Баймер, вам бы Гетца почитать, для начала, (у него есть знатный класс для работы с тегом), затем что-нибудь про инкапсуляцию и ООП. Па доброму.
7 Написал(а) AlexSyr , в 14:30 05.12.2010 Баймер! > взгляд скорее кодера (программиста) Для справки. Кодер (кодировщик) - сотрудник, пишущий исключительно код программы на основе предоставленного ТЗ. Его задачей является исключительно качественно/оптимизированно/... написанный код. Это своеобразная каста узкоспециализированных профессионалов. Технолог - сотрудник, занимающимся вопросами адаптации программ к нуждам пользователей (интерфейса; удобства и качества ввода данных; ...), определяющим необходимость/целесообразность/дальнейшее развитие/... того или иного решения. Его задачей является исключительно грамотно/всееобъемлюще/... составленное ТЗ. К данной категории причисляют себя все кому не лень - ведь управлять государством может даже кухарка. Хотя по сути это должны быть высокообразованные люди, свободно разбирающиеся в направлениях развития процессов автоматизации, маркетинга, психологии (да-да) и многом чего еще. Программист - сотрудник, выполняющий функции не только кодировщика, но и технолога, пусть немного и менее эффективно, чем делал бы отдельный узконаправленный специалист, но именно это и позволяет получать готовый продукт в разы быстрее и качественнее. Программист с БОЛЬШОЙ буквы - человек (может и не быть сотрудником ), выполняющий функции не только кодировщика, но и технолога, в идеальном понимании этих двух функций. Пользователь (ламер/чайник/манагер /...) - сотрудник, который должен бы учиться пользоваться предоставленным ему инструментом (программой), а вместо этого любит все охаивать на предмет непрофессионализма, давать глупые советы как надо а как не надо, ..., при этом, зачастую плохо владеющий элементарной арифметикой (проверено на практике). Так вот. Если бы я посмотрел на Вашу публикацию взглядом \"кодера\", то я бы и не стал даже ввязываться в полемику (надеюсь понятно почему ). Я же пытался Вам привести аргументы и со стороны кодировщика и со стороны технолога и даже со стороны пользователя (каковыми все и являемся по отношению к Access). Моей целью не стоит переубедить именно Вас (порой трудно отказываться от вредных привычек и стереотипов), а донести до тех, кто в дальнейшем может наткнуться на данную публикацию - не стоит, ради непонятно чего, так усложнять задачу. Люди!!! Задумайтесь над тем, что написал Дглфы(Lukas) по поводу \"сопровождения\". ) P.S. Личный совет. Для сравнения со своими идеями выбирайте достойные альтернативы (хотя бы стандартные).
8 Написал(а) Баймер , в 15:58 05.12.2010 Комментарий Дглфы пропускаю, так как он не имеет отношения к данной теме. Вы не читали, а смотрели. AlexSyr дает наиболее аргументированные ответы. Одно НО - Вы таки не понимаете где и как можно применить идею, неверно понимаете ее цель. Я, не являясь спецом в области программирования,но могу и соглашаюсь с Вашими опытными высказываниями. Я не соглашаюсь с Вашей попыткой свои высказывания противопоставлять предложенной идее, т.к. пока нечего было сравнивать и получать противопоставления. Пока я не привел примеры, видимо Ваше направление в этом вопросе будет непоколебимо. Все, что пока могу предложить, так это обратить к Вам вопрос. А для чего Вы используете св-во Tag? Ответ "просто для поменток типа комментов" прошу опустить.
9 Написал(а) Баймер , в 22:44 05.12.2010 Пример 1. http://am.rusimport.ru/MsAccess/f2.aspx?id=5435 Некий Андрей столкнулся с ситуацией, которую с легкостью можно разрешить путем использования описанной идеи. В то время, как АлексейЕ предлагает создать строку прямо в коде обработчика события, я предлагаю использовать для этого свойство Tag.
10 Написал(а) Баймер , в 22:48 05.12.2010 http://am.rusimport.ru/MSAccess/topic.aspx?ID=94 IgorM описал возможный вариант ведения в строке именованвых свойств(параметров) и чтения их. Можно, конечно еще доработать, а так же добавить функцию изменения свойства(парамтера) - необходимо, когда свойство меняется кодом, что может потребоваться.