![]() |
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. |
¿Has utilizado EnableControls/DisableControls?
|
Cita:
lo siento pero no sé a que te refieres. ¿Podrías ilustrarme? Saludos. |
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. |
Hola.
El uso sería al revés, DisableControls antes de efectuar la consulta y EnableControls una vez realizada.
Saludos :) |
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.
|
Cita:
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. |
Tal vez si pones el código que usas para mostrar los datos podamos afinar un poco más.
Estamos dando palos de ciego. |
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. |
Cita:
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 00:39:09. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi