![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
запросы
ZimFFa © (2011-06-19 15:37:00)Привет...
Суть в том, что в 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 - это общее кольчество Стадий в Базе Данных...
подскажите как это исправить?
Спасибо...
ZimFFa (2011-06-19 23:23:00) [1]Вот так вот сделал:
ADOQuery1.SQL.Text := 'SELECT SNazwanieStadii, SNomerStadii FROM Stadii, ISStadija WHERE SNomerStadii = ISNomerStadii AND ISNomerIS = '
+ ADOQuery2.FieldByName('INomerIS').AsString;
И всё работает :)
Inovet © Спасибо Вам...
ZimFFa (2011-06-19 23:11:00) [2]:) Спасибо тебе большое...
Попытаюсь чего-нить сделать, что б заработало :)
Спасибо ;)
Inovet (2011-06-19 22:55:00) [3]> [16] ZimFFa (19.06.11 22:40)
> Выдаёт ошибку: "Не поддерживается выражение объединения"
>
> У меня Delphi2009...
Делфи тут не при чём. У меня не на чём сейчас проверить, что там не так. Подожди, кто-нибудь скажет.
Можно LEFT убрать, можно вообще в WHERE оставить и добавить там AND ISNomerIS = ...
Только вот сомнения у меня в необходимости многие-многие. Хоть и не в этом дело тут.
ZimFFa (2011-06-19 22:40:00) [4]Что ж такое...
Выдаёт ошибку: "Не поддерживается выражение объединения"
У меня Delphi2009...
Inovet (2011-06-19 22:30:00) [5]> [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:23:00) [6]> Всмысле - у разных ИС могут быть одинаковые Стадии?
Да да да.
ZimFFa (2011-06-19 22:22:00) [7]Я в табл ISStadija руками прописываю цифры:
1яИС - 1яСтадия
1яИС - 2яСтадия
1яИС - 3яСтадия
2яИС - 1яСтадия...
и т.д.
Inovet (2011-06-19 22:20:00) [8]> [10] Inovet © (19.06.11 22:18)
> Или есть скрытые причины?
Всмысле - у разных ИС могут быть одинаковые Стадии?
ZimFFa (2011-06-19 22:19:00) [9]ADOQuery1.SQL.Text := 'SELECT ISNomerStadii FROM ISStadija WHERE ISNomerIS = ' + ADOQuery2.FieldByName('INomerIS').AsString;
По этому коду номера Стадий правильно выводятся (ISNomerStadii)... Ещё бы понять, как выдернуть SNazwanieStadii из таблицы Stadii...
Inovet (2011-06-19 22:18:00) [10]> [9] ZimFFa (19.06.11 22:08)
Зачем вот эта таблица ISStadija. Можно в Stadii добавить поле ISNomerIS. Или есть скрытые причины?
ZimFFa (2011-06-19 22:08:00) [11]Ну да... Мозгов то у меня нет сразу всё уточнить...
(так понимаю, что здесь файлы не цепляются...)
Есть у меня БД в Акцессе. ИЗ БД 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 21:42:00) [12]> [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 20:49:00) [13]без табл ISStadija мне никак - я там ввожу цифрочки руками...
ZimFFa (2011-06-19 20:47:00) [14]дело в том, что у меня 3 связные таблицы: InfS, Stadii и промежуточная, для их связи - ISStadija.
ZimFFa (2011-06-19 20:45:00) [15]> Судя по реакции, первый ответ прошёл мимо. Зачем две таблицы в запросе?
Когда пишу:
ADOQuery1.SQL.Text := 'SELECT ISNomerStadii FROM ISStadija WHERE ISNomerIS = ' + ADOQuery2.FieldByName('INomerIS').AsString;
Выдаются всё правильно как дано, НО: выдаётся только номер стадии (ISNomerStadii), а поле Название стадии пустое...
Inovet (2011-06-19 20:34:00) [16]> [3] ZimFFa (19.06.11 17:07)
> FROM ISStadija, Stadii
Судя по реакции, первый ответ прошёл мимо. Зачем две таблицы в запросе?
ZimFFa (2011-06-19 17:07:00) [17]ИС - это Информационная Система...
Пытаюсь изучать эти "основы", а чёт пока не очень получается...
"А надо из Стадии выбрать по условию" - это мне нужно какой-то переменной (например 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;
Не знаю как прописать присвоение ячейки переменной...
Игорь Шевченко (2011-06-19 16:37:00) [18]
> А кто такие ИС?
Интегральные схемы
Inovet (2011-06-19 16:31:00) [19]> [0] ZimFFa (19.06.11 15:37)
> подскажите как это исправить?
Изучить основы SQL. Вот что в запросе указываешь - соединить две таблицы так чтобы к каждй записи первой присоединились все записи второй т.е. умножить одну на другую, потом убрать одинаковые и выпрать из всего удовлетворяющие условию. А надо из Стадии выбрать по условию.
А кто такие ИС? Неужели Информационные сущности, да не, какие-нибудь Исходные стадии.