Форум: "Начинающим";
Текущий архив: 2006.11.05;
Скачать: [xml.tar.bz2];
Вниз"Случайная" переменная? Найти похожие ветки
← →
markers © (2006-10-19 10:26) [0]Можно-ли реализовать и как %subj ? Заренее Спасибо!
← →
DrPass © (2006-10-19 10:27) [1]Это как? Закрыть глаза и ударить кулаком по клавиатуре?
← →
Elen © (2006-10-19 10:28) [2]
> markers
В смысле случайное значение (Random)?
← →
markers © (2006-10-19 10:30) [3]to DrPass
Извиняюсь, что не уточнил! Мне нужно в run-time завести случайную переменную! В некоторых других языках это возможно!
Точней я скажу так, как создать и заюзать переменную хранящуюся в другой переменной?
← →
Ketmar © (2006-10-19 10:31) [4]>[3] markers(c) 19-Oct-2006, 10:30
>Точней я скажу так, как создать и заюзать переменную
>хранящуюся в другой переменной?
обалдеть уточнил. стало ещё непонятней.
← →
Elen © (2006-10-19 10:38) [5]
> markers
Круто! Юзай тип Variant
← →
markers © (2006-10-19 10:39) [6]...
function catfill(parentid:string="0"; pnod : TTreeNode = nil):Boolean;
var nod: TTreeNode;
Rsname, Rsid: String; // Надо чтоб имена переменных были разными при вызове этой функции
begin
ResRow:=DB.exec("SELECT * FROM mag_categories WHERE parentid = "+onequote+
parentid+onequote+" AND cattype <> "+onequote+"Deleted"+onequote+" ORDER " +
"BY `name` ASC");
Rsname:=VarToStr(ResRow[4]); // А здесь в переменную со случайным именем
Rsid:=VarToStr(ResRow[0]); // нужно занести значение
while not ResRow.eof do
begin
nod := Tree.Items.AddChild(pnod,Rsname); // И поюзать их
nod.Data := Pointer(StrToInt(Rsid)); // И здесь
catfill(Rsid,nod); // И тут
ResRow.next;
end;
// А тут переменную со случайным именем можно освободить (если необходимо)
end;
Просто у меня проблема, у меня при этой рекурсии перезаписываются переменные :( Я подумал ожет таким способом можно сделать?
← →
markers © (2006-10-19 10:42) [7]Просто в PHP такой код (Только написанный на PHP естественно) работает прекрасно без случайных переменных....
← →
Elen © (2006-10-19 10:45) [8]
> В некоторых других языках это возможно!
Это в каких?
← →
Elen © (2006-10-19 10:47) [9]
> у меня при этой рекурсии перезаписываются переменные
Юзай глобальный массив
← →
Джо © (2006-10-19 10:50) [10]Вредное влияние PHP на рассудок начинающих программистов все еще до конца не оценено :o)
← →
markers © (2006-10-19 10:55) [11]Elen © (19.10.06 10:47) [9]
Можно поподробней? Плиз!
← →
markers © (2006-10-19 10:58) [12]Джо © (19.10.06 10:50) [10]
Я на самом деле давно уже в Дельфях пишу, но просто по работе оно надо редко, а дома лень что-то писать, по этому получается я в Дельфях набегами работаю. Естественно что-то забывается и т.д. (Тем более что я более полугода в PHP програмил после дельфей :) :( )
← →
Плохиш © (2006-10-19 10:59) [13]
> markers © (19.10.06 10:39) [6]
> ...
> function catfill(parentid:string="0"; pnod : TTreeNode =
> nil):Boolean;
> var nod: TTreeNode;
> Rsname, Rsid: String; // Надо чтоб имена переменных
> были разными при вызове этой функции
При каждом вызове, они и будут разными переменными.
← →
Elen © (2006-10-19 11:01) [14]
> Просто у меня проблема, у меня при этой рекурсии перезаписываются
> переменные
Ну и что? Зачем тебе старые данные если ты перед вызовом рекурсии их обрабатываеш.
← →
markers © (2006-10-19 11:10) [15]Elen © (19.10.06 11:01) [14]
просто у меня в БД лежат данные и мне нужно построить дерево вида
-кат1
--подкат1
--подкат2
---подподкат1
----...
--подкат3
--..
-кат1
-...
Берём первый корневой кат, проверяем нет ли у него детей (Вызовом самого себя)...... возвращаемся на первый вызов, Берём второй корневой кат ...... и т.д.
← →
Ketmar © (2006-10-19 11:10) [16]>[6] markers(c) 19-Oct-2006, 10:39
>Просто у меня проблема, у меня при этой рекурсии
>перезаписываются переменные
да? точно? прям-таки "перезаписывабтся"? гражданин соврамши. ошибка у тебя совсем в другом месте. а конкретно -- какого ангела ты ожидаешь, что внешняя переменнаяResRow
сохранит свое значение после возврата из рекурсивного вызова? ты её где-то сохраняшь?
← →
Плохиш © (2006-10-19 11:16) [17]
> Ketmar © (19.10.06 11:10) [16]
Спокойно, он же ничего не читал и читать не собирается. Вот потопчет чуток кнопки и пойдёт займётся своими прямыми обязанностями ;-)
← →
Elen © (2006-10-19 11:19) [18]
> markers
Помоему код в [6] вообще не годиться для такого. Зачем тебе постоянно делать Select?
← →
Ketmar © (2006-10-19 11:19) [19]>[17] Плохиш(c) 19-Oct-2006, 11:16
>Спокойно, он же ничего не читал и читать не собирается.
ну зачем так сразу? а вдруг просто не спал неделю? %-)
← →
markers © (2006-10-19 11:21) [20]Ketmar © (19.10.06 11:10) [16]
Блин! спасибо тебе!!!! Всё работает !!!!!!!
Всем спасибо!!!!!
← →
markers © (2006-10-19 11:23) [21]Просто говорю, уже давно не програмил позабыл всё на.... :( ПО этому я сразу и пошёл писать в раздел "начинающим"...... эх.....
← →
Ketmar © (2006-10-19 11:32) [22]>[21] markers(c) 19-Oct-2006, 11:23
>ПО этому я сразу и пошёл писать в раздел "начинающим"......
вот именно. умно. пошёл бы в другое -- получил бы по самое немогу. %-))
← →
Ketmar © (2006-10-19 11:32) [23]а пинок мой был, кстати, за то, что ты выдвигаешь совершенно кривые прдположения столь безапелляционным тоном. %-)
← →
markers © (2006-10-19 12:10) [24]Ketmar © (19.10.06 11:32) [25]
Ketmar ©
у меня было сделано кривым способом, пытался сделать на рекурсию но то что она глобальная не обратил внимание и ничего не помогало, воть я уже самые пародоксальные идеи выдвигал, хотя сам понимаю что сие полный изврат :) Просто очень хотелось рекурсию :)
← →
Сергей М. © (2006-10-19 12:19) [25]
> Elen © (19.10.06 11:19) [18]
> Зачем тебе постоянно делать Select?
Все верно он делает, не смущай автора.
Автор визуализирует древовидную структуру, хранящуюся в БД.
Правильные результаты визуализации м.б. получены только так.
← →
Palladin © (2006-10-19 12:23) [26]
> Правильные результаты визуализации м.б. получены только
> так.
да ну конечно только так...
← →
Сергей М. © (2006-10-19 12:27) [27]
> Palladin © (19.10.06 12:23) [26]
К чему сарказм ?)
Если возражаешь - приведи контраргументы)...
← →
Ketmar © (2006-10-19 12:41) [28]>[27] Сергей М.(c) 19-Oct-2006, 12:27
>Если возражаешь - приведи контраргументы)...
есть ещё куча всяких способов. с ходу: получить всё скопом один раз и потом уже разгребать.
← →
Elen © (2006-10-19 12:43) [29]
> Правильные результаты визуализации м.б. получены только
> так.
Не спорю, А скорость выполнения такого не упадет?
← →
Сергей М. © (2006-10-19 12:45) [30]
> Ketmar © (19.10.06 12:41) [28]
Это частный случай.
Такая логика запросто даст сбой при определенных условиях.
Но это уже тема для обсуждения в "Базы".
← →
Сергей М. © (2006-10-19 12:46) [31]
> Elen © (19.10.06 12:43) [29]
О скорости речи не идет, да и особый это разговор.
← →
Palladin © (2006-10-19 13:02) [32]
> Такая логика запросто даст сбой при определенных условиях.
например?
← →
Сергей М. © (2006-10-19 13:12) [33]
> Palladin © (19.10.06 13:02) [32]
> например?
Например, приведи текст того самого единственного "универсального" запроса, который , по-твоему мнению, заменит ту самую кучу запросов, в неоходимости которой ты засомневался в [26].
И я тебе распишу в подробностях конкретную ситуацию, при которой твой "универсальный" запрос окажется у кота под хвостом)
← →
Palladin © (2006-10-19 13:16) [34]хм...
select id,id_parent from tree
← →
Сергей М. © (2006-10-19 13:22) [35]
> Palladin © (19.10.06 13:16) [34]
Так.
Приведи фрагмент НД, сформированный твоим запросом ... И обоснуй, что записи в этом НД должны следовать именно так и не иначе ...
← →
Palladin © (2006-10-19 13:26) [36]
0 Null
1 Null
2 0
3 0
4 2
5 2
> И обоснуй, что записи в этом НД должны следовать именно так и не иначе ...
зачем? мне по барабану в каком порядке мне вернулся НД...
← →
Сергей М. © (2006-10-19 13:48) [37]
> Palladin © (19.10.06 13:26) [36]
>
>
> 0 Null
> 1 Null
> 2 0
> 3 0
> 4 2
> 5 2
>
Теперь представь себе, что выглядит он иначе:
2 0
3 0
0 Null
1 Null
И ?
> мне по барабану в каком порядке мне вернулся НД
Я так и понял, что тебе по барабану)
А вот автору, к примеру, не по барабану. Он получил unidirectional-НД (содержимое см. выше) и движется по нему в порядке следования записей (а как быть иначе, если он однонаправленный ?).
Ну и о каком визуальном построении может идти речь, если первая же запись ссылается на родителя, который фигурирует лишь в 3-й записи в порядке следования записей в данном НД ?
думай)...
← →
Palladin © (2006-10-19 14:13) [38]
> Теперь представь себе, что выглядит он иначе:
>
> 2 0
> 3 0
> 0 Null
> 1 Null
>
> И ?
что И? я помоему достаточно ясно выразился сказав что мне не принципиально наличие какого либо упорядочивания в НД... и я тоже буду двигаться только в одном направлении... если не веришь, то потерпи немного: я до дома дойду и напишу тебе великую тайну реализации...
← →
Сергей М. © (2006-10-19 14:34) [39]
> Palladin © (19.10.06 14:13) [38]
Ради истины потерплю.
← →
Palladin © (2006-10-19 17:15) [40]момент истины
procedure TForm1.Button1Click(Sender: TObject);
Type
PItem=^TItem;
TItem=Record
nID:Integer;
strCaption:String;
End;
Var
theUnlinked,
theTree:TWRIntegerMap;
q:TADOQuery;
n,nID,nIDParent:Integer;
strCaption:String;
Function _CreateNode(p_theParent:TTreeNode;p_nID:Integer;Const p_strCaption:String):TTreeNode;
Var
i,n:Integer;
Begin
Result:=TreeView.Items.AddChild(p_theParent,p_strCaption);
Result.Data:=Pointer(p_nID);
If theUnlinked.Find(p_nID,n) Then
Begin
For i:=0 to TList(theUnlinked.ObjectData[n]).Count-1 Do
Begin
With PItem(TList(theUnlinked.ObjectData[n])[i])^ Do
theTree.Add_Integer(nID,Integer(_CreateNode(Result,nID,strCaption)));
Dispose(PItem(TList(theUnlinked.ObjectData[n])[i]));
End;
theUnlinked.Delete(n);
End;
End;
Procedure _AddToUnlinked(p_nID,p_nIDParent:Integer;Const p_strCaption:String);
Var
n:Integer;
p:PItem;
Begin
New(p);
p.nID:=p_nID;
p.strCaption:=p_strCaption;
If Not theUnlinked.Find(p_nIDParent,n) Then n:=theUnlinked.Add_Object(p_nIDParent,TList.Create);
TList(theUnlinked.ObjectData[n]).Add(p);
End;
begin
theTree:=TWRIntegerMap.Create;
theUnlinked:=TWRIntegerMap.Create;
q:=TADOQuery.Create(Nil);
q.Connection:=ADOConnection1;
vtQuickADOQuery(q);
q.sql.text:="select id, id_parent, caption from tree order by caption";
q.Open;
While not q.Eof Do
Begin
nID:=q.Fields[0].AsInteger;
strCaption:=q.Fields[2].AsString;
If q.Fields[1].IsNull Then theTree.Add_Integer(nID,Integer(_CreateNode(Nil,nID,strCaption))) Else
Begin
nIDParent:=q.Fields[1].AsInteger;
If theTree.Find(nIDParent,n)
Then theTree.Add_Integer(nID,Integer(_CreateNode(TTreeNode(theTree.IntegerData[n]),nI D,strCaption)))
Else _AddToUnlinked(nID,nIDParent,strCaption);
End;
q.Next;
End;
q.Close;
q.Free;
theTree.Free;
theUnlinked.Free;
end;
на все вопросы отвечу...
Страницы: 1 2 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.11.05;
Скачать: [xml.tar.bz2];
Память: 0.55 MB
Время: 0.042 c