Форум: "Начинающим";
Текущий архив: 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