![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Lookup или не lookup - вот в чём вопрос (программирующий Гамлет) [D6, D7, MSSQL]
31512 © (2004-02-11 14:40:00)
Проблема заключена в заставлении DBGrid работать так (или примерно так), как это сделано в Access. Итак есть на MS SQL Server 2000 база данных. В базе данных имеется несколько таблиц, связанных отношениями. Например пусть есть
таблица "Организации", с полями:
"Наименование организации"- ключевое поле (nvarchar(255)),
"Юридический адрес" (nvarchar(255)), и т.д. (атрибуты организации).
Вторая таблица "Регистрационные номера"с полями "Регистрационный номер"- ключевое поле (nvarchar(255)), "Наименование организации"(nvarchar(255)) - оно берётся из таблицы "Организации". Таблицы, естественно связаны отношением один-ко-многимВот так:
Организации1------------| Регистрационные номера
Наименование организации| Регистрационный номер
Юридический адрес |-->Наименование организации
ПолеX $ ПолеY
ПолеY ПолеZ
ПолеZ .
. .
. .
.
Значок $ заменяет значок бесконечности...
Первое: является ли поле [Регистрационные номера].[Наименование организации] lookup полем?
Ясно что что в нём хранятся значения ключевого поля таблицы Организации. Если бы в Организацииключевым полем был бы "Счётчик", то в Регистрационные номера].[Наименование организации] хранились бы соответсвующие значения это счётчика из таблицы Организации.
Второе: как заставить DBGrid поступать так же как это делает редактор в Access?.
Ведь Access формирует на клетке сетки Комбобокс, а из него выбираются значения поля подстановки ( не значения ключевого поля).
Плохиш (2004-02-12 10:41:00) [21]
> 31512 © (12.02.04 10:31) [12]
> Блин, ну трудно объясняться на расстоянии
Блин, ну ни фига себе, угрозы пошли.
31512 (2004-02-12 10:31:00) [22]
Для Sergey13
Просто хотелось упростить проблему. То есть вообще решить задачу, для любых баз данных MS SQL Server 2000. Блин, ну трудно объясняться на расстоянии.
Sergey13 (2004-02-12 10:11:00) [23]
231512 © (12.02.04 09:51) [9]
>Ты не прав в корне.
1. Я прав всегда
2. Если я не прав см. п.1
8-)
>Это пример, возможно, неудачный
Да уж.
>Забудь про 1С
А что это?
>Первое: является ли поле [Регистрационные номера].[Наименование организации] lookup полем?
Как ты сделаешь в апликухе, так и будет. Сделаешь лукапом, будет им (но скорее не им а полем связи для лукапного поля, если я не запутался в твоих именах полей 8-). Вставишь в запрос, не будет лукапом.
>Второе: как заставить DBGrid поступать так же как это делает редактор в Access?.Ведь Access формирует на клетке сетки Комбобокс
Я уж не помню как в стандартном гриде (давно не юзал), в EhLib-овском вроде будет так же.
>Вопрос прост: как заставить DBGrid работать так как это сделано в Access.
Вот и изъяснялся бы попроще (не по Гамлетовски 8-) - как вделать в грид комбобокс. Было бы проще. ИМХО. А то ... ту би не ту би. Как в Аксес да на МS SQL. Нет у меня этого аксеса на МS SQL.
8-)
Соловьев (2004-02-12 09:56:00) [24]
чтобы в сентке появилось выпадающий список - надо сделать новое поле Lookup и при редактировании автоматически будет список
31512 (2004-02-12 09:51:00) [25]
Для Sergey13!!!!
Для начала хочу сказать спасибо что откликнулся.
Ты не прав в корне.
Во-первых
Это пример, возможно, неудачный, на самом деле всё сложнее. Я лишь пытался облегчить понимание проблемы. Я не просил анализировать пример базы данных. Базу данных я давно сделал и к ней претензий нет. Она не имеет отношения к продавцам, покупетелям и т.д. Ещё раз, это просто пример, от балды...
Во-вторых
Забудь про 1С. Нет её. Просвоение регистрационного номера - это операция. Этому соответсвует целая кипа государственных докумунтов и сам номер не просто набор цифр. Тоже самое относится и к отмене регистрационного номера. Поясню: даже если организация исчезла с лица планеты, то регистрационный номер за неё всё равно остаётся. И его нельзя присвоить другой организации. Отмена регистрационного номера - операция(тоже с кипой документов).
В третьих
Вопрос прост: как заставить DBGrid работать так как это сделано в Access.
Sergey13 (2004-02-12 09:04:00) [26]
to 31512 © (11.02.04 14:40)
Че то, сдается мне, ты напутал при проектировании, а решаешь проблему с гридом. Какое поле у тебя ПК?
>"Наименование организации" - ключевое поле (nvarchar(255))
А завтра название поменяли, и что? Все перелопачивать? Я уж не говорю про производительность такого ключа.
Регистрационные номера - их может быть сколько угодно, или все таки ограниченное количество? Есл второе, я бы прямо в первую таблицу вставил. Да и вообще, что организация является продавцом, покупателем или производителем, ИМХО, должно следовать из ОПЕРАЦИИ (продажи, покупки...). Иначе не исключены возможности записи продажи на покупателя и наоборот.
31512 (2004-02-12 08:46:00) [27]
Для Anatoly Podgoretsky. Нет, один ко многим. Каждое предриятие может иметь несколько регистрационных номеров.
31512 (2004-02-12 08:44:00) [28]
Для VLAD-MAL:
Да, много. Приведу пример:
Супермаркет "Рамстор" имеет регистрационный номер X как производитель товара, регистрационный номер Y как покупатель товара, регистрационный номер Z как перепродавец товара. Так очень удобно классифицировать организации. Могу дать детальные пояснения.
Shaman (2004-02-11 15:31:00) [29]
используй join в запросе
VLAD-MAL (2004-02-11 14:50:00) [30]
Ой, блин, чего это я?
Не TDBLookupComboBox, конечно же, а Lookup - поля!
Anatoly Podgoretsky (2004-02-11 14:48:00) [31]
Это все таки один ко одному связь
VLAD-MAL (2004-02-11 14:45:00) [32]
TDBLookupComboBox
---------------
Интересно, у тебя что, у одной организации много рег. номеров может быть?
Fiend (2004-02-11 14:45:00) [33]
самому надо анализировать таблицу и добавлять лукап поля. Ничего сложного. Я такое делал, тока для ФБ