Rambler's Top100
Российский фонд помощи
Навигация
Главная
MS ACCESS
VB
ASP
PHP
Наши друзья
Поиск
Форум
Лента новостей
Новый сайт

Online
Рассылки Subscribe.Ru
Работа с MS Access
Подписаться письмом
Реклама на сайте
 
Главная arrow MS ACCESS arrow Использование дополнительных свойств объектов
Использование дополнительных свойств объектов Печать E-mail
Автор Артем Золотинин [Баймер]   
03.12.2010 г.
Оглавление
Использование дополнительных свойств объектов
Страница 2
Страница 3

Публикуя данную статью преследую одну главную цель – раскрыть для Вас свою идею по организованному ведению собственных свойств объектов Access (контролов, форм и т.д.).

Задачи, решаемые при реализации идеи:

  1. Расширение свойств объекта с быстрым к ним обращением.
    Медленная альтернатива – создание таблицы [Тип объекта][Расположение объекта][Наименование объекта][Наименование свойства][Значение свойства].

  2. Быстрое и удобное изменение переменных, используемых при отрабатывании событий объекта. Обращение производиться через панель «Окно свойств».
    Обычно приходится открывать код vba и изменять данные. Мы можем использовать альтернативу из п.1 или создавать спец поля на форме, но это часто неудобно.

  3. Другие.


Область применения:

  1. Универсализация часто используемых объектов (групп объектов).
    Пример1 Вы сделали кнопку [=] (см. Пользовательские свойства.accde), которая приравнивает значение одного поля к другому. Теперь не надо создавать ее повторно на другой форме, копировать код обработчика vba (при копировании vba обработчик не наследуется), не надо подстраивать код обработчика в редакторе vba. Достаточно изменить собственное поле панели «Окно свойств».
    Пример2 Совершенствование функций ведения справочников http://hiprog.com/index.php?option=com_content&task=view&id=251661641&Itemid=35

  2. Обработка особых сиуаций
    Пример2 в бухгалтерской очетности в столбце с балансом нужно выделять отрицательные значения цветом шрифта или фона, например. Тогда RGB код цвета для обычно и такой ситуации можно хранить с своем поле, а при вычислении значения поля (обработчик события) копировать в свойство цвета текста или фона значение своего поля.

  3. Другие.


Как реализуется:

У всех объектов access есть свойство Tag (Дополнительные сведения). Свойство создано для ведения комментариев, но некоторые его используют в других целях, как и я.

Предлагаю разбить логически (через разделитель) свойство tag на массив элементов, которые будут выступать значениями собственных свойств, например через пробелы, запятые, фразы типа «Свойство1:»

Примечание: последнее решение более наглядно, но потребует доработки кода функции. Т.е. строка Tag= «Свойство1: , 123 , Свойство: , Текст» будет читаться функцией как 4 значения 4 свойств, но программно мы выкидываем нечетные, т.е. названия свойств. Соответсвенно функция чтения свойства GetParametr(2) должна обратиться к 4-му элемент Tag.

Таким образом пример 1 области применения реализуется путем указания через разделитель (в моем accde это пробел) в свойстве объекта Tag названия полей «txt1 txt2». При нажатии на кнопку значение txt2 копируется полю txt1.
Примечание: пример ценности такого примера – копирование значения Поставщика счета Получателю средств по платежу на обстрактной финансовой форме исходящего счета.

А для того, чтобы копировать кнопку на другие формы достаточно реализовать обработчик в виде макроса, выполняющего функцию. Функция – фактический обработчик на vba с применением своих свойств в виде функцию. Теперь кнопка легко копируется с формы «Мои контролы для форм» на другие формы.


Комментарии автора:

Делюсь своей идеей и надеюсь, что она найдет отзыв читателей. Идею я придумал сам. Если кто-то уже подобное придумывал или встречал, то это не более чем совпадение, причем, буду рад на ссылку – приятно найти единомышленника. В таких случаях изобретения исторически обычно получают двойное имя ;)
Я являюсь любителем в программировании, это не моя область, и развиваться в ней я не планирую. Буду рад, если читатель возьмется ее развить и опубликовать свою реализацию, конечно, с указанием автора самой идеи желательно ;).


Спасибо.

© Артем Золотинин [Баймер]

Приложение. Мысли по развитию:

  1. Реализовать ведение «Tag= «Свойство1: , 123 , Свойство: , Текст» (см. статью)

  2. Реализовать возможность задания используемого разделителя на спец форме для параметров функции.

  3. Реализовать код функции, изменяющей заданное свойство.

  4. Реализовать таки использование идеи в авторской реализации функции ведения справочников http://hiprog.com/index.php?option=com_content&task=view&id=251661641&Itemid=35.
    с чем я уже успел обратиться к ее автору в комментарии в лице «Baimera ;)


Пример реализации. Download now

 


Просмотров: 11453

  Коментарии (26)
 11 Написал(а) Баймер, в 23:00 05.12.2010
Пример 2. 
 
Один из Вариантов реализации мультиязыкового интерфейса.  
Согласно описанной идеи в свойствеTag храняться Подписи (подписи к полям, подписи форм и т.д.) на разных языках. Легко получить значение, легко изменить или добавить. 
 
В случае реализации именованных параметров нам даже не требуется соблюдать порядок и правила разделения параметров в Tag. Например строка такая (* - любые символы, &/# - любой специфичный символ, принятый для начала/окончания значения свойства(начала свойства)): "*******&Lrus:Фирма#******&Leng:Firm#****". 
 
Надеюсь не найдется желающего критиковать метод реализации мультиязыкового интерфейса, т.к. я встречался с описанием самых разнообразных способов, и не думаю, что стоит пытаться указать из них лучший ;)
 12 Написал(а) AlexSyr, в 23:34 05.12.2010
:grin :grin :grin  
Теперь я немного начал понимать. 
Вот что я Вам скажу. Это все от незнания основ ООП и нежелания изучать эти самые основы. Один раз получилось ну и давай всем советовать. Знаю - сам таким был. И именно на этом сайте (за что его и уважаю) и именно Дглфы(Lukas), комментарии которого Вы "...пропустили...", меня просветили (за что им всем респект и уважуха) - научили не чесать левое ухо правой ногой. :grin  
Если Вы захотите немного просветиться, а не ссылаться на БРЕД прочтите хотя бы вот эту ветку: http://www.sql.ru/forum/actualthread.aspx?bid=4&tid=768364&hl=. 
 
P.S. Да, и почитайте почту - отправил набросок кода в качестве ответа на все Ваши предыдущие посты.
 13 Написал(а) AlexSyr, в 23:43 05.12.2010
Кстати посмотрите на даты указанных Вами ссылок. 
Там от души радуются что появилась функция Split :grin :grin :grin  
Может быть от этого все недопонимание - что было хорошо 7 лет назад сейчас уже ... ;)
 14 Написал(а) AlexSyr, в 00:11 06.12.2010
По поводу "...мультиязыкового интерфейса..." попробуйте написать Вашим способам (или просто на кнопке написать) что нибудь по китайски или даже просто не установленным в системе шрифтом. И скрин в студию. :?  
И способы уже давно придуманы: у того же MS есть Dynamics AX, так там можно писать, насколько я помню, не буковки, а ссылки на надпись, а уже в ссылочном файле к ссылке привязывать написание для различных языков. Применительно к MSA - это ссылочная таблица. Это же гораздо удобнее, чем лазить по всем формам и корректировать Tag'и.
 15 Написал(а) Баймер, в 00:52 06.12.2010
Ага, все-равно началось обсуждение примера с языком)  
Нас не интересует ничего кроме аксес в данном случае. 
На счет ссылочной таблицы - так можно сделать таблицу в проге, таблицу на сервере ( или удаленном файле аксеса, принятого за БД), в отдельном файле и т.д. Ни кто не говорит, что это плохие решения. 
Удобнее? Сомневаюсь, что всегда. А тут ты видишь, что переводишь. 
 
Придумается может более приминительный пример)
 16 Написал(а) Баймер, в 01:54 06.12.2010
Пока загорелся, напишу еще примерчик, пришедший в голову (вернее пачка примерчиков) 
 
Пример 3. 
 
Скажем у нас есть в программе на множестве разлиных форм поля (кнопки и т.д.), которые можно условно объединить в различные группы. И бывают такие ситуации, когда сразу для всех полей одной группы нужно изменить какие-то параметры (цвет шрифта и т.д.). Мы можем с легкостью произвести разделение по группам путем указания некоторой идентификатора группы в поле Tag (число, фраза и т.д.). Тогда при необходимости поменять для всех свойство достаточно прогнать функцию изменения параметра для всех полей, у которых идентификатор такой-то. Удобно? Думаю да. Свойство Tag используется один раз. 
 
Далее. Мы реализуем в проекте ведение аудита текстовых полей. Т.е. если пользователь изменил какое-то значение на форме (дату счета, название клиента и т.д.), то в таблицу аудита записывается (самый примитив) имя пользователя, наименование поля, предыдущее значение, новое значнение. Мы можем использовать свойство Tag (немного похожий, а может и такой же - не припомню, пример описан в книге Гроха). Когда пользователь изменяет первоначальное при открытии формы значение поля, то первоначальное значение записывается в Tag. Затем пользователь может несколько раз менять менять значение (в т.ч. и вернуть к обратному). При закрытии формы производится анализ значения нового значения поля и значения в Tag: если значения не совпадают, то производится запись в таблицу аудита и запись сохраняется, а если совпадают, то ни первое, ни второе не требуется. Все мы понимаем необходимость такой проверки? Ведь если мы будем производить сохранение записи при каждом закрытии формы, или при наличии просто факта изменения поля, то при работе по сети такой подход может стать для нас боком ;)
Tag используется второй раз. 
 
Далее. Думаю интересный вариант реализации мультиязыка. В поле Tag храниться 2 параметра: а) Значение подписи на русском языке (пусть изначально программа русская), б) уникальный для всей программы идентификатор поля. 
Подпись у поля изначально русская и совпадает с значением в Tag. 
Есть таблица со значениями на разных языках (xml, таблица в этой базе или другой и т.д.). В этой таблице есть колонка с идентификатором (см. идентификатор Tag) и колонками для значений на разных языках (пусть такой примитивный пример). Кода пользователь меняет желаемый язык, запускается процедура, которая сопоставляет идентификаторы и производит соответсвующие замены подписи полей (объетов), т.е. перевод программы. Ву а ля, программа переведена). 
Вдруг файл с языками поврежден (отсутсвует, удален и т.д.). В таком случае выполняется процедура, которая восстанавливает русское значение из Tag. 
А представьте как можно перевести программу: ходишь по формам и изменяешь значение подписи как считаешь нужным. Затем запускаешь процедуру, которая анализирует значение идентификатора в Tag и новое значение подписи и на основании этих данных создает таблицу (добавляет в существующую) с разными языками. ВОТ ТАК ДА: новичок придумал вариант перевода программы на другой язык ;). А все благодаря обсуждению. 
Tag используется третий и четвертый раз. 
(Примечание: можете сколько угодно утверждать, что намного легче открыть таблицу с языками и изменить\добавить в ней значение, но я с этим в большинстве случаев не соглашусь. 
В переводе 2 участника - разработчик, лучше всего знающий работу продукта, и переводчик, т.к. не все разработчики полиглоты. В вот они сидят, смотрят на форму, разработчик поясняет для чего нужно то или иное поле, а переводчик, понимая истинное значение поля, предлагает перевод. Наверное это идеальная для перевода схема. 
А вот словарный перевод в таблице оставьте для непрофессиональных решений.) 
 
Далее можно не продолжать, так как каждый может для Tag придумать свои доп. свойства объектов. Сам факт, что можно найти множество применений этому замечательному свойству Tag. 
Не уж-то кто-то хочет резко высказаться вообще об использовании Tag???? :?  
 
Вывод: в свойстве Tag может вестись множество свойств(параметров), которые просто необходимо организовать. Вот это и раскрывается в идее - реализовать схему качественного ведения доп. свойств объектов. Т.е функции(процедуры, классы и т.д.), возволяющие обращаться к доп. свойствам, изменять их, добавлять и т.д. 
Хотите вести все свойства в классах, таблицах и т.д. - ведите, я не против. Но найдутся люди, которые будут использовать поле Tag (именно поэтому, AlexSyr, я задал Вам вопрос об использовании свойства Tag ;) 
 
Надеюсь все помнят, что свойство Tag находится в самом эксес 2007\2010 на правой панельке "Окно свойств" (вызвается как свойства объекта), вкладка "Другие" и называется на русском "Дополнительные сведения"? Это к тому, на сколько легко к нему обратиться.
 17 Написал(а) Дглфы, в 11:52 06.12.2010
Вы пытаетесь представить использование тега как совершенное вами "открытие". 
Не смешите людей.  
Они его (тег) пользуют давно, причем значительно эффективнее, чем все ваши примеры. 
Все-таки в перерыве между "открытиями" полистайте Гетца и его классы сборки/парсинга строки атрибут-значение и ресайзинга форм. 
Единственное новшество от вас (описанное в первом примере) - использовать тег+макрос+функции для копирования значения одного поля формы в другое, есть УГ. 
 
Кстати, по 3 вашему примеру и аудиту полей: 
1. Откройте для себя префиксы и коллекции. 
2. Откройте для себя свойство OldValue. Абсолютно бессмысленно использовать тег для записи старого значения.
 18 Написал(а) Баймер, в 13:22 06.12.2010
Дглфы, второй раз Вы высказываетесь совершенно не в тему. Это уже начинает выглядеть странным. Постарайтесь оставить в теньке свое высокое Я и почитать статью, перед тем как писать свои комментарии. Думаю излишне перегружать тему подобного рода сообщениями. 
 
По поводу Гетца. На сколько я понял Вы бывалый пользователь ресурса, потому вполне знаете, где можно рекомендовать какую-либо литературу по тематике. Многократные же попытки ссылаться на один и тот же источник здесь выглядят не более чем спамом или флудом.
 19 Написал(а) Дглфы, в 14:03 06.12.2010
Цитаты:  
"...раскрыть для Вас свою идею..." 
"...Идею я придумал сам. Если кто-то уже подобное придумывал..." 
"...конечно, с указанием автора самой идеи..." 
 
И вы упрекаете меня в высокомерии? :grin  
 
Мои высказывания "...совершенно не в тему..." кажутся только вам. 
А что вы ожидали? - "О *ля!!. Мы тут 10 лет базенки клепаем и не знали что есть такой тег и что его можно использовать оказывается!! Вот спасибо, друг, открыл глаза!"? :grin  
 
А ссылки на Гетца будут и впредь, потому как эти издания есть классика жанра, наиболее авторитетная, уважаемая и доступная (имеется в виду физическое наличие книг или электронных копий). 
Если вы считаете отсылки к классике (причем по конкретной обсуждаемой тематике) спамом ли флудом - это ваши проблемы. 
 
Все ваши потуги с примерами пользования вашего "открытия" имеют куда более грамотные варианты реализаций, включая тот-же многоязычный интерфейс. 
 
Вы изобрели велосипед, причем на квадратных колесах. 
Если вам удобно на нем ездить, без проблем, катайтесь.
 20 Написал(а) Баймер, в 14:39 06.12.2010
Серьезно, доходит до смешного. 
 
Дглфы, ГДЕ вы в статье или переписке видели, что мною было присвоено открытие свойства Tag? Не уж то вы так слепо составили обо мне картину, что уже и не хочется открывать глаза??? 
 
К сожалению, случайно стер сочинение, которое адресовалось Вам... Хотя оно и к лучшему - зачем Вам пояснять почему Tag в приведенном примере лушче чем OldValue :? 
 
В качестве исключения все-таки чуток прокомментирую это Ваше резкое высказываений по поводу OldValue. Утверждаю, что в приведенном мною примере использование свойства Tag является более качественным решением поставленной задачи. 
Почему? А вот теперь Вы почитайте литературу (а после Вашего коммента мне это и пришлось сделать) и попробуйте сами себе ответить на этот вопрос. 
 
>Вы изобрели велосипед, причем на квадратных колесах.  
>Если вам удобно на нем ездить, без проблем, катайтесь. 
Как же Вы можете быть так слепы, что позволяете себе такие Высказывания! В тексте нет ни одной записи указывающей на мое слепое изобретение велосипеда. Единственное что я пометил, что возможно мою едею кто-то уже некогда придумал, причем я буду рад за предоставление источника. НО Вы до сих пор так и не поняли этой идеи. 
 
Касательно введения мультиязыкового интерфейса. На текущем ресурсе есть примеры?(есть один, но менее качетсвенный. Возмножно из-за давности. Как ни как 2002 год!) 
У Вас есть пример свой? А чегож не оформили для нас - простых людей? 
 
По поводу флуда - ну научитесь читать комменты оппонента! В сравнение со спамом/флудом приводится Ваше много кратное приведение источника в тексте, направленное одному лицу.  
 
Дглфы, если Вы являетесь Lukas'ом, то не портите впечатление о себе.


 
Реклама на сайте
HiProg.com - Технологии программирования
Rambler's Top100 TopList