Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.10.09;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.009 c
15-1307505868
~
2011-06-08 08:04
2011.10.09
Посыпался хард


2-1308226982
Gu
2011-06-16 16:23
2011.10.09
{$DEFINE TEST}


1-1263893750
midikey
2010-01-19 12:35
2011.10.09
Подобие написания/выполнения скрипта


15-1308505658
Leon-Z
2011-06-19 21:47
2011.10.09
Иконка *.bmp на кнопке меню.


15-1307107653
Tim
2011-06-03 17:27
2011.10.09
Помогите стать мастером Delphi