<html>
<head>
<meta content="text/html; charset=ISO-8859-1"
http-equiv="Content-Type">
</head>
<body bgcolor="#FFFFFF" text="#000000">
<div class="moz-cite-prefix">El 24-10-2012 13:23, Maxi escribió:<br>
</div>
<blockquote
cite="mid:CAOL=nArhkr-qWf9jgezj=bS0T+fxXjtifQuHiJ0OeTcvF0dvWA@mail.gmail.com"
type="cite"><br>
<br>
<div class="gmail_quote">El 24 de octubre de 2012 14:05, Paola
Bruccoleri <span dir="ltr"><<a moz-do-not-send="true"
href="mailto:pbruccoleri@adinet.com.uy" target="_blank">pbruccoleri@adinet.com.uy</a>></span>
escribió:<br>
<blockquote class="gmail_quote" style="margin:0 0 0
.8ex;border-left:1px #ccc solid;padding-left:1ex">
Hola todos..<br>
necesito me orienten en un problema que tengo.<br>
Tengo un form donde hay una grilla que muestra TODOS los
registros de un TTable (firebird 2.1.4, componentes zeos).<br>
Además hay botones para agregar/eliminar/modificar esos
registros.<br>
<br>
A ese TTable le hice clic derecho/editar campos y agregué
todos los campos de la tabla y además cree 4 campos lookup
para que por ejemplo en vez de que se vea el código del
operario se vea el nombre, etc.<br>
En el grid se visualizan solo el número de registro, la fecha
y esos 4 campos lookup.<br>
Como esos 4 campos son claves foráneas de otras tablas, hay
índices.<br>
<br>
En el evento onTitleClick, se ordenan los datos según la
columna clickeada.<br>
Uso este código:<br>
<br>
procedure TABMF03.DBGrid1TitleClick(Column: TColumn);<br>
var<br>
temp : ZAbstractRODataset.TSortType;<br>
const<br>
PreviousColumnIndex: integer = 0;<br>
begin<br>
try<br>
DBGrid1.Columns[PreviousColumnIndex].title.Font.Style :=<br>
DBGrid1.Columns[PreviousColumnIndex].title.Font.Style
- [fsBold];<br>
except<br>
end;<br>
<br>
Column.Title.Font.Style:= Column.Title.Font.Style +
[fsBold];<br>
PreviousColumnIndex := Column.Index;<br>
<br>
temp := dbForm03.SortType;<br>
dbForm03.SortedFields := Column.FieldName;<br>
if temp = stAscending then begin<br>
dbForm03.SortType := stDescending;<br>
DBGrid1.Columns[PreviousColumnIndex].Title.ImageIndex:=
1;<br>
end else begin<br>
dbForm03.SortType := stAscending;<br>
DBGrid1.Columns[PreviousColumnIndex].Title.ImageIndex:=
0;<br>
end;<br>
end;<br>
<br>
pero con una simple tabla de 10mil registros, ordenar por esos
campos lookup lo hace MUY LENTO y además, en la mayoría de las
veces se cuelga el sistema.<br>
<br>
Otra cosa es que cuando agrego un registro a esa tabla, el
guardar tb se hace mUY lento.. y solo hago 1 insert en esa
tabla y hasta 6 inserts más en otra de detalle<br>
<br>
Se que es un disparate mostrar todos los registros de esa
tabla.. pero en un principio es lo que ellos querían.<br>
Se que debería quizás rediseñar ese form para que se muestre
solo determinados registros y quizás eso haga que no se
enlentezca al ordenar por X columna y al grabar.<br>
<br>
El concepto es como si fuera un listado de facturas, con
posibilidad de agregar, borrar, eliminar, imprimir las mismas.<br>
<br>
Agradezco cualquier idea..<br>
byeeeeeeeee<br>
<br>
<br>
<br>
<br>
_______________________________________________<br>
Lazarus-es mailing list<br>
<a moz-do-not-send="true"
href="mailto:Lazarus-es@lists.lazarus.freepascal.org"
target="_blank">Lazarus-es@lists.lazarus.freepascal.org</a><br>
<a moz-do-not-send="true"
href="http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es"
target="_blank">http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es</a><br>
</blockquote>
</div>
<br>
Regla numero 1, si vas a ordenar debes tener indices creados para
cada columna, asi el motor los aprovecha sino en cada ordenamiento
los recorre uno a uno para generar el orden.<br>
en un lookup no es buena idea una tabla con muchos registros no
esta pensado para eso, en ese caso pondria un buscador segun tipee
el usuario. y abrir una grilla con la busqueda en caso de que
arroje mas de 1 coincidencia. Tengo un ejemplo si te sirve.<br>
<br clear="all">
<br>
-- <br>
El que pregunta aprende, y el que contesta aprende a responder.<br>
<br>
No a la obsolecencia programada: <a moz-do-not-send="true"
href="http://dimensionargentina.blogspot.com/2011/01/todo-esta-disenado-para-romperse.html"
target="_blank">http://dimensionargentina.blogspot.com/2011/01/todo-esta-disenado-para-romperse.html</a><br>
<br>
Linux User #495070<br>
<a moz-do-not-send="true" href="http://domonetic.com/blog"
target="_blank">http://domonetic.com/blog</a><br>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<br>
<pre wrap="">_______________________________________________
Lazarus-es mailing list
<a class="moz-txt-link-abbreviated" href="mailto:Lazarus-es@lists.lazarus.freepascal.org">Lazarus-es@lists.lazarus.freepascal.org</a>
<a class="moz-txt-link-freetext" href="http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es">http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es</a>
</pre>
</blockquote>
Hola Paola:<br>
<br>
Esta de mas mi respusta pero apoyo la idea de maxi en cuanto a los
indices..... ( yo uso indices por cada columna que uso para ordenar
y la verdad es bastante mas rapido).<br>
<br>
Saludos<br>
</body>
</html>