Поиск:

Ответ в темуСоздание новой темы Создание опроса
> сырье для Запроса, как его скватить 
:(
    Опции темы
Кит
  Дата 11.12.2005, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 21.5.2005

Репутация: нет
Всего: нет



Имеется база данных в 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 (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,29,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,'
+'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,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,'
+'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)
ДЛЯ ТОГО ЧТОБЫ ОН ОТОБРАЗИЛ ТОЛЬКО СООТВЕТСТВУЮЩИЕ БОЛЕЗНИ.

СПАСИБО, ЧТО ДОЧИТАЛИ ДО КОНЦА! :wink:
PM MAIL   Вверх
Vit
Дата 19.12.2005, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 14
Всего: 207



Варианты:

1. Генерить запрос динамически с тем количеством параметров которое необходимо и параметры заполнять из листа
2. Сделать временную таблицу, заполнять её запрашиваемыми параметрами и добавлять её в Join

Первый способ предпочтительнее если лист не очень большой, второй при больших массивах данных




--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0561 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.