Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.11;
Скачать: CL | DM;

Вниз

Два вопроса по 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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.03 c
3-1081751096
_sulent
2004-04-12 10:24
2004.04.11
SQL Server


1-1082447654
Top100
2004-04-20 11:54
2004.04.11
Уничтожение формы


3-1081621962
Rosik
2004-04-10 22:32
2004.04.11
Подскажите пожалуйста! Как в DBgrid в title картинку вставить


3-1081679405
Крутыш
2004-04-11 14:30
2004.04.11
Не работает скроллинг!!!


11-1060108839
Юджин
2003-08-05 22:40
2004.04.11
Народ нужна помощь, проблема с установкой и работой компонентов