Aktív témák

  • Alan

    aktív tag

    válasz lao ce #91 üzenetére

    Direct Oracle Access, ugye? Én is jókat hallottam róla. Szerencsére nekem egyelőre nem kell Oracle-lel érintkeznem.

    Ne ijedj meg, de tényleg nem javaslom a ProcessMessages() használatát, most is valószínűleg csak azért működik tőle a programod, mert belehív egy másik eseménykezelődbe, ami szintén mozgatja a detail dataset kurzorát (persze így látatlanban nehéz megmondani, mitől hibás egy kód). Ettől viszont egy másik példányban is belelépsz a saját kódodba, és vagy tényleg reentráns az egész programod, vagy előbb-utóbb baj lesz. Próbáld ki pl.., hogy nagyon nagy táblákból töltöd fel a VT-t, úgy, hogy a feltöltés több másodpercig tartson, és eközben nyomkodj vadul a felhasználói felületen, lehetőleg a VT komponenst érintő dolgot csinálj. Szinte garantált a lefagyás vagy az AV.

    Szerintem inkább csináld azt, hogy feltöltés után lerendezed az adott master node-ok alatti detail node-okat (ha az AutoSort nem működik, bár nálam ment az is). Ehhez a master és a detail node-okban is tárold el az elsődleges kulcsot az adott táblából. Hacsak nem lesz több ezer detail node egymás alatt, ez nem fogja érzékelhetően lerontani a teljesítményt - ha meg igen, akkor felhasználói szempontból úgyis használhatatlan lesz a program, mert egy egy szinten több ezer elemű tulajdonságfa kezelhetetlen.

    Ha nem sértelek meg vele, ideírom neked a létező leggyorsabb rendezést (csak hogy ne kelljen annyit körmölnöd) :) :

    [code]
    procedure QuickSort(L, R: integer);
    var
    I, J: Integer;
    T: TLaoCeTombocske;
    begin
    repeat
    I := L;
    J := R;
    while LaoCeForrasTombocske < LaoCeForrasTombocske[(L + R) shr 1] do
    Inc(I);
    while LaoCeForrasTombocske[J]> LaoCeForrasTombocske[(L + R) shr 1] do
    Dec(J);
    repeat
    if I <= J then
    begin
    T := LaoCeForrasTombocske
    ;
    LaoCeForrasTombocske := LaoCeForrasTombocske[J];
    LaoCeForrasTombocske[J] := T;
    Inc(I);
    Dec(J);
    end;
    until I > J;
    if L < J then
    QuickSort(L, J);
    L := I;
    until I >= R;
    end;
    [/code]

    Az L, R paraméterek a két szélső elem, a közöttük elhelyezkedő elemeket rendezi a rutin. Ha mindet akarod, akkor n elemű LaoCeForrasTombocske esetén így hívd meg: QuickSort(0, n-1);

Aktív témák