|
|
|
Подскажите как организовать пункт "Другое"
|
|||
|---|---|---|---|
|
#18+
Привет! Интересна организация вцелом. К примеру возьмем базу с какими-то критериями, отвечающими на какой-то вопрос. Построил базу Answerz, с полями Code (Integer AI) и Name c(20). Всунул это дело в комбу. В ответную базу (Resultz) предполагается вносить не Name, а само собой только Answerz.Code. А теперь самое главное - как замутить пункт "Другое", т.е. когда ни одно из перечисленных в Answerz не подошло и активировать юзеру поле для ввода кустомного ответа? Важна сама идея - как организовать, как и где хранить кустомные ответы? Скажем сделаю я в Answerz 8 преселектов и 9м пунктом "Другое". Но тогда теряется возможность внести какие-то любые дополнительные пункты. Т.е. Програмно придется привязатся к коду 9 - ввести кустомное, а следующие пункты, если захочется внести получатся тогда 10, 11 и тд? Неаккуратненько как-то. Придется вносить в прогу изменения, что мол кастом уже не на 9, а на 11... Или вязать комбу не на поля базы Answerz, а на что-то, полученное из базы Answerz, но с добавлением последним пунхтом - "Другое"... Тоже до конца не понятно. Что тогда вносить в Resultz, при выборе последнего пункта? Вносить каждый кустомный ответ в базу Answerz - тоже не пойдет. Хоть Integer AI и сработает на ура, но могут быть ответы, которые в будущем никогда не будут использоваться, а список будет увеличиваться. Вносить в Resultz ответ как символьная строка, взятая из Answerz.Name, вместо кода, тоже не дело. Получается нуда создать отдельную базу для кастомных ответов AnswerzCustom. В ей каждый ответ тоже кодить Integer AI, и в базу Resultz вносить код из нее... а если совпадут коды AnswerzCustom и Answerz? Тада получается 2 поля для ответа нада? Results.AnswCode и Resultz.AnswCCode. Т.е. либо код из стандарного списка, либо в другое поле код кастомного? Вот, HO это мои рассуждения, а как кто по-другому посоветует организацию таких вещей? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2007, 18:37 |
|
||
|
Подскажите как организовать пункт "Другое"
|
|||
|---|---|---|---|
|
#18+
Ну, ты и намудрил... Проще надо. Иди в своих рассуждениях не "из нутри", а "из вне". Т.е. рассуждай не "как хранить", а "как отображать". Что пользователь должен увидеть на экране? 1) Текст вопроса 2) Список вариантов ответа (почему ты решил, что это Combo, а не RadioButton?) 3) Текст ответа, если ни один из вариантов ответа его не устроил ИЛИ если он хочет ДОПОЛНИТЬ стандартный вариант ответа. Другими словами, пункт "Другое" вовсе не исключает один из штатных вариантов ответа. Скорее дополняет их. Тогда зачем вообще надо давать возможность выбора этого пункта "Другое"? Кстати, вариант ответа "Не знаю" предусматривается? В твоих рассуждениях есть принципиальная ошибка. Да, ты идентифицируешь запись по ее коду. НО! Ты одновременно пытаешся "навесить" на этот код какие-то еще функции. "Если код равен 9, то ...". Это принципиально недопустимая логика анализа данных. Цель кода записи - это однозначная идентификация записи. ВСЕ! Если необходимо произвести какой-то дополнительный анализ, то это делается по значению ДРУГИХ полей. В частности, если хочешь ввести вариант ответа, по которому производятся некие специфические действия, отличные действия при выборе других вариантов, то ДОБАВЬ ПОЛЕ, по значению которого и будет осуществляться этот выбор. Применительно к варианту ответа, таким полем может служить само поле с текстом дополнительного ответа. Если в нем что-то есть, значит, не выбрали ни один стандартный вариант ответа. Вот отсюда и "пляши". В таблице ответов есть ссылка на стандартный ответ и текст не стандартного. Пункт "Другое" - виртуальный. Появляется только на форме. Физически в базе данных не существует. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2007, 20:14 |
|
||
|
Подскажите как организовать пункт "Другое"
|
|||
|---|---|---|---|
|
#18+
Дык вот я и не хочу привязывать пункт9 на какое-либо отличное действие т.к. нутром чувствую что так не делается :) И что вариант ответа "Другое" в базе вообще присутствовать не должно логично вытекает из предидущего. Стало быть, как один из вариантов, можно при создании комбы втюхивать туда последним пунктом Другое, чтобы при выборе этого пункта комба возвращала 0 как валу. А програмно уж енаблить поле для ввода кастомного ответа привязываясь на 0 как значение которого не может быть в принципе. Что такое RadioButton я так и не допер, но как ваиант вижу еще использование OptionGroup, что мне не нравится по причине невозможности без програмного вмешательства добавлять пункты. В комбо - база, а в нее в любой момент можно добавить что угодно. Почему я рассуждал про вынос нестандарных ответов в другую базу - во-первых, не хочу держать в этой базе текстовое поле, значения в котором появляться будут лишь изредка. Впрочем есть мемо-поле - об этом я сразу не подумал как-то... Соответственно, если в поле "Вариант ответа", которое будет интегер АИ, будет стоять 0, то это знамение кастомного ответу! Тут я юзеру и вывалю значение мемо-поля. Остаецца тока придумать как втулять последним пунктом Другое. Наверное курсором readwrite с последующим append-ом сваво пунхта. Я на верном пути? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2007, 15:38 |
|
||
|
Подскажите как организовать пункт "Другое"
|
|||
|---|---|---|---|
|
#18+
Поглядел в гуглях на радиоБатоны - нет, не пойдет. Добавление амином дополнительного пункта ответа методом добавления в базу влечет за собой кучу лишнего минингита. Пускай лучше комбо будет - и места на форме займет гораздо меньше и проверять проще и програмить :) Тока вид будет некрасивый и непривычный... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2007, 15:44 |
|
||
|
Подскажите как организовать пункт "Другое"
|
|||
|---|---|---|---|
|
#18+
Вообще-то, динамически сформировать нужное количество RadioButton - не проблема. Их количество задается через свойство OptionGroup.ButtonCount. Выбор позиции прописывается не в каждой кнопке, а в самой группе OptionGroup.Valid. Надо будет только ручками прописать свойство Caption для каждой кнопки и опять же ручками сделать перекодировку из порядкового номера кнопки в код записи. Ну, еще изменить размер, чтобы все влезло Использовать значение 0, как "Другое" можно, но только если нет значения "не выбрано". Т.е. для тебя "Другое" == "Не выбрано". По сути, ты опять "закладываешся" на конкретное значение. Только вместо 9 используешь значение 0. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2007, 22:03 |
|
||
|
Подскажите как организовать пункт "Другое"
|
|||
|---|---|---|---|
|
#18+
А я не дам юзьверю нажать кнопку "Зарегистрировать"/"ОК" пока все что надо не укажет, втч это уберет проблемку "Невыбрано" :) А с этим OptionGroup опять же - еси много пунктов станет то есть опасность что на форму не влезет, т.е. нужно предусматривать автоувеличение и формы и самого OptionGroup под это дело, а вот этим я уже совсем не хочу морочицца - уровень слабоват - все формы в форм-дизайнЁре рисую. Вообще-то, по-большому счету, что комбо, что OptionGroup - одна фигня. Просто обычно в OptionGroup сразу выбран первый пункт, что можно исправить, но что можно и в комбо замутить посредсвом Default Value = 1. Просто OptionGroup выглядит на мой взгляд несколько более эстетично, чтоли, да и показывает сразу все возможные варианты. Про привязку к 0, оно-то так, но и как я уже говорил, 0 - несуществующее значение в базе, кроме того, в OptionGroup разве не то же самое получится? Просто там будет привязка на последнее значение, то же можно и в комбо замутить, тока не знаю как. Наример добавить ему свойство "Custom" и ставить в него значение RECCOUNT(), т.е. последнего пунхта, опосля чего сравнивать выбранное с оным... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.01.2007, 10:37 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=34253690&tid=1590028]: |
0ms |
get settings: |
9ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
161ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 227ms |
| total: | 480ms |

| 0 / 0 |
