Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.49 MB
Время: 0.04 c
14-1079269686
Undert
2004-03-14 16:08
2004.04.11
А в форуме ведётся статистика по количеству написанных сообщений?


1-1082632603
КомофОнСамый
2004-04-22 15:16
2004.04.11
Печать через QuickReport текствого файла с предв. просмотром


7-1080227639
Seldon
2004-03-25 18:13
2004.04.11
Блокировать сообщение в хуке.


6-1079338786
Аноним
2004-03-15 11:19
2004.04.11
TClientSocket, TServerSocket


1-1079823329
НерВ
2004-03-21 01:55
2004.04.11
Не выполняется On Close





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский