Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / lookup-поле / 13 сообщений из 13, страница 1 из 1
29.11.2003, 11:49
    #32338401
july_p
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
lookup-поле
Здравствуйте!

У меня два набора:
dataset2 - хранимая процедура, выбирает записи по параметру
dataset1 - таблица БД
dataset1 содержит lookup-поле - источник dataset2

Мне нужно чтобы значения lookup-поля, выбранные ранее, сохранялись независимо от того, существуют ли записи с такими значениями в dataset2 на данный момент или нет.
Подскажите как это сделать?
...
Рейтинг: 0 / 0
29.11.2003, 13:00
    #32338418
Случайный прохожий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
lookup-поле
По моим понятиям надо источник менять.
...
Рейтинг: 0 / 0
29.11.2003, 16:50
    #32338478
oleg_e
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
lookup-поле
Наверное тогда нужно использовать не лукап поля, а вставку значений.
Но это не очень хорошо.
...
Рейтинг: 0 / 0
29.11.2003, 21:40
    #32338526
july_p
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
lookup-поле
Почему плохо? Как можно сделать лучше?

TABLE "COUNTRY" /*CountryDataset*/
(
"COUNTRY_ID" (PK)
"COUNTRY_NAME"
)

TABLE "CITY" /*CityDataset*/
(
"CITY_ID" (PK)
"CITY_NAME"
"COUNTRY_ID" (FK)
)

TABLE "HOTEL" /*HotelDataset*/
(
"HOTEL_ID" (PK)
"HOTEL_NAME"
"COUNTRY_ID" (FK)
"CITY_ID" (FK)
)


HotelDataset:

"HOTEL_ID"
"HOTEL_NAME"
"COUNTRY_ID"
"CITY_ID"

"countryname" /*название и код страны из "COUNTRY" */
FieldKind = fkLookup
KeyFields = "COUNTRY_ID"
LookupDataset = CountryDataset
LookupKeyField = "COUNTRY_ID"
LookupResultField = "COUNTRY_NAME"

"cityname" /*это то самое, которое не получается*/
FieldKind = fkLookup
KeyFields = ?
LookupDataset = ?
LookupKeyField = ?
LookupResultField = ?

Я хочу, чтобы в списке выбора cityname были только те города, которые есть в стране.
Может быть у меня таблицы построены неправильно? Потому что в книге я подобных примеров не нашла.
...
Рейтинг: 0 / 0
29.11.2003, 22:52
    #32338555
Случайный прохожий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
lookup-поле
Добавьте TQuery:
Name = CityInCountryDataSet
DataSource=CountryDataset
SQL = 'SELECT * FROM City'

Тогда все получится так:
"cityname" /*это то самое, которое не получается*/
FieldKind = fkLookup
KeyFields = City_ID
LookupDataset = CityInCountryDataSet
LookupKeyField = City_ID
LookupResultField = City_Name

В таблице HOTEL поле Country_ID лишнее.
...
Рейтинг: 0 / 0
30.11.2003, 00:20
    #32338574
Случайный прохожий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
lookup-поле
Виноват одну строку написал не правильно:

SQL = 'SELECT * FROM City WHERE Country_ID=:Country_ID'
...
Рейтинг: 0 / 0
30.11.2003, 20:03
    #32338808
july_p
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
lookup-поле
Вы правы, TQuery подходит лучше. Но с полем осталось по прежнему.
Мне хотелось, чтобы названия вводились и отображались в одном и том же поле(cityname),
но показываются только те, которые есть в CityInCountryDataset
Если к примеру

Гостиницы(HotelDataset):
1 Гостиница1 Китай Суйфуньхэ
2 Гостиница2 Китай Харбин
3 Гостиница3 Япония Токио

Результат запроса(CityInCountryDataset):

Ниигата Япония
Токио Япония


то Гостиницы будут выглядеть так:

1 Гостиница1 Китай
2 Гостиница2 Китай
3 Гостиница3 Япония Токио

Но, я так думаю, если страна здесь не нужна, можно успокоиться и
выбирать города из CityDataset.

Тогда я ничего не понимаю с этой нормализацией: получается, что
в следующей таблице будут лишними поля CITY_ID и COUNTRY_ID,
но ведь по смыслу они более важны, чем HOTEL_ID,
если допустить, что заполнение HOTEL_ID необязательно?

TABLE "TOUR"
(
"TOUR_ID" (PK)
"CITY_ID" (FK)
"COUNTRY_ID" (FK)
"HOTEL_ID" (FK)
)
...
Рейтинг: 0 / 0
30.11.2003, 20:30
    #32338812
Случайный прохожий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
lookup-поле
Все таки не до конца понял, что Вы хотите получить.

1. Чтобы при просмотре таблицы HOTEL отображались все города.
2. При вводе города в ComboBox в выпадающем списке были города одной страны.

Если я правильно понял подтвердите, если нет объясните.
...
Рейтинг: 0 / 0
30.11.2003, 20:39
    #32338815
july_p
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
lookup-поле
Все верно, только у меня DBGrid для ввода и просмотра.
...
Рейтинг: 0 / 0
30.11.2003, 21:19
    #32338821
Случайный прохожий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
lookup-поле
Простого решения не вижу.
Есть 2 способа:

1. Сделать DBGrid нередактируемым, создать 3 кнопки: <Добавить>, <Изменить>, <Удалить>, по <добавить> и <изменить> открывается окно с полями ввода, поле город DBLookupComboBox. при открытии окна LookupDataSet меняется с CityDataset на CityInCountryDataset, при закрытии обратно. Следует предусмотреть изменение CityInCountryDataset при изменении Country_ID.

2. Без окна. На Query для HOTEL определить событие AfterScroll (срабатывает при изменении текущей записи), в нем заполнить свойство PickList, списком из CityInCountryDataset. Изменение PickList следует предусмотреть при изменении Country_ID.
...
Рейтинг: 0 / 0
30.11.2003, 23:19
    #32338838
july_p
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
lookup-поле
Спасибо, все получилось. А как быть с таблицами?
...
Рейтинг: 0 / 0
01.12.2003, 14:29
    #32339463
Void!
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
lookup-поле
В таблице

TABLE "HOTEL" /*HotelDataset*/
(
"HOTEL_ID" (PK)
"HOTEL_NAME"
"COUNTRY_ID" (FK)
"CITY_ID" (FK)
)

поле "COUNTRY_ID" не нужно
...
Рейтинг: 0 / 0
02.12.2003, 19:17
    #32341250
july_p
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
lookup-поле
Спасибо, исправлю.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / lookup-поле / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]