Red de conocimiento informático - Conocimiento del nombre de dominio - Cómo mostrar una gran cantidad de datos en el control Grid sin tomar demasiado tiempo

Cómo mostrar una gran cantidad de datos en el control Grid sin tomar demasiado tiempo

Tengo una base de datos de acceso con más de 10,000 registros. Al realizar la consulta, todos los datos después de ADOQuery se muestran en el control DevExpress cxGrid a través del control DataSource. Cada consulta tarda 5 segundos en responder a la operación del usuario. ¿Podría proporcionarnos un método para que Grid responda rápidamente? Al igual que cuando abre una tabla con una gran cantidad de datos en Access o SQL SERVER, después de que se muestran parte de los datos, otros datos se actualizan en segundo plano. Si muestra los datos en páginas para operaciones de respuesta rápida, la velocidad aumentará. aumentar. . . Sí, eso es lo que quiero, pero ¿cómo mostrarlo en páginas? Sigue esta publicación y te ayudaré a que te guste ~ También quiero saber sobre cxGrid. Nunca he usado cxGrid, pero usé DBGrid para mostrar una tabla con más de 40,000 registros en la base de datos de Access, y solo toma dos o tres segundos. ¿Puedes decirme cómo afrontarlo? Es mejor optimizar los datos (declaración de consulta). . Intente no utilizar clics que no necesiten mostrarse, por muy bueno que sea el control de la cuadrícula de datos. . Cuando la cantidad de datos es grande. . Siempre habrá problemas con la relativa lentitud. . Debido a que el tamaño de la pantalla de visualización es limitado, es suficiente mostrar 30 registros en cada pantalla. El programa maneja la página anterior y la página siguiente. El programa permite a los usuarios establecer la cantidad de registros que se muestran en cada pantalla. ¿Tengo que escribir mi propio programa para controlar la cantidad de visualizaciones en cada página? ¿No tiene el control de la red de datos las funciones anteriores? Al igual que SQL SERVER o ACCESS, cuando hay una gran cantidad de datos, primero será una página y luego podrá responder a las operaciones del usuario. Al mismo tiempo, el fondo continúa agregando otros datos que no se muestran en el fondo. control de cuadrícula de datos. Por favor, ayuda. ¿Está claro para todos? . . Por favor, dame un poco de cara y pide ayuda. Existe una diferencia fundamental entre dbGrid y StringGrid (tu cxGrid debe ser dbGrid solo necesita mostrar el área de número de fila). No hay stringGrid. Puede usar Application.processmessage al cargar. El control DevExpress Grid que uso reconoce los datos. Obtiene el conjunto de datos a través del control DataSource, pero no encontré su función de paginación. Por favor, ayuda. Nunca he usado cxGrid, pero usé DBGrid para mostrar una tabla con más de 90.000 registros en una base de datos de Access y solo me lleva dos o tres segundos. CPU: P-M1.4 Memoria: 256 M El disco duro todavía tiene 4200 rpm. También tengo una computadora portátil. Somos similares. La clave es que no solo se trata de realizar consultas, sino también de realizar algunas operaciones SQL, por lo que lleva tiempo. Creo que la razón principal es que la velocidad del control de la tabla de datos no es suficiente. Sin agregar una tabla de datos, se completa rápidamente una consulta por separado. ? Probablemente haya decenas de miles de registros en la tabla de información del producto. El propio cxGrid también convierte registros de datos. Tiene su propio formato de registro de datos, por lo que hay una pérdida de velocidad. Es innegable que cxGrid es poderoso y sus funciones de consulta, filtrado, agrupación y otras le permiten hacerlo sin escribir una línea de código. Enterprise Manager de SQL Server y iSeries de DB2 y otros clientes similares no reciben todos los registros devueltos durante cada consulta. Pausan la recepción después de recibir una cierta cantidad de registros y luego reciben los registros restantes cuando el cliente los necesita. Esto se hace del lado del cliente. ¿El anfitrión cometió un error? Refiriéndose al código fuente de DBGrids.pas (TCustomDBGrid.DrawCell), DBGrid muestra datos mostrando cuántas filas de datos se leen. No lee todo el conjunto de datos en la memoria, por lo que incluso si hay 100 millones de datos. No tardará mucho en mostrarse, lo que lleva tiempo es que el componente del conjunto de datos y el programa de la base de datos se conecten a la base de datos, y DBGrid no guarda los datos que no se muestran.

Existen diferencias obvias entre StringGrid y DBGrid. La fuente de datos de DBGrid proviene del conjunto de datos, mientras que la fuente de datos de StringGrid proviene de la memoria. Por lo tanto, los datos deben colocarse en la memoria antes de que se muestre el cartel original. La idea solo tiene sentido para StringGrid, pero no es necesario recuperar los datos en segundo plano, simplemente monitoree TopLeftRow de StringGrid e imite DBGrid para leer los datos de la página actual. En cuanto a tablas como cxGrid, no es que la visualización sea lenta, sino que para completar varias funciones es necesario recorrer toda la base de datos una o incluso varias veces, por lo que es relativamente lento y no hay una buena manera. Debido a que cxGrid tiene que mapear todos los campos y todos los registros una vez después de leer los datos, la lentitud es inevitable. Si hay un campo de búsqueda en la tabla, será aún más lento. ¿No hay forma de hacerlo? ¿Puedo cambiar sólo el control DBGrid? dbgrideh también es bueno. Estoy deprimido. ¿Necesito reemplazar el control de la tabla de datos? El sistema se completó durante el uso y mantenimiento, se descubrió el problema de la visualización lenta de una gran cantidad de datos. No es una cuestión sencilla reemplazar todos los controles. Para beneficio de los usuarios, cambiaré los controles y. Cierra el post mañana para ver si hay alguna posibilidad de supervivencia. No hay esperanza. Renunciar a algunas funciones de cxgrid puede acelerar el proceso. No usaré cxgrid casualmente, porque después de actualizar dxgrid a cxgrid, los programas que escribí antes se eliminarán. ¿Qué pasa si exgrid viene más tarde? ¿Qué debo hacer con fxgrid? cxgrid tiene muchas características. Ustedes los programadores pueden usar estas cosas, pero ¿las usarán los usuarios que ni siquiera saben mucho sobre computadoras? ¿Son útiles algunas funciones? Sin mencionar que en China, no creo que los extranjeros puedan usarlo. En segundo lugar, muchas funciones de cxgrid operadas por mouse son realmente atractivas como visualización de pantalla, pero cuando se trata de cosas, estas funciones no tienen ningún significado excepto pasar tiempo. En tercer lugar, el control cxgrid es muy especial. No es compatible con otros, ni siquiera con su propio dxgrid. Si desea cambiar el control, casi tendrá que reescribir todo el programa. Tu forma de pensar cambiará. Cuarto, por lo que no tiene ningún propósito especial. No importa cuán poderosa sea su función, debe considerarse cuidadosamente para evitar arrepentimientos. Sí, cxGrid tiene muchas desventajas. No es imposible cambiar el control de la tabla de datos, pero hay razones: el sistema se ha completado y se ha utilizado durante mucho tiempo. Cambiar el control puede introducir errores. Muchas tablas de datos usan master-slave, o incluso una relación de tres niveles. Si no usa cxGrid pero también usa otros controles de terceros, aún habrá problemas de compatibilidad. En segundo lugar, en tercer lugar, confío en las capacidades de investigación y desarrollo de DevExpress. Creo que debe haber una solución. En tercer lugar, no quiero rendirme y seguir probando otros métodos. Oye, no te sorprendas si sigues el ejemplo anterior. Tal vez se pueda usar subprocesos múltiples. Lo probaré esta noche. Cuando SQL SERVER y ACCESS muestran registros de datos, parece que se usan subprocesos múltiples... El cartel original, vierta agua fría sobre él. en la base de datos, encontrará dificultades sin precedentes. ------Problemas de seguridad de subprocesos en los controles del conjunto de datos. Por ejemplo, hay varios subprocesos que utilizan un conjunto de controles de datos al mismo tiempo a:=DataSet.FieldByName(**). *).AsString. b:=DataSet.FieldByName(* ** ).AsString Si estas dos oraciones se ejecutan continuamente, a veces b es igual a a, y otras veces no es igual, y se producirán errores de lectura, o incluso fatales. Se informarán errores y el programa se bloqueará porque el control de datos ha sido modificado por otros subprocesos o eliminado, o Dos subprocesos leídos al mismo tiempo, usar Sincronizar puede resolver el problema, pero este es un retorno disfrazado a un solo hilo, que es incluso más lento que la ejecución de un solo hilo. Como resultado, sale de este pozo y cae en otro pozo, y cae cada vez más profundamente. Experiencia Lo creas o no, puedes intentarlo. La forma más sencilla es reducir la cantidad de datos leídos cada vez. Parece que no es necesario leer decenas de miles de datos a la vez.

1: .DisableControls 2: ir 3: .EnableControls Hoy no tengo tiempo. Hay demasiadas cosas triviales que hacer. No puedo calmarme y escribir código. Gracias kinneng por tu generoso consejo. de Un Mundo Sin Ladrones: "Quiero Probarlo". Después de retrasar la publicación por un día, realmente no encontré una buena solución. Parece que en el programa futuro solo se puede mostrar en páginas.