![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() |
НарКот |
![]() ![]()
Сообщение
#1
|
Группа: Пользователи Сообщений: 7 Пол: Мужской Репутация: ![]() ![]() ![]() |
Имеется база данных в Access и доступ ней через ADO
Таблица Болезней (Bolezni) связана с Таблицей симптомов (Simptomi) как "many-to-many" через промежуточную таблицу Codes_1 Выглядит это так "Bolezni" Kod_bolezni Nazvanie_bolezni 1 Аритмия 2 Атеросклероз 3 Гипотония и т.д. Simptomi Kod_simptoma Nazvanie_simptoma 1 Нарушение ритма сердца 2 Боли в животе 3 Боли в пояснице 4 Температура и т.д. Codes_1 Kod_bolezni Kod_simptoma 1 1 2 1 2 4 1 3 и т.д. Bolezni связана с Codes_1 как один ко многимпо полю Kod_bolezni Simptomi связана с Codes_1 как один ко многим по полю Kod_simptoma Я хочу бы чтобы по выбору нескольких симптомов из Simptomi в ListView1 происходил бы выбор соответствующих болезней Сам ListView1 я заполняю при активации формы так Код procedure TMainForm.FormActivate(Sender: TObject); var NewColumn: TListColumn; begin ListView1.ViewStyle:=vsReport; ListView1.RowSelect:=true; NewColumn := ListView1.Columns.Add; NewColumn.Caption := ''; NewColumn := ListView1.Columns.Add; NewColumn.Caption := 'Название симптома'; ListView1.Columns[0].Width:=17; ListView1.Columns[1].Width:=200; FindQuery.SQL.Text:='SELECT Nazvanie_simptoma, Kod_simptoma FROM Simptomi'; FindQuery.Open; While not FindQuery.Eof do begin ListView1.Items.Add; ListView1.Items[FindQuery.RecNo-1].SubItems.Add(FindQuery.FieldByName('Nazvanie_simptoma').AsString); ListView1.Items[FindQuery.RecNo-1].Caption:=FindQuery.FieldByName('Kod_simptoma').AsString; FindQuery.Next; end; end; Где поле Kod_simptoma невидимо. Оно будет необходимо для другого запроса. Теперь я сделал SQL-запрос для вывода в ListView2 всех болезней соответствующих выбранным симптомам и повесил на кнопку Код procedure TMainForm.Button1Click(Sender: TObject); var NewColumn: TListColumn; begin ListView2.ViewStyle:=vsReport; ListView2.RowSelect:=true; NewColumn := ListView2.Columns.Add; NewColumn.Caption := 'Код болезни'; NewColumn := ListView2.Columns.Add; NewColumn.Caption := 'Название болезни'; ListView2.Columns[0].Width:=17; ListView2.Columns[1].Width:=200; BolezniQuery.SQL.Text:='SELECT distinct Nazvanie_bolezni FROM Simptomi INNER JOIN (Bolezni INNER JOIN Codes_1 ON Bolezni.Kod_bolezni = Codes_1.Kod_bolezni)' +'ON Simptomi.Kod_simptoma = Codes_1.Kod_simptoma WHERE (Codes_1.Kod_simptoma) In & #40;1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,2 9,30,31,32,33,34,35,365,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,' +& #39;55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,8 0,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,1 05,106,' +& #39;107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125, 126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,142,143,144, 145,146,147,148,149,150,151,152,153,154,155,156,157,158)'; BolezniQuery.Open; While not BolezniQuery.Eof do begin ListView2.Items.Add; FieldByName('Kod_bolezni').AsString; ListView2.Items[BolezniQuery.RecNo-1].SubItems.Add(BolezniQuery.FieldByName('Nazvanie_bolezni').AsString); BolezniQuery.Next; end; end; Он работает, но заполняет ListView2 всеми болезнями из базы НАКОНЕЦ, САМ ВОПРОС: КАК МНЕ И КУДА ПЕРЕДАТЬ В ПРЕД. ЗАПРОС ИНДЕКСЫ ВЫБРАННЫХ СТРОК ListView1(симптомы)(ВМЕСТЕ С Kod_simptoma) ДЛЯ ТОГО ЧТОБЫ ОН ОТОБРАЗИЛ ТОЛЬКО СООТВЕТСТВУЮЩИЕ БОЛЕЗНИ. СПАСИБО, ЧТО ДОЧИТАЛИ ДО КОНЦА! ![]() |
![]() ![]() |
![]() |
Текстовая версия | 20.06.2025 19:57 |