Casa
Top.Mail.Ru Yandeks.Metrika
Foro: "Bases";
Archivo actual: 2006.12.24;
Descargar: [xml.tar.bz2];

abajo

Problema con RemoveAllNodes en AdvStringGrid en una llamada repetida Encontrar ramas similares


jiny   (2006-10-10 12:56) [0]

Quizás la pregunta está fuera de tema, pero parece que las bases de datos están involucradas de alguna manera, y nadie la respondió en la "Básica", por lo tanto, perdóname, el administrador me perdonará, cito la pregunta:
El deseo del cliente era descargar datos de la tabla en AdvStringGrid, para que el resultado fuera un árbol.
Imagínese: una lista de clientes, al hacer clic en uno de ellos, se abre un árbol donde se encuentra toda la información básica sobre el cliente (TIN, dirección, jabón, etc.), al hacer clic en otro cliente, se mostrará información sobre el otro cliente también en forma de árbol. Hice frente con éxito a esta tarea. Todo resulta como el cliente quería, pero fue RECIBIDO solo en una pequeña cantidad de datos (9 clientes x 5 (4 líneas de información sobre él) = 45 líneas totales). Ate la barra de progreso y todo funcionó. Pero antes de enviar la actualización, decidí intentar aumentar la cantidad de datos a 650 clientes x 5 = 3250 filas, y sus (clientes) pueden ser de hasta 10000 x 5 = 50000 filas. Por primera vez, formando una lista de 650 clientes: el programa genera normalmente, incluso más, pero si ejecuta la solicitud nuevamente, el procesador se ralentiza en la línea RemoveAllNodes. Entiendo que estoy haciendo algo mal y entiendo que el asunto está en RemoveAllNodes, pero no puedo imaginar cómo resolver el problema de manera diferente. Traté de insertar los datos de 1100 clientes sin Addnode, una segunda solicitud no se ralentiza y emite todo muy rápidamente. ¿Cómo se supone que debo ser?
Gracias de antemano.



sniknik ©   (2006-10-10 13:10) [1]

> ¿Cómo debería estar?
1 ¿No utiliza componentes no estándar?

2 para encontrar controles no visuales para almacenar datos, sino que se realizan por analogía con los básicos, con una división en "para datos" y "para visualización"

3 deshabilitar las actualizaciones antes de los cambios intensivos en recursos? (DisableControls / BeginUpdates / ... hz cuál es tu compañero allí)

4. por analogía con las bases, ¿cómo lo hacen, en lugar de eliminar todas las tablas de la tabla para limpiar, eliminar todo y volver a crearlo?

5 y de todos modos puede dejar de describir los síntomas de las consecuencias, y comenzar a discutir con acciones / códigos lo que los lleva a ?????????



evvcom ©   (2006-10-10 15:25) [2]

> [0] jiny (10.10.06/12/56 XNUMX:XNUMX)

Lo intenté una vez TAdvStringGrid. Esto es de TMS como. También hubo algún tipo de problema relacionado con RemoveAllNodes. No recuerdo lo que hice, pero tengo la experiencia de "investigar programas". No sé cómo ser tú. TMS: AFAIR paga componentes cuando se usa en productos comerciales y, en mi opinión, TAdvStringGrid no está afilado por DB. Si te los compran, escribe apoyo, si te los roban, ¿por qué llorar?
Finalmente abandoné TMS a favor de DevExpress.



jiny   (2006-10-11 08:01) [3]

>> sniknik © (10.10.06 13: 10) [1]
> ¿Cómo debería estar?
>> 1 ¿No utiliza componentes no estándar?
No funcionará, en el estándar no existe tal característica.

3 deshabilitar las actualizaciones antes de los cambios intensivos en recursos? (DisableControls / BeginUpdates / ... hz cuál es tu compañero allí)
apagar (BeginUpdates) y encender (EndUpdates)

4. por analogía con las bases, ¿cómo lo hacen, en lugar de eliminar todas las tablas de la tabla para limpiar, eliminar todo y volver a crearlo?
No se elimina línea por línea:
AdvStringGrid1.Clear (); AdvStringGrid1.rowcount: = 1;
eso es suficiente

>> 5 y de todos modos puede dejar de describir los síntomas de las consecuencias, y >> comenzar a discutir con acciones / códigos lo que los lleva a ?????????
Yo comienzo:
 MainGrd.BeginUpdate;
 MainGrd.RemoveAllNodes;
 MainGrd.Clear;
 MainGrd.RowCount:=1;
 MainGrd.ColCount:=2;
 I:=0;

 MainGrd.ColWidths[0]:=0;
 MainGrd.ColWidths[1]:=290;
 dm1.qrFirms.SQL.Text:="select count(id) from klient firms order by name_firm where kat_firm=...";
   dm1.qrFirms.Open;
   TmpRecCount:=dm1.qrFirms.Fields[0].AsInteger;

   dm1.qrFirms.Close;
   dm1.qrFirms.SQL.Text:="select * from klient firms order by name_firm where kat_firm=...";
   dm1.qrFirms.UniDirectional:=true;
   dm1.qrFirms.Open;

   StepY:=1;

   prgBarKateg.TotalParts:=TmpRecCount;
   prgBarKateg.ShowPercent:=true;
   For i:=0 to TmpRecCount-1 do
   begin
     MainGrd.RowCount:=StepY;
     If dm1.qrFirms.fieldbyname("isJurFace").AsInteger=0 then TmpKlImage:=15 else
       If dm1.qrFirms.fieldbyname("isJurFace").AsInteger=1 then TmpKlImage:=14 else
         If dm1.qrFirms.fieldbyname("isJurFace").AsInteger=2 then TmpKlImage:=16 else
           TmpKlImage:=-1;

     MainGrd.Cells[1,StepY-1]:="<IMG src="idx:"+Inttostr(TmpKlImage)+""><FONT color="clBlack" size=10> => ("+Inttostr(i+1)+") "+dm1.qrFirms.fieldbyname("name_firm").AsString+"</FONT>";
     MainGrd.RowHeights[stepY-1]:=20;

     TmpBeg:=stepY-1;

     StepY:=StepY+1;
     MainGrd.RowCount:=STepY;
     MainGrd.Cells[1,stepY-1]:="      РНН :     <a href="rnn="+dm1.qrFirms.fieldbyname("rnn").AsString+" type="+dm1.qrFirms.fieldbyname("isJurFace").AsString+"">"+dm1.qrFirms.fieldbyname("rnn").AsString+"</a>";
     MainGrd.RowHeights[StepY-1]:=20;
       MainGrd.Colors[1,stepY-1]:=$00C6E2FF;

     StepY:=StepY+1;
     MainGrd.RowCount:=STepY;
     MainGrd.Cells[1,stepY-1]:="      Адрес : <a href="gor="+dm1.qrFirms.fieldbyname("city").AsString+" ul="+dm1.qrFirms.fieldbyname("Street").AsString+" DOM="+dm1.qrFirms.fieldbyname("dom").AsString+""> "+dm1.qrFirms.fieldbyname("City").AsString+", "+dm1.qrFirms.fieldbyname("Street").AsString+", "+dm1.qrFirms.fieldbyname("dom").AsString+"</a>";
     MainGrd.RowHeights[StepY-1]:=20;
           MainGrd.Colors[1,stepY-1]:=$00C6E2FF;

     MainGrd.AddNode(TmpBeg,3);
     dm1.qrFirms.next;
     STepY:=StepY+1;
     prgBarKateg.PartsComplete:=i;
     Application.ProcessMessages;
   end;
   MainGrd.ContractAll;
   dm1.qrFirms.Close;
 end;
 DtMapMain.Enabled:=true;
 {Отключаем проценты}
 prgBarKateg.ShowPercent:=false;
 prgBarKateg.PartsComplete:=0;
 prgBarKateg.TotalParts:=0;
 {Начинаем рисовать данные в гриде}
 MainGrd.endupdate;
 {Выводим количество записей}
 stBarKateg.Caption:=format("Субъектов : %d",[i]);
 dm1.qrFirms.UniDirectional:=False;
 dm1.qrFirms.close;



Johnmen ©   (2006-10-11 09:59) [4]


> dm1.qrFirms.SQL.Text: = "seleccionar recuento (id) de las firmas de clientes
> ordenar por name_firm donde kat_firm = ... ";


¿Por qué determinar el número de registros? Después de todo, ¡hasta la próxima solicitud puede cambiar!


> dm1.qrFirms.Close;


¿Por qué hacerlo dos veces? Por qué dm1.qrFirms.UniDirectional: = False; antes de cerrar ???

PS
Deseche el componente izquierdo. Aplique TTreeView regular.



sniknik ©   (2006-10-11 11:08) [5]

>>> 1 ¿No utiliza componentes no estándar?
> No funciona, en el estándar no existe tal característica.
en general, si no hay ninguna característica, entonces es normal escribirla de acuerdo con el pragmático ... si la necesita. y no apresurarse en busca de personas deficientes y miserables.

Si no hay posibilidad / reemplazo y no estándar, todo lo mismo tiene que usar, elija al menos cuál tiene la fuente. para poder arreglarlo usted mismo.

> MainGrd.RemoveAllNodes;
> MainGrd.Clear;
Claro, en teoría, está limpiando todo, normalmente escrito, RemoveAllNodes en este caso es superfluo.

ps volcar el código no es exactamente lo que se llama una discusión ... Esperaba que hubiera al menos algunas explicaciones, acciones, como “aquí tomamos la medición del tiempo - xx: xx, después de ejecutar estos comandos, tiempo xx: xx, observamos la diferencia es 2 horas ... que es inaceptable en 2000 registros ... "
es decir para que quede claro, pero de lo anterior no está nada claro que los frenos estén en RemoveAllNodes, y no en una transferencia torcida.

pps TTreeView es claramente preferible. aunque solo sea porque todos lo tienen, y su comportamiento puede verificarse y no depender de declaraciones no confirmadas.



jiny   (2006-10-12 08:20) [6]

>> Johnmen © (11.10.06 09: 59) [4]
> dm1.qrFirms.SQL.Text: = "seleccionar recuento (id) de las firmas de clientes
> ordenar por name_firm donde kat_firm = ... ";

>> ¿Por qué determinar el número de registros? Después de todo, hasta la próxima solicitud >> puede cambiar

si no te diste cuenta donde kat_firm = ... "; (número de entradas) y cambia cada vez que se cambian los criterios de condición.

>> ¿Por qué hacerlo dos veces? Por qué dm1.qrFirms.UniDirectional: = False; antes >> Cerrar ???
tienes razón, es más cierto lo contrario.
>> PS
>> Descarte el componente izquierdo. Aplique TTreeView regular.
el componente no se deja en absoluto, pero por alguna razón se ralentiza con una gran cantidad de datos.

>> 1 ¿No utiliza componentes no estándar?
>> No funcionará, no existe tal característica en el estándar.
en general, si no hay ninguna característica, entonces es normal escribirla de acuerdo con el pragmático ... si la necesita. y no apresurarse en busca de personas deficientes y miserables.

sniknik © (11.10.06 11: 08) [5]
>>> 1 ¿No utiliza componentes no estándar?
> No funciona, en el estándar no existe tal característica.
en general, si no hay ninguna característica, entonces es normal escribirla de acuerdo con el pragmático ... si la necesita. y no apresurarse en busca de personas deficientes y miserables.

>> si no hay posibilidad / reemplazo y no estándar todos tienen lo mismo?
>> use y luego elija al menos lo que tiene la fuente. tener
>> la capacidad de arreglarlo por ti mismo.
Estoy de acuerdo aquí, lo buscaré, pero tengo un tiempo limitado, entonces tal vez escribiré por mí mismo, pero ahora necesito dar al menos algo que funcione para presentar el programa, de esto depende si tomarán el programa o no.

>> ps volcar el código no es exactamente lo que se llama una discusión ...
>> Esperaba que hubiera al menos alguna explicación, acciones, como "aquí lo hacemos
>> medición de tiempo - xx: xx, después de lo cual ejecutamos estos comandos, tiempo xx: xx,
>> mira la diferencia, son 2 horas ... lo cual es inaceptable en 2000 registros ... "
En principio, lo más importante a lo que pedí que prestara atención es RemoveAllNodes, todo lo demás funciona como un reloj, si hay sugerencias sobre cómo optimizar el procedimiento de limpieza de Grid con todas las ramas,

>> MainGrd.RemoveAllNodes;
>> MainGrd.Clear;
>>> Claro en teoría es la limpieza de todo, normalmente escrito, RemoveAllNodes >>> en este caso es superfluo.
pero aquí, aparentemente, no está familiarizado con este componente, MainGrd.RemoveAllNodes borra las ramas dependientes de la "dependencia" y las convierte en celdas ordinarias (los datos en ellas no desaparecen), y Clear borra todo por completo.



evvcom ©   (2006-10-12 08:34) [7]

> [6] jiny (12.10.06/08/20 XNUMX:XNUMX)
> pero ahora necesito dar al menos algo que funcione para la presentación
> programas, depende de esto generalmente tomará el programa
> o no.

Para la presentación del programa, no es necesario registrar millas. Deja 2-3 docenas de entradas, esto es suficiente. ¿Se ralentiza a las 20-30?

> en principio, lo más importante a lo que le pedí que prestara atención
> esto es RemoveAllNodes, todo lo demás funciona como un reloj, si
> hay sugerencias sobre cómo optimizar el procedimiento de limpieza de la red

Puede optimizar al tener el código fuente para este RemoveAllNodes y otros métodos. Sin el código fuente, es muy difícil hacer algo, para los no hackers es simplemente imposible.

> >>> Claro, en teoría, es la limpieza de todo, normalmente escrito,
> RemoveAllNodes >>> en este caso es superfluo.
> y aquí, aparentemente, no estás familiarizado con este componente, MainGrd.RemoveAllNodes
> limpia las ramas dependientes de la dependencia y las hace
> celdas regulares (los datos en ellas no desaparecen), y Clear borra
> todo está completo.

En teoría, sniknik tiene razón, y el propio Clear tuvo que ocuparse de llamar a RemoveAllNodes, porque esto es lógico, lo que mencionó:
> en normalmente escrito



Johnmen ©   (2006-10-12 09:33) [8]


> jiny (12.10.06/08/20 6:XNUMX) [XNUMX]
> no se dio cuenta de donde kat_firm = ... "; it (número de entradas)
> y cambia cada vez que cambian los criterios de condición.


Me di cuenta de todo, mi misterioso amigo. Y hablé de otra cosa.
A saber. ¿No crees que mientras tu programa ejecuta código
de
TmpRecCount: = dm1.qrFirms.Fields [0] .AsInteger;
a
Para i: = 0 a TmpRecCount-1 do
cantidad de registros que coinciden con la consulta
dm1.qrFirms.SQL.Text: = "seleccione el recuento (id) de las firmas de klient ordenadas por name_firm donde kat_firm = ...";
puede cambiar?



evvcom ©   (2006-10-12 10:12) [9]

> [8] Johnmen © (12.10.06 09: 33)
> a
> Para i: = 0 a TmpRecCount-1 do

No ... hasta el segundo
dm1.qrFirms.Open; :)



Johnmen ©   (2006-10-12 10:30) [10]


> evvcom © (12.10.06 10: 12) [9]


Si si :)



sniknik ©   (2006-10-12 12:45) [11]

> para los no hackers, es simplemente imposible.
¿Eres en vano? Un buen programador tiene órdenes de magnitud más altas que los piratas informáticos ... pero no hay buenos piratas informáticos, solo hay programadores involucrados por alguna razón en el pirateo.

> y Clear mismo tuvo que ocuparse de llamar a RemoveAllNodes
no se trata de llamarlo, sino de una limpieza completa, como por qué limpiar la memoria bloque por bloque, si inmediatamente después se elimina por completo, junto con todas las partes que contiene ...
es decir si corresponde a este componente
> y aquí, aparentemente, no está familiarizado con este componente, MainGrd.RemoveAllNodes borra las ramas dependientes de la "dependencia"
> y las convierte en celdas ordinarias (los datos que contiene no desaparecen), y Clear borra todo por completo.
las dependencias desaparecen junto con los datos ... entonces, ¿por qué limpiarlos?

pero no importa desde Todavía no estoy seguro si el problema es con RemoveAllNodes o el componente en general, es más como los frenos de la parte del autor; y bueno, es nafik. No y no juicio.



evvcom ©   (2006-10-12 13:01) [12]

> [11] sniknik © (12.10.06 12: 45)
citadoXNUMX >> para los no hackers, es simplemente imposible.
> et you in vain, un buen programador de órdenes de magnitud superior a los hackers ...

Bueno, al no tener el código fuente, pero es muy necesario arreglarlo usted mismo, ¿qué hará? Presione Ctrl + Alt + C y luego el depurador? Bueno, todavía usas el navegador (Shift + Ctrl + B). En mi humilde opinión, esto es piratería.

> y no hay buenos hackers en absoluto

Aquí, creo, cuántas personas, tantas opiniones. No tiene sentido discutir.

> hackers por alguna razón

Bueno, esto es innegable.



Páginas: 1 rama entera

Foro: "Bases";
Archivo actual: 2006.12.24;
Descargar: [xml.tar.bz2];

arriba









Memoria: 0.65 MB
Tiempo: 0.081 c
2-1165574989
.ruslan
2006-12-08 13:49
2006.12.24
¿Cómo negar en Richedit poner el cursor?


2-1165248285
PP
2006-12-04 19:04
2006.12.24
Conexión de varias solicitudes por medio de Delphi ......


15-1164867098
q10nik
2006-11-30 09:11
2006.12.24
Tarea de lavado de cerebro para reventar ...


2-1165410960
Rtr
2006-12-06 16:16
2006.12.24
pregunta sobre Word


15-1164960118
Oceano
2006-12-01 11:01
2006.12.24
Nacido de la revolución





africaans albanés Arabic armenio Azerbaiyán vasco Bielorruso Bulgarian Catalán Chino (simplificado) Chino (tradicional) Croata Checo Danés Dutch Inglés Estonia filipina Finnish Francés
gallego georgiano Alemán Griego criollo haitiano Hebreo hindi Húngaro islandés Indonesian irlandés Italiana Japonés Korean letón lituano macedonio Malay maltés Noruego
persa polaco Portuguese Rumano Ruso Serbio Slovak Esloveno Español swahili Sueco Thai turco ucranio Urdu vietnamita galés yídish bengalí bosnio
cebuano esperanto gujarati hausa hmong igbo javanés kannada khmer lao latín maorí marathi mongol nepali punjabi somalí Tamil telugu yoruba
zulú
Английский Francés Alemán Italiano portugués Русский Español