Форум: "Базы";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
ВнизДва вопроса по rxDBLookupCombo Найти похожие ветки
← →
Nax (2004-03-11 07:37) [0]D5-RxLib275-BDE-dBaseIV
Имеем таблицу t1 и числовое поле в ней t1Num.
Имеем таблицу t2 и в ней: числовое t2Num, символьное t2Name.
Для редактирования записи в t1 используем форму на которой есть rxDBLookupCombo, раскрывающийся список которого состоит из t2Name, а после выбора в t1Num записывается значение t2Num.
---------------------------------------------------------------
Поскольку при выборе значения в rxDBLookupCombo указатель в t2 сдвигается на выбранную запись, то я делаю просто:
t1Num.Value := t2Num.Value;
Вопос1: Работать-то работает, но правильно ли это? Или принято делать как-то иначе? Что-то подсказывает мне что это - коряво.
----------------------------------------------------------------
Вопрос2(главный): Как при активизации формы редактирования t1 присвоить rxDBLookupCombo.DisplayValue значение, в зависимости от значения t1Num.
----------------------------------------------------------------
Пока я вышел из положения, добавив в t1 символьное lookup-field, содержащее значение из t2Name в зависимости от t1Num (вычитал в Ксавье-Пачеко, D5, том 2, "Подстановочные поля").
Теперь при активизации формы редактирования я тупо подставляю значение lookup-поля в rxDBLookupCombo.DisplayValue. Работает!
Но по-моему это тоже коряво. Ибо держать в t1 целое символьное поле(100 знаков) только лишь для инициализации rxDBLookupCombo.DisplayValue жирновато. Тем паче, что таких полей у меня на самом деле - более десятка (я просто рассказал о единственном чтобы потом применить, по аналогии).
Спасибо за внимание!
← →
ЫЗШКШЕ (2004-03-11 08:08) [1]Кажись вопрос1 важнее вопроса2 ... точнее при решении вопроса1 актуальность вопроса2 приблизится к нулю .. Для решения вопроса1 продолжай чтение Ксавье
← →
Nax (2004-03-11 09:19) [2]>при решении вопроса1 актуальность вопроса2 приблизится к нулю ..
????????!!!!!!!!!!!
А хотя бы намекнуть, почему так????
>Для решения вопроса1 продолжай чтение Ксавье
Хороший совет. :-(
Вот был бы Ксавье в электронном виде - задал бы поиск по DBLookupCombo. (вот если бы, да кабЫ.....).
Может кто-нить хоть направление задаст, в котором надо копать?
← →
Nikolay M. © (2004-03-11 09:45) [3]
> t1Num.Value := t2Num.Value;
> Вопос1: Работать-то работает, но правильно ли это? Или принято
> делать как-то иначе? Что-то подсказывает мне что это - коряво.
Совершенно нормально. Главное, чтобы в rxDBLookupCombo не было выбрано пустое значение, иначе нет уверенности, на какой строке спозиционирована t2.
> Как при активизации формы редактирования t1 присвоить rxDBLookupCombo.DisplayValue
> значение, в зависимости от значения t1Num
if (t2.Locate ("Num", t1Num, [])) then
rxDBLookupCombo.KeyValue := t2Num.AsInteger;
Написал с ходу, не помню точно поведения rxDBLookupCombo, возможно, хватит только Locate-а.
← →
Nikolay M. © (2004-03-11 09:45) [4]Поправка
if (t2.Locate ("Num", t1Num.AsInteger, [])) then
rxDBLookupCombo.KeyValue := t2Num.AsInteger;
← →
ЫЗШКШЕ (2004-03-11 09:47) [5]Я так понимаю, у тебя одиноковые записи в двух таблицах хранятся (т1нум т2нум)!!! ... а это не есть гуд.
← →
Nax (2004-03-11 10:00) [6]Спасибо, Николай.
To Spirit:
> тебя одиноковые записи в двух таблицах хранятся (т1нум т2нум)!!!
Да, так и есть.
А как же связать две таблицы, как не использованием связующего поля (номерного, уникального)?
Так напИсано в любой книге. Иногда в качестве связующей (в книгах) городится третья таблица, но все равно в ней одно поле будет одинаковым по значению с первой, другое поле - со второй. Только алгоритм обработки такой связи будет сложнее. И таблиц больше.
Понятно, что практика отличается от теории, но все же: как связать две таблицы, если не так???? (ведь даже master-detail основано на одинаковых значениях в двух разных таблицах).
← →
Johnmen © (2004-03-11 10:09) [7]О чем вы все говорите то ???
При правильном использовании и rxDBLookupCombo и DBLookupCombo, т.е. при правильном указании их параметров, вообще ничего руками делать не надо !!! Вся функциональность поддерживается !
← →
SPIRIT © (2004-03-11 10:13) [8]
> Иногда в качестве связующей (в книгах) городится третья
> таблица,
Я не знаю структуры всей твоей базы и по нум1 и нум 2 ориентироваться сложно, но повторяющийся записи в разных таблицах - не есть хорошо, это тоже пишут в книжках !
> А как же связать две таблицы, как не использованием связующего
> поля (номерного, уникального)?
> Имеем таблицу t1 и числовое поле в ней t1Num.
> Имеем таблицу t2 и в ней: числовое t2Num, символьное t2Name.
про уникальность здесь ни слова и про связи тоже!
← →
Nax (2004-03-11 10:45) [9]> нум1 и нум 2 ориентироваться сложно
t1 - большая таблица судебных исков
t1.num - код категории спора
t2 - небольшой справочник возможных категорий спора
t2.num - уникальное, непустое
Множество записей ссылаются на единственную запись t2 по полю Num
На уровне таблиц связи м-ду ними нет, она опИсана в алгоритме (при редактировании, удалении итд итп). Разумнее, конечно, ,было использовать таблицы Парадокса, где можно описАть связь на уровне таблиц и возложить контроль целостности на сами таблицы (делал так и не раз, через Referential Integrity), но......
Условия ставлю не я. И одно из них - юзать таблицы dBaseIV.
Тут без одинаковых значений не обойтись.
>про уникальность здесь ни слова и про связи тоже!
>Я не знаю структуры всей твоей базы
Да, действительно. Потому что ни уникальность, ни структура базы, ни связи не имеют значения в контексте моих первых вопросов.
Если "неполнота" моего вопроса ввела кого-то в заблуждение - звиняйте, пытался как можно более детально описАть свою ситуацию. В следующий раз исправлюсь.
Я получил ответ. Спасибо всем!
← →
Nikolay M. © (2004-03-11 10:54) [10]
> Johnmen © (11.03.04 10:09) [7]
Хм. Может я тогда чего не знаю, хотелось бы просвятиться.
Интересно, как в дизайне сделать Вопрос2 из сабжа?
Попробую описать ситуацию своими словами:
есть мастер-DBGrid с кучей записей (клиенты). Для редактирования записей вызывается форма редактирования, для редактирования одного поля (тип клиента, допустим) используется DBLookupCombo, который тянет свой ListSource из дополнительного датасета (список типов клиентов). Вопрос: поскольку редактируется какая-то конкретная запись из мастер-грида, нужно, чтобы DBLookupCombo отображал тип этого самого клиента. Каким образом это можно сделать, не позиционируя руками датасет с типами клиентов на тип редактируемого в данный момет клиента?
← →
Johnmen © (2004-03-11 11:20) [11]>Nikolay M. © (11.03.04 10:54) [10]
Просто прописывается DataSource и DataField. Тогда позиционирование происходит неявно, т.е. "автоматом"... :)
← →
Nikolay M. © (2004-03-11 11:56) [12]
> Johnmen © (11.03.04 11:20) [11]
> >Nikolay M. © (11.03.04 10:54) [10]
> Просто прописывается DataSource и DataField. Тогда позиционирование
> происходит неявно, т.е. "автоматом"... :)
Ну, лажанулся, когда свой пример расписывал, а то непонятно? :)
А если список клиентов основаны не на датасете, а заполняются руками из текстового файла?
Ладно, я понял что ты имел ввиду, спасибо. Думал, может просто какие-то неизвестные мне пропертя есть.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.044 c