![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Поможите люди добрые SQL запрос составить! [D4, dBase, FoxPro]
StasN © (2004-02-09 18:29:00)
Имеется:
1) я, "начинающий" в программер баз данных под Дельфи.
2) Дельфя 4(какая уж есть!), старые базы данных на FOX:
1 база assortim - продукция пекарни, поля codA числовое, nameA символьное, т.е.:
1,"хлеб ржаной"
2,"булки итальянские", и т.д.
2 база product - продукты из которых печем, поля codP числовое, nameP символьное, т.е.:
1,"мука 1 сорт"
2,"дрожжи", и т.д.
3 база recept - собственно рецепты, поля codA,codP,kol числовые:
1,1,25 т.е. хлеб ржаной,муки 25 грамм
1,2,0.5 т.е. хлеб ржаной,дрожжи 0,5 грамм
2,2,0,8 т.е. булки итальянские,дрожжи 0,8 грамм
------------------------------------------------------------
поместил на форму Dbgrid с Assortim.Name выбираю чтолибо из ассортимента рядом должен появиться рецепт (в другом DBGride)
Product.name, recept.kol
Так вот, не могу никак SQL запрос составить. Не поможет никто?
sniknik (2004-02-11 08:13:00) [1]
D:\Program Files\Borland\Delphi7\Demos\Db\Filter\filter.dpr
ЮЮ (2004-02-11 02:33:00) [2]
filter надо самому сформироватькак текстовую строку:
filter := "CodA=" + product.FieldByName("codA").asString;
StasN (2004-02-11 02:28:00) [3]
Ага кажется понял ":" это подстава (макрозамена)?!
А как фильтру DBgrida дать в качестве аргумента чужое поле?
Мои попытки в гриде receptв свойстве filterзначение codA=product.codAне берет, codA=product.FieldByName("codA").Valueтоже.
Как это правильно написать и возможно?
StasN (2004-02-11 02:19:00) [4]
Спасибо, уже что-то вырисовывается, но выдается вся база рецепт, а мне надо только = текущему assortim.codA.
Т.е. отдельная табличка с ассортиментом когда выбираю что-либо - появляется в отдельной табличке сам рецепт.
А что значит это ":"?
Vlad (2004-02-10 21:20:00) [5]
select r.*, p.NameP, a.NameA from recept r, product p, assortim a
where r.codA=a.CodA and r.CodP=p.CodP
> Кстати ":" в codA=:param1 это очепятка? Или так надо?
Так надо.
StasN (2004-02-10 20:57:00) [6]
Нашел 7 delphi, там есть Master-detail, два дня голову ломал где там и чё! Не разобрался.
чего, вот это не можешь составить ?
select * from recept where codA=:param1
все поля из recept мне не нужны (ну ладно не нужные спрячем), но мне нужно еще и название продукта из product, а не его номер из рецепта.
Кстати ":" в codA=:param1 это очепятка? Или так надо?
Или еще проще, можешь связать два датасета Master-detail
Поподробнее можно?
Нужно чтобы выводился, когда я выбираю, скажем, "хлеб ржаной", рецепт типа:
мука 200 гр
дрожжи 0.5 гр.
Вот что мне нужно, хотел попробовать написать это через SELECT, но вот какие проблемы возникли:
select product.name,recept.kol from product,recept,assortim
а дальше проблемы с where (возможно нужно запрос в запросе или join делать?)
where recept.codA=Assortim.codAэто основное условие, т.е. записей должно быть ровно столько сколько их подходит по этому условию Product.codP=recept.codPт.е. выбрать из рецепта код продукта (и вывести именно его наименование) т.е. указатель в базе данных Product должен переместится к нужной позиции,а если я соединю эти условия через AND ничего не получится.
Вот по-моему так. Я понятно объяснил?
Что посоветуете?
Vlad (2004-02-09 18:47:00) [7]
чего, вот это не можешь составить ?
select * from recept where codA=:param1
плюс в таблице ассортимента на событие AfterScroll пишешь:
QueryRecept.Close;
QueryRecept.ParambyName("param1").AsInteger:=Assortim.FieldByName("codA").AsInteger;
QueryRecept.Open;
(вариант для BDE)
Или еще проще, можешь связать два датасета Master-detail
sniknik (2004-02-09 18:42:00) [8]
а чего не получается?
посмотри связи мастер/детайл, должно подойти. (пример в дельфях должен быть, правда вот в 4й (?))
все что надо сделать связать 2 таблицы/запроса (это из хелпа)
Orders.MasterSource := CustSource;
Orders.MasterFields := "CustNo";