| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Базы данных и репортинг > sql запросы и рекурсия |
| Автор: madmanStas 23.2.2005, 22:47 |
| как грамотно написать рекурсивную процедуру обрашения к бд ?на основе sql ? |
| Автор: Alex 23.2.2005, 23:04 |
| Раскажи по подробней о своей задаче. |
| Автор: madmanStas 24.2.2005, 08:39 | ||
Тут где-то идет моя ошибка мне кажется что просто результаты sql запроса каждый раз изменяються что и приводит к зацикливанию проги.. Добавлено @ 08:44 Или может вся подпрограмма изначальна не верна |
| Автор: Bes 24.2.2005, 09:44 |
| Блин, объясни задачу. Вот у всех проблема.... толи с русским языком, толи с авторскими правами. Никто толком никогда не расскажет что он делает. Как помогать-то? Дальше по коду: Procedure wetka ( wet : TTreeNode; ids :Integer); var i, LIM : integer; sqls : string; wetk : TTreeNode; begin sqls := 'SELECT ID, TIP, IMG, NAM FROM INSTR WHERE UPID="'+IntToStr(ids)+'"'; form1.Query1.Close; form1.Query1.SQL.Text := sqls; form1.Query1.active:=true; query1.first; repeat wetk := form1.TreeView1.Items.AddChildObject(wet,form1.Query1.fieldByName('NAM').AsString ,nil); wetka (wetk,form1.Query1.fieldByName('ID').asInteger ); until query1.findnext=false; end; Может так, если я правильно домыслил вашу задачу? Кстати, рекурсия так не получится, поскольку при следующем вызове текст квери меняется и при возвращении в предыдущую процедуру текст квери уже будет другой, причем при переходе в верхнюю процедуру указатель квери будет в самом конце и процедура завешится. Тебе надо или для каждой ф-ии создавать свой квери или все сливать в массив запросов и потом с хвоста массива брать эти запросы(удаляя эти запросы) а новые опять добавлять. Вообщем известный прием. |
| Автор: Alex 24.2.2005, 18:49 |
| Первая ошибка в том, что у тебя при каждом цикле будет закрываться Query1 и в него грузятся другие данные. |
| Автор: Alex 24.2.2005, 19:13 | ||
madmanStas, думаю, что должно, это все выглядить так:
|