Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.045 c
2-1161188335
fog
2006-10-18 20:18
2006.11.05
Печать графики


2-1161103968
17.10.2006
2006-10-17 20:52
2006.11.05
ProgressBar


11-1137545458
-=Mike=-
2006-01-18 03:50
2006.11.05
Обработка исключений


3-1157971259
без ника
2006-09-11 14:40
2006.11.05
Периодические события. Структура хранения.


2-1161511352
sss1
2006-10-22 14:02
2006.11.05
ShellExecute





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский