Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / lazarus-es / 2012-10

problema con lentitud en sistema

11 messages · 6 people · –

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

Paola Bruccoleri

Hola todos..
necesito me orienten en un problema que tengo.
Tengo un form donde hay una grilla que muestra TODOS los registros de un TTable (firebird 2.1.4, componentes zeos).
Adem�s hay botones para agregar/eliminar/modificar esos registros.

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. En el grid se visualizan solo el n�mero de registro, la fecha y esos 4 campos lookup.
Como esos 4 campos son claves for�neas de otras tablas, hay �ndices.

En el evento onTitleClick, se ordenan los datos seg�n la columna clickeada. Uso este c�digo:

procedure TABMF03.DBGrid1TitleClick(Column: TColumn);
var
   temp : ZAbstractRODataset.TSortType;
const
   PreviousColumnIndex: integer = 0;
begin
   try
       DBGrid1.Columns[PreviousColumnIndex].title.Font.Style :=
          DBGrid1.Columns[PreviousColumnIndex].title.Font.Style - [fsBold];
   except
   end;
   Column.Title.Font.Style:=  Column.Title.Font.Style + [fsBold];
   PreviousColumnIndex := Column.Index;
   temp := dbForm03.SortType;
   dbForm03.SortedFields := Column.FieldName;
   if temp = stAscending then begin
        dbForm03.SortType := stDescending;
        DBGrid1.Columns[PreviousColumnIndex].Title.ImageIndex:= 1;
   end else begin
        dbForm03.SortType := stAscending;
        DBGrid1.Columns[PreviousColumnIndex].Title.ImageIndex:= 0;
   end;
end;

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.

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

Se que es un disparate mostrar todos los registros de esa tabla.. pero en un principio es lo que ellos quer�an.
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.

El concepto es como si fuera un listado de facturas, con posibilidad de agregar, borrar, eliminar, imprimir las mismas.

Agradezco cualquier idea..
byeeeeeeeee

Reply by email

Maxi
to Paola Bruccoleri

El 24 de octubre de 2012 14:05, Paola Bruccoleri
<pbruccoleri en adinet.com.uy>escribi�:

Show quoted text 71 lines
Hola todos.. necesito me orienten en un problema que tengo. Tengo un form donde hay una grilla que muestra TODOS los registros de un TTable (firebird 2.1.4, componentes zeos). Adem�s hay botones para agregar/eliminar/modificar esos registros. 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. En el grid se visualizan solo el n�mero de registro, la fecha y esos 4 campos lookup. Como esos 4 campos son claves for�neas de otras tablas, hay �ndices. En el evento onTitleClick, se ordenan los datos seg�n la columna clickeada. Uso este c�digo: procedure TABMF03.DBGrid1TitleClick(**Column: TColumn); var temp : ZAbstractRODataset.TSortType; const PreviousColumnIndex: integer = 0; begin try DBGrid1.Columns[**PreviousColumnIndex].title.**Font.Style := DBGrid1.Columns[**PreviousColumnIndex].title.**Font.Style - [fsBold]; except end; Column.Title.Font.Style:= Column.Title.Font.Style + [fsBold]; PreviousColumnIndex := Column.Index; temp := dbForm03.SortType; dbForm03.SortedFields := Column.FieldName; if temp = stAscending then begin dbForm03.SortType := stDescending; DBGrid1.Columns[**PreviousColumnIndex].Title.**ImageIndex:= 1; end else begin dbForm03.SortType := stAscending; DBGrid1.Columns[**PreviousColumnIndex].Title.**ImageIndex:= 0; end; end; 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. 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 Se que es un disparate mostrar todos los registros de esa tabla.. pero en un principio es lo que ellos quer�an. 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. El concepto es como si fuera un listado de facturas, con posibilidad de agregar, borrar, eliminar, imprimir las mismas. Agradezco cualquier idea.. byeeeeeeeee ______________________________**_________________ Lazarus-es mailing list Lazarus-es en lists.lazarus.**freepascal.org<Lazarus-es en lists.lazarus.freepascal.org> http://lists.lazarus.**freepascal.org/mailman/**listinfo/lazarus-es<http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es>

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.
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.

El que pregunta aprende, y el que contesta aprende a responder. No a la obsolecencia programada: http://dimensionargentina.blogspot.com/2011/01/todo-esta-disenado-para-romperse.html Linux User #495070 http://domonetic.com/blog ------------ pr�xima parte ------------ Se ha borrado un adjunto en formato HTML... URL: <http://lists.lazarus.freepascal.org/pipermail/lazarus-es/attachments/20121024/66707aac/attachment.html>

Reply by email

Paola Bruccoleri
to Maxi

Hola Maxi..

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.

si, los indices por codigo de operario, etc ya existen en esa tabla maestra.

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.

bueno, te agradezco, porque no te entiendo tu idea. El asunto es c�mo mostrar datos enlazados de otra tabla, no veo como si no uso campos lookup.
Por ejemplo si la tabla tiene
nro factura - codigo vendedor - codigo usuario - importe, etc...

es coherente mostrar en vez del c�digo de vendedor, usuario, etc, su NOMBRE y eso es lo que intento hacer y a su vez, ordenar las columnas por esos nombres

muchas gracias
byeeeeeeee

Reply by email

Horacio Jamilis
to Paola Bruccoleri

Paola,

En que medio tenes los datos? Si es en alguna base con soporte de SQL, lo que te recomiendo es que obtengas todos los datos juntos en una sola consulta usando joins.
Sino, por cada registro y cada campo "lookup" tiene que buscarlo... si lo hace el motor SQL debiera funcionar muchisimo m�s r�pido. Y para el alta o modificaci�n de un registro, te sugiero que tengas un formulario adicional, en lugar de editar sobre la grilla. Lo mismo, al guardar el alta o modificaci�n, hacelo con SQL, y luego refresca la consulta que muestra la lista completa.

Ojala te sirva.

Saludos,

Horacio

El 24/10/2012 14:32, Paola Bruccoleri escribi�:

Show quoted text 33 lines
Hola Maxi.. > 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. si, los indices por codigo de operario, etc ya existen en esa tabla maestra. > 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. bueno, te agradezco, porque no te entiendo tu idea. El asunto es c�mo mostrar datos enlazados de otra tabla, no veo como si no uso campos lookup. Por ejemplo si la tabla tiene nro factura - codigo vendedor - codigo usuario - importe, etc... es coherente mostrar en vez del c�digo de vendedor, usuario, etc, su NOMBRE y eso es lo que intento hacer y a su vez, ordenar las columnas por esos nombres muchas gracias byeeeeeeee _______________________________________________ Lazarus-es mailing list Lazarus-es en lists.lazarus.freepascal.org http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es

Reply by email

Jorge Martinez Saez
to Maxi: El 24 de octubre de 2012 14:05, Paola Bruccoleri <pbruccoleri en adinet.com.uy>escribi�:

El 24-10-2012 13:23, Maxi escribi�:

Show quoted text 103 lines
El 24 de octubre de 2012 14:05, Paola Bruccoleri <pbruccoleri en adinet.com.uy <mailto:pbruccoleri en adinet.com.uy>> escribi�: Hola todos.. necesito me orienten en un problema que tengo. Tengo un form donde hay una grilla que muestra TODOS los registros de un TTable (firebird 2.1.4, componentes zeos). Adem�s hay botones para agregar/eliminar/modificar esos registros. 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. En el grid se visualizan solo el n�mero de registro, la fecha y esos 4 campos lookup. Como esos 4 campos son claves for�neas de otras tablas, hay �ndices. En el evento onTitleClick, se ordenan los datos seg�n la columna clickeada. Uso este c�digo: procedure TABMF03.DBGrid1TitleClick(Column: TColumn); var temp : ZAbstractRODataset.TSortType; const PreviousColumnIndex: integer = 0; begin try DBGrid1.Columns[PreviousColumnIndex].title.Font.Style := DBGrid1.Columns[PreviousColumnIndex].title.Font.Style - [fsBold]; except end; Column.Title.Font.Style:= Column.Title.Font.Style + [fsBold]; PreviousColumnIndex := Column.Index; temp := dbForm03.SortType; dbForm03.SortedFields := Column.FieldName; if temp = stAscending then begin dbForm03.SortType := stDescending; DBGrid1.Columns[PreviousColumnIndex].Title.ImageIndex:= 1; end else begin dbForm03.SortType := stAscending; DBGrid1.Columns[PreviousColumnIndex].Title.ImageIndex:= 0; end; end; 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. 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 Se que es un disparate mostrar todos los registros de esa tabla.. pero en un principio es lo que ellos quer�an. 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. El concepto es como si fuera un listado de facturas, con posibilidad de agregar, borrar, eliminar, imprimir las mismas. Agradezco cualquier idea.. byeeeeeeeee _______________________________________________ Lazarus-es mailing list Lazarus-es en lists.lazarus.freepascal.org <mailto:Lazarus-es en lists.lazarus.freepascal.org> http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es 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. 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. -- El que pregunta aprende, y el que contesta aprende a responder. No a la obsolecencia programada: http://dimensionargentina.blogspot.com/2011/01/todo-esta-disenado-para-romperse.html Linux User #495070 http://domonetic.com/blog _______________________________________________ Lazarus-es mailing list Lazarus-es en lists.lazarus.freepascal.org http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es

Hola Paola:

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).

Saludos
------------ pr�xima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus.freepascal.org/pipermail/lazarus-es/attachments/20121024/61e35296/attachment-0001.html>

Reply by email

Martin Gomez
to Paola Bruccoleri: Hola Maxi.. recorre si, los indices por codigo de operario, etc ya existen en esa tabla…

2012/10/24 Paola Bruccoleri <pbruccoleri en adinet.com.uy>

Show quoted text 10 lines
bueno, te agradezco, porque no te entiendo tu idea. El asunto es c�mo mostrar datos enlazados de otra tabla, no veo como si no uso campos lookup. Por ejemplo si la tabla tiene nro factura - codigo vendedor - codigo usuario - importe, etc... es coherente mostrar en vez del c�digo de vendedor, usuario, etc, su NOMBRE y eso es lo que intento hacer y a su vez, ordenar las columnas por esos nombres

Paola, como te comenta Horacio, tu soluci�n es reemplazar el TTable por un TQuery y usar una sentencia SQL que haga los lookups por vos, de esa manera el trabajo lo hace el server y la info se transmite una sola vez, vas a ver que no se cuelga m�s.
Para los Insert y Update, usas un TUpdateSQL (eso era en Delphi) o llenas la propiedad UpdateSQL (en SQLdb de Lazarus)

Creo que con unos cuantos INNER JOIN te libras de un buen dolor de cabeza.

Saludos.

Try not to become a man of success but rather to become a man of value. *Albert Einstein* ------------ pr�xima parte ------------ Se ha borrado un adjunto en formato HTML... URL: <http://lists.lazarus.freepascal.org/pipermail/lazarus-es/attachments/20121024/d6d90adc/attachment.html>

Reply by email

Maxi
to Martin Gomez

El 24 de octubre de 2012 16:07, Martin Gomez <mmgomez en gmail.com> escribi�:

Show quoted text 37 lines
2012/10/24 Paola Bruccoleri <pbruccoleri en adinet.com.uy> > bueno, te agradezco, porque no te entiendo tu idea. > El asunto es c�mo mostrar datos enlazados de otra tabla, no veo como si > no uso campos lookup. > Por ejemplo si la tabla tiene > nro factura - codigo vendedor - codigo usuario - importe, etc... > > es coherente mostrar en vez del c�digo de vendedor, usuario, etc, su > NOMBRE y eso es lo que intento hacer y a su vez, ordenar las columnas > por esos nombres > Paola, como te comenta Horacio, tu soluci�n es reemplazar el TTable por un TQuery y usar una sentencia SQL que haga los lookups por vos, de esa manera el trabajo lo hace el server y la info se transmite una sola vez, vas a ver que no se cuelga m�s. Para los Insert y Update, usas un TUpdateSQL (eso era en Delphi) o llenas la propiedad UpdateSQL (en SQLdb de Lazarus) Creo que con unos cuantos INNER JOIN te libras de un buen dolor de cabeza. Saludos. -- Try not to become a man of success but rather to become a man of value. *Albert Einstein* _______________________________________________ Lazarus-es mailing list Lazarus-es en lists.lazarus.freepascal.org http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es

Horacio me gano de mano.

Paola si queres velocidad te conviene hagas el join con todo, trayendo los codigos de la tabla pincipal y ocultas y la descripcion de la foranea, el order by va a ser rapido porque al refrescar cambiar el order by desde la consulta.

El que pregunta aprende, y el que contesta aprende a responder. No a la obsolecencia programada: http://dimensionargentina.blogspot.com/2011/01/todo-esta-disenado-para-romperse.html Linux User #495070 http://domonetic.com/blog ------------ pr�xima parte ------------ Se ha borrado un adjunto en formato HTML... URL: <http://lists.lazarus.freepascal.org/pipermail/lazarus-es/attachments/20121024/f3f2089c/attachment.html>

Reply by email

Paola Bruccoleri
to Maxi

Hola Maxi y todos..
gracias por sus respuestas.. eso s�, la de Horacio (?) nunca la v� (tampoco en el spam) jajaj
Despu�s les cuento como me va..
byeeeeeeeee

-- >----Original Message---- >De: maximiliano.duarte en gmail.com >Fecha: 24/10/2012 17:17 >Para: "Spanish version of Lazarus List"<lazarus-es en lists.lazarus. freepascal.org> >Asunto: Re: [Lazarus-es] problema con lentitud en sistema > >El 24 de octubre de 2012 16:07, Martin Gomez <mmgomez en gmail.com> escribi�: > >> >> >> 2012/10/24 Paola Bruccoleri <pbruccoleri en adinet.com.uy> >> >>> bueno, te agradezco, porque no te entiendo tu idea. >>> El asunto es c�mo mostrar datos enlazados de otra tabla, no veo como si >>> no uso campos lookup. >>> Por ejemplo si la tabla tiene >>> nro factura - codigo vendedor - codigo usuario - importe, etc... >>> >>> es coherente mostrar en vez del c�digo de vendedor, usuario, etc, su >>> NOMBRE y eso es lo que intento hacer y a su vez, ordenar las columnas >>> por esos nombres >>> >> >> Paola, como te comenta Horacio, tu soluci�n es reemplazar el TTable por un >> TQuery y usar una sentencia SQL que haga los lookups por vos, de esa manera >> el trabajo lo hace el server y la info se transmite una sola vez, vas a ver >> que no se cuelga m�s. >> Para los Insert y Update, usas un TUpdateSQL (eso era en Delphi) o llenas >> la propiedad UpdateSQL (en SQLdb de Lazarus) >> >> Creo que con unos cuantos INNER JOIN te libras de un buen dolor de cabeza. >> >> Saludos. >> >> -- >> Try not to become a man of success but rather to become a man of value. *Albert >> Einstein* >> >> >> _______________________________________________ >> Lazarus-es mailing list >> Lazarus-es en lists.lazarus.freepascal.org >> http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es >> >> > >Horacio me gano de mano. > >Paola si queres velocidad te conviene hagas el join con todo, trayendo los >codigos de la tabla pincipal y ocultas y la descripcion de la foranea, el >order by va a ser rapido porque al refrescar cambiar el order by desde la >consulta. > > >-- >El que pregunta aprende, y el que contesta aprende a responder. > >No a la obsolecencia programada: >http://dimensionargentina.blogspot.com/2011/01/todo-esta-disenado-para-romperse.html > >Linux User #495070 >http://domonetic.com/blog >_______________________________________________ >Lazarus-es mailing list >Lazarus-es en lists.lazarus.freepascal.org >http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es >

Reply by email

Eduardo Lopez
to Paola Bruccoleri

Adhiero a la sugerencia de hacer todo en el motor. Podes simplificar un poco el SQL si armas una vista en el motor y la usas en la grilla de datos. Las actualizaciones te recomiendo el UpdateSQL donde especific�s el comando SQL espec�fico con los campos. Saludos. Eduardo.

El 24/10/2012 05:20 p.m., Paola Bruccoleri escribi�:

Show quoted text 94 lines
Hola Maxi y todos.. gracias por sus respuestas.. eso s�, la de Horacio (?) nunca la v� (tampoco en el spam) jajaj Despu�s les cuento como me va.. byeeeeeeeee -- -- > ----Original Message---- > De: maximiliano.duarte en gmail.com > Fecha: 24/10/2012 17:17 > Para: "Spanish version of Lazarus List"<lazarus-es en lists.lazarus. freepascal.org> > Asunto: Re: [Lazarus-es] problema con lentitud en sistema > > El 24 de octubre de 2012 16:07, Martin Gomez<mmgomez en gmail.com> escribi�: >> >> 2012/10/24 Paola Bruccoleri<pbruccoleri en adinet.com.uy> >> >>> bueno, te agradezco, porque no te entiendo tu idea. >>> El asunto es c�mo mostrar datos enlazados de otra tabla, no veo como si >>> no uso campos lookup. >>> Por ejemplo si la tabla tiene >>> nro factura - codigo vendedor - codigo usuario - importe, etc... >>> >>> es coherente mostrar en vez del c�digo de vendedor, usuario, etc, su >>> NOMBRE y eso es lo que intento hacer y a su vez, ordenar las columnas >>> por esos nombres >>> >> Paola, como te comenta Horacio, tu soluci�n es reemplazar el TTable por un >> TQuery y usar una sentencia SQL que haga los lookups por vos, de esa manera >> el trabajo lo hace el server y la info se transmite una sola vez, vas a ver >> que no se cuelga m�s. >> Para los Insert y Update, usas un TUpdateSQL (eso era en Delphi) o llenas >> la propiedad UpdateSQL (en SQLdb de Lazarus) >> >> Creo que con unos cuantos INNER JOIN te libras de un buen dolor de cabeza. >> Saludos. >> >> -- >> Try not to become a man of success but rather to become a man of value. *Albert >> Einstein* >> >> >> _______________________________________________ >> Lazarus-es mailing list >> Lazarus-es en lists.lazarus.freepascal.org >> http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es >> >> > Horacio me gano de mano. > > Paola si queres velocidad te conviene hagas el join con todo, trayendo los > codigos de la tabla pincipal y ocultas y la descripcion de la foranea, el > order by va a ser rapido porque al refrescar cambiar el order by desde la > consulta. > > > -- > El que pregunta aprende, y el que contesta aprende a responder. > > No a la obsolecencia programada: > http://dimensionargentina.blogspot.com/2011/01/todo-esta-disenado-para-romperse.html > Linux User #495070 > http://domonetic.com/blog > _______________________________________________ > Lazarus-es mailing list > Lazarus-es en lists.lazarus.freepascal.org > http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es > _______________________________________________ Lazarus-es mailing list Lazarus-es en lists.lazarus.freepascal.org http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es

Reply by email

Martin Gomez
to Eduardo Lopez

2012/10/24 Eduardo Lopez <dar_alle en yahoo.com.ar>

Podes simplificar un poco el SQL si armas una vista en el motor y la usas en la grilla de datos.

Excelente opci�n, as� podr�a seguir usando el TTable!

Try not to become a man of success but rather to become a man of value. *Albert Einstein* ------------ pr�xima parte ------------ Se ha borrado un adjunto en formato HTML... URL: <http://lists.lazarus.freepascal.org/pipermail/lazarus-es/attachments/20121025/f826197a/attachment.html>

Reply by email