Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2011.10.09;
Скачать: [xml.tar.bz2];

Вниз

запросы   Найти похожие ветки 

 
ZimFFa   (2011-06-19 15:37) [0]

Привет...
Суть в том, что в DBLookupComboBox1 выбирается ИС, а в BDGrit выдаются соответствующие ИС Стадии...

Написала вот так:

Код:
procedure TFComboBox.DBLookupComboBox1Click(Sender: TObject);
var index: Integer;
begin
ADOQuery1.SQL.Text := "SELECT DISTINCT SNomerStadii, SNazwanieStadii FROM ISStadija, Stadii WHERE ISNomerIS = " + ADOQuery2.FieldByName("INomerIS").AsString;
ADOQuery1.Open;
end;
Теперь мне для всех ИС выдаются ВСЕ Стадии, которые есть в БД

Например: У Производственной ИС 4 стадии - в Грид выдаются 8 - это общее кольчество Стадий в Базе Данных...

подскажите как это исправить?
Спасибо...


 
Inovet ©   (2011-06-19 16:31) [1]

> [0] ZimFFa   (19.06.11 15:37)
> подскажите как это исправить?

Изучить основы SQL. Вот что в запросе указываешь - соединить две таблицы так чтобы к каждй записи первой присоединились все записи второй т.е. умножить одну на другую, потом убрать одинаковые и выпрать из всего удовлетворяющие условию. А надо из Стадии выбрать по условию.

А кто такие ИС? Неужели Информационные сущности, да не, какие-нибудь Исходные стадии.


 
Игорь Шевченко ©   (2011-06-19 16:37) [2]


> А кто такие ИС?


Интегральные схемы


 
ZimFFa   (2011-06-19 17:07) [3]

ИС - это Информационная Система...

Пытаюсь изучать эти "основы", а чёт пока не очень получается...

"А надо из Стадии выбрать по условию" - это мне нужно какой-то переменной (например index), присвоить значение ячейки из таблицы Стадии и проверять эту переменную?

Вот как-то так?
procedure TFComboBox.DBLookupComboBox1Click(Sender: TObject);
var index: Integer;
begin
ADOQuery1.SQL.Text := "SELECT SNomerStadii, SNazwanieStadii FROM ISStadija, Stadii WHERE ISNomerIS = " + ADOQuery2.FieldByName("INomerIS").AsString;
ADOQuery1.Open;
 begin
   index :=  ???? ;
   if index <> index + 1 then ??? := True
   else ??? := False;
 end;
end;
Не знаю как прописать присвоение ячейки переменной...


 
Inovet ©   (2011-06-19 20:34) [4]

> [3] ZimFFa   (19.06.11 17:07)
> FROM ISStadija, Stadii

Судя по реакции, первый ответ прошёл мимо. Зачем две таблицы в запросе?


 
ZimFFa   (2011-06-19 20:45) [5]

> Судя по реакции, первый ответ прошёл мимо. Зачем две таблицы в запросе?

Когда пишу:
ADOQuery1.SQL.Text := "SELECT ISNomerStadii FROM ISStadija WHERE ISNomerIS = " + ADOQuery2.FieldByName("INomerIS").AsString;

Выдаются всё правильно как дано, НО: выдаётся только номер стадии (ISNomerStadii), а поле Название стадии пустое...


 
ZimFFa   (2011-06-19 20:47) [6]

дело в том, что у меня 3 связные таблицы: InfS, Stadii и промежуточная, для их связи - ISStadija.


 
ZimFFa   (2011-06-19 20:49) [7]

без табл ISStadija мне никак - я там ввожу цифрочки руками...


 
Inovet ©   (2011-06-19 21:42) [8]

> [5] ZimFFa   (19.06.11 20:45)
> ADOQuery1.SQL.Text := "SELECT ISNomerStadii FROM ISStadija
> WHERE ISNomerIS = " + ADOQuery2.FieldByName("INomerIS").AsString;
>
> Выдаются всё правильно как дано, НО: выдаётся только номер
> стадии (ISNomerStadii), а поле Название стадии пустое...

Так я не вижу в запросе никакого Названия стадии. Как насчёт выбрать из SNazwanieStadii? Да и структуру этих - теперь уже 3-х таблиц - пора бы показать. Да и что за сервер сказать.


 
ZimFFa   (2011-06-19 22:08) [9]

Ну да... Мозгов то у меня нет сразу всё уточнить...

(так понимаю, что здесь файлы не цепляются...)

Есть у меня БД в Акцессе. ИЗ БД 3 табл: InfS, Stadii и промежуточная для связи ISStadija...

InfS имеет поля: INomerIS, INazwanieIS;
Stadii: SNomerStadii, SNazwanieStadii;
ISStadija: ISNomerIS, ISNomerStadii.

Поля INomerIS и ISNomerIS связаны отношением один-ко-многим
И поля SNomerStadii и ISNomerStadii так же связаны один-ко-многим.

Задача такая: в DBLookupComboBox выбирается ИС, как только ИС выбрана, в DBGrid должны отобразиться Стадии этой ИС...

В свойствах DBLookupComboBox и DBGrid всё прописала - нужные поля выводятся. Т.е. в DBLookupComboBox выпадает список ИС, а табл DBGrid заполняется ВСЕМИ Стадиями.
Создала 2 запроса: ADOQuery1 (SELECT *  FROM Stadii, ISStadija WHERE SNomerStadii=ISNomerStadii) и ADOQuery2 (SELECT * FROM InfS).


 
Inovet ©   (2011-06-19 22:18) [10]

> [9] ZimFFa   (19.06.11 22:08)

Зачем вот эта таблица ISStadija. Можно в Stadii добавить поле ISNomerIS. Или есть скрытые причины?


 
ZimFFa   (2011-06-19 22:19) [11]

ADOQuery1.SQL.Text := "SELECT ISNomerStadii FROM ISStadija WHERE ISNomerIS = " + ADOQuery2.FieldByName("INomerIS").AsString;

По этому коду номера Стадий правильно выводятся (ISNomerStadii)... Ещё бы понять, как выдернуть SNazwanieStadii из таблицы Stadii...


 
Inovet ©   (2011-06-19 22:20) [12]

> [10] Inovet ©   (19.06.11 22:18)
> Или есть скрытые причины?

Всмысле - у разных ИС могут быть одинаковые Стадии?


 
ZimFFa   (2011-06-19 22:22) [13]

Я в табл ISStadija руками прописываю цифры:
1яИС - 1яСтадия
1яИС - 2яСтадия
1яИС - 3яСтадия
2яИС - 1яСтадия...

и т.д.


 
ZimFFa   (2011-06-19 22:23) [14]

> Всмысле - у разных ИС могут быть одинаковые Стадии?

Да да да.


 
Inovet ©   (2011-06-19 22:30) [15]

> [11] ZimFFa   (19.06.11 22:19)
> Ещё бы понять, как выдернуть SNazwanieStadii из таблицы Stadii...

Если оно действительно надо так, то связать с ней, что ты и пыталась сделать.

"SELECT SNazwanieStadii FROM ISStadija LEFT JOIN Stadii ON SNomerStadii = ISNomerStadii WHERE ISNomerIS = " + ADOQuery2.FieldByName("INomerIS").AsString


 
ZimFFa   (2011-06-19 22:40) [16]

Что ж такое...

Выдаёт ошибку: "Не поддерживается выражение объединения"

У меня Delphi2009...


 
Inovet ©   (2011-06-19 22:55) [17]

> [16] ZimFFa   (19.06.11 22:40)
> Выдаёт ошибку: "Не поддерживается выражение объединения"
>
> У меня Delphi2009...

Делфи тут не при чём. У меня не на чём сейчас проверить, что там не так. Подожди, кто-нибудь скажет.
Можно LEFT убрать, можно вообще в WHERE оставить и добавить там AND ISNomerIS = ...

Только вот сомнения у меня в необходимости многие-многие. Хоть и не в этом дело тут.


 
ZimFFa   (2011-06-19 23:11) [18]

:) Спасибо тебе большое...

Попытаюсь чего-нить сделать, что б заработало :)

Спасибо ;)


 
ZimFFa   (2011-06-19 23:23) [19]

Вот так вот сделал:

ADOQuery1.SQL.Text := "SELECT SNazwanieStadii, SNomerStadii FROM Stadii, ISStadija WHERE SNomerStadii = ISNomerStadii AND ISNomerIS = "
+ ADOQuery2.FieldByName("INomerIS").AsString;

И всё работает :)

Inovet © Спасибо Вам...



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2011.10.09;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.003 c
15-1308428998
Юрий
2011-06-19 00:29
2011.10.09
С днем рождения ! 19 июня 2011 воскресенье


4-1251275930
TarenoKostanay
2009-08-26 12:38
2011.10.09
ОС


2-1308388748
Gu
2011-06-18 13:19
2011.10.09
Своя кнопка и чекбокс в messagebox


1-1267824799
Архип
2010-03-06 00:33
2011.10.09
плагин для Оперы (dll)


4-1251278625
NeonSimfi
2009-08-26 13:23
2011.10.09
Проблема с получением comctl32.dll на Win Vista/7 ...





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский