Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   FireMonkey (https://www.clubdelphi.com/foros/forumdisplay.php?f=50)
-   -   Velocidad de carga en TGrid y TStringGrid (https://www.clubdelphi.com/foros/showthread.php?t=94935)

ElDioni 06-11-2020 11:42:19

Velocidad de carga en TGrid y TStringGrid
 
Buenas a todos,

hoy, por primera vez, me he puesto a desarrollar una aplicación multiplataforma para windows y mac. Estoy utilizando componentes de conexión FDConnection a una base de datos en un servidor windows server 2019 que tiene una base de datos MySQL.

Cuando creo el proyecto veo que, para que funcione en las dos plataformas, puedo utilizar el TGrid y el TStringGrid para visualizar los datos de un FDQuery, el caso que me ocurre es que, si no enlazo el FDQuery a ninguno de los componentes de visualización y le doy a Activate:=true, tarda poco en traer los datos del servidor, cuando lo enlazo tarda un minuto largo en pintar la información en estos grids, si en lugar de utilizar estos elementos cojo, los mismos componentes de conexión (FDConnection y FDQuery) pero en una aplicación VCL con un TDBGrid, el pintado es prácticamente instantáneo.

El enlace en la aplicación multi se hace automáticamente en bindvisually arrastrando el DataSet al Grid, da igual que el que sea, TGrid o TStringGrid, con los dos tarda muchísimo.

¿Hay algo que esté haciendo mal?, ¿Tendría que utilizar otro tipo de componente de terceros?.

En fin que no sé que hacer, si a alguno se le ocurre algo agradecería la ayuda.

Saludos.

Neftali [Germán.Estévez] 06-11-2020 13:30:54

¿Has utilizado EnableControls/DisableControls?

ElDioni 06-11-2020 14:55:13

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 538987)
¿Has utilizado EnableControls/DisableControls?

Hola Germán,

lo siento pero no sé a que te refieres.

¿Podrías ilustrarme?

Saludos.

ElDioni 06-11-2020 14:58:47

Hola de nuevo,

he visto que es una propiedad que lleva el dataset, lo he puesto sin más antes de hacer la consulta (fdquery1.enablecontrols;), si es así como se utiliza no ha hecho nada, sigue igual de lento.

Saludos.

ecfisa 06-11-2020 15:42:21

Hola.

El uso sería al revés, DisableControls antes de efectuar la consulta y EnableControls una vez realizada.
Código Delphi [-]
  fdquery1.DisableControls;
  try
    // acciones pertinentes
    // ...
  finally
    fdquery1.EnableControls;
  end;

Saludos :)

el-mono 07-11-2020 00:29:04

Hola ElDioni yo personalmente tengo una aplicacion para windows y macOS bajo Firemonkey hace 5 años y va de pelos je, la verdad Livebindings no me gusta nada de nada prefiero hacer las consultas y llenar las grillas a mano, te recomiendo si podes dentro de tus posibilidades adquirir las grillas de TMSsoftware y los controles OrangeUI Free que son increibles.

ElDioni 09-11-2020 08:14:39

Cita:

Empezado por ecfisa (Mensaje 538992)
Hola.

El uso sería al revés, DisableControls antes de efectuar la consulta y EnableControls una vez realizada.
Código Delphi [-]
  fdquery1.DisableControls;
  try
    // acciones pertinentes
    // ...
  finally
    fdquery1.EnableControls;
  end;

Saludos :)

Buenos días,

he probado como me comentas y no ha mejorado nada, estoy cargando la información en un StringGrid ya que con TGrid me salta un error al intentar enlazar los datos que reza así:

"Cannot change this property when using livebindings"

Voy a echar un vistazo a los componentes que proponía el compañero a ver que me encuentro.

Saludos.

Neftali [Germán.Estévez] 09-11-2020 08:55:00

Tal vez si pones el código que usas para mostrar los datos podamos afinar un poco más.
Estamos dando palos de ciego.

movorack 09-11-2020 14:52:55

Puede que lo que esté sucediendo es que al usar livebindings, estás obteniendo todos los datos de la tabla.

Normalmente, si estableces la propiedad PacketRecords de un TClientDataset, obtendrás grupos de registros según lo requieras. En cambio con LiveBindings, al parecer esto no funciona así. Aclaro que no he leído documentación al respecto y puede que no haya establecido alguna propiedad que respete la cantidad de registros obtenidos.

Hice una prueba, con Firebird. Una tabla de 1000 registros y 2 ClientDatasets. El primero asociado a una Tgrid con LiveBindings y el segundo sin asociar. Ambos con la propiedad PacketRecords = 50.

Al abrir ambos datasets, el resultado del RecordCount es: El asociado a LiveBindings = 1000 y el otro = 50.

ElDioni 10-11-2020 13:30:44

Cita:

Empezado por Neftali [Germán.Estévez] (Mensaje 539015)
Tal vez si pones el código que usas para mostrar los datos podamos afinar un poco más.
Estamos dando palos de ciego.

No tengo código, está todo creado en diseño, están todos los objetos en el formulario y lo único que hago es, en un botón, poner Active:=true el dataset.

Los objetos que hay son, un FDConnection, un FDQuery, un StringGrid, un FDPhysMySQLDriverLink, un BindSourceDB, un BindingsList (estos dos últimos me los crea automáticamente al enlazar el FDQuery con el StringGrid en el bindvisually) y un button.

Saludos.


La franja horaria es GMT +2. Ahora son las 14:45:04.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi