Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-02-2015
Avatar de jeremiselxi
jeremiselxi jeremiselxi is offline
Miembro
 
Registrado: ago 2008
Posts: 199
Poder: 16
jeremiselxi Va por buen camino
Question ADOTable: Refresh tarda mucho luego de un borrado

Buenas tardes colegas.

Estoy diseñando un sistema hospitalario en Delphi7 con base de datos SQL Server 2012.

Sucede que siempre he utilizado el botón eliminar con este código con poco registros:

Código Delphi [-]
if MessageDlg('¿Desea Eliminar este registro?',mtError, [mbyes, mbno], 0) = mryes then
  begin

  adotabla.Delete;
  adotabla.Refresh;
  ShowMessage('Registro Eliminado!');
    
  end

Hoy terminé de cargar una data de 7000 registros a una tabla y al comenzar a probar los botones de nuevo, editar, guardar y eliminar, me dí cuenta que cuando le dí a eliminar duró un aproximado de 7 segundos para eliminarlo.

Yo estoy utilizando los componentes ado para conectarme.

Luego probé el boton eliminar de esta manera y se eliminó al instante.

Código Delphi [-]
if MessageDlg('¿Desea Eliminar este registro?',mtError, [mbyes, mbno], 0) = mryes then
  begin

  adotabla.Delete;
  adotabla.close;
  adotabla.open;
  ShowMessage('Registro Eliminado!');
    
  end

En este sentido requiero de sus conocimientos para que me expliquen la razón de esto y si es posible me orienten sobre la mejor manera de eliminar un registro.

Nota: La tabla tiene indices en cada uno de los campos ya que se realiza una busqueda avanzada por cada campo de la tabla.

Saludos.
__________________
Cristo te ama, ven a d él, ya k te espera con los brazos abiertos. Dios te bendiga mucho
Responder Con Cita
  #2  
Antiguo 26-02-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola jeremiselxi.

¿ De que forma tenes organizado el acceso a tus datos que requieren un Refresh ?

Saludos

Nota: Modifiqué el título original (Pregunta Curiosa sobre el botón eliminar) por que la consulta no es hacerca del botón
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #3  
Antiguo 27-02-2015
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
¿La tabla en cuestión tiene índices y clave primaria?
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #4  
Antiguo 27-02-2015
Avatar de jeremiselxi
jeremiselxi jeremiselxi is offline
Miembro
 
Registrado: ago 2008
Posts: 199
Poder: 16
jeremiselxi Va por buen camino
Cita:
Empezado por ecfisa Ver Mensaje
Hola jeremiselxi.

¿ De que forma tenes organizado el acceso a tus datos que requieren un Refresh ?

Saludos
Buenos días.

Disculpen que no pude responder hasta ahora.

Le explico un poco mejor lo que tengo Y lo explicaré con el modulo de administración de usuaríos. De esta manera están todos Los módulos.

Al dar clic al modulo de administración de usuarios aparece un formulario con los botones nuevo, editar, eliminar exportar y buscar. Los datos en esta ventana se muestran mediante un adoquery, para poder buscar de todas las maneras posible y así exportar lo que quieran. Existe un campo llamado No. El cual es el campo utilizado como primario.

En ese sentido para eliminar lo que hago es que busco en la tabla de usuario mediante locale por el campo No del adoquery.

Luego si le hago el delete solamente, a veces sucede que al hacer el select * from usuarios en el quuery, toma también ese registro que le di a borrar. Por eso es que.le.hago el Refresh.


Cita:
Empezado por Neftali Ver Mensaje
¿La tabla en cuestión tiene índices y clave primaria?
Si el campo primario es el no ya que es un número que no se repite y es autoincremental.

Los demás campos tienen índices para buscar más rápido en la.bd.

Saludos
__________________
Cristo te ama, ven a d él, ya k te espera con los brazos abiertos. Dios te bendiga mucho
Responder Con Cita
  #5  
Antiguo 27-02-2015
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola jeremiselxi.

Por el nombre, "adotabla", pensé que se trataba de un TADOTable no de un TADOQuery.

Para optimizar la velocidad de la acción veo estas opciones:
  1. Usar el método Refresh, filtrando la consulta de modo que traiga un conjunto de datos menor. No usar consultas del tipo:
    Código SQL [-]
    SELECT * FROM TABLA
  2. Usar los métodos Open/Close en conjunto con TBookmark para evitar la pérdida de posición.
  3. Usar un componente que soporte manejo de cache como el TADODataSet. Si no recuerdo mal, en ADO se llama batch updates y se activa fijando la propiedad LockType a ltBatchOptimistic. También revisa el método UpdateBatch en la ayuda de Delphi.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #6  
Antiguo 01-03-2015
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 15
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Yo le prestaria atencion al punto numero 1 de lo que te recomendo ecfisa

Piensa en algo, en este mismo foro, los temas estan filtrados (ves solamente los mas recientes, no los de el año 2000 [al menos por defecto])

Y luego ademas de eso tambien estan paginados, para que salgan 30, 40, 50 lo que sea por pagina. Si fueran 5000 por pagina el rendimiento seria menor, aunque tengas todos los indices y claves primarias que quieras

Google hace lo mismo y te va tirando resultados en paginas para que no sea tanta la informacion a mandar de golpe.

En paginas como facebook o youtube pasa algo similar, a medida que se va haciendo scroll hacia abajo salen mas comentarios o publicaciones

No me parece nada sano mostrar 7000 registros cuando deberia ser de a 100.. etc.

Deberias enfocarte a que el usuario lance busquedas mas especificas (o acaso en google le pones un * y te trae toda la web?) es decir si buscas pacientes, que te tiren al menos un rubro, un nombre o apellido, etc
Recuerdo al compañero mamcx que expuso un truco muy bueno que era guardarse la inicial de cada persona en un campo aparte y antes de hacer el tipico "WHERE NOMBRE LIKE Rob%" queda algo como "WHERE INICIAL = R AND NOMBRE LIKE ROB%"
Responder Con Cita
  #7  
Antiguo 01-03-2015
Avatar de jeremiselxi
jeremiselxi jeremiselxi is offline
Miembro
 
Registrado: ago 2008
Posts: 199
Poder: 16
jeremiselxi Va por buen camino
Cita:
Empezado por AgustinOrtu Ver Mensaje
Yo le prestaria atencion al punto numero 1 de lo que te recomendo ecfisa

Piensa en algo, en este mismo foro, los temas estan filtrados (ves solamente los mas recientes, no los de el año 2000 [al menos por defecto])

Y luego ademas de eso tambien estan paginados, para que salgan 30, 40, 50 lo que sea por pagina. Si fueran 5000 por pagina el rendimiento seria menor, aunque tengas todos los indices y claves primarias que quieras

Google hace lo mismo y te va tirando resultados en paginas para que no sea tanta la informacion a mandar de golpe.

En paginas como facebook o youtube pasa algo similar, a medida que se va haciendo scroll hacia abajo salen mas comentarios o publicaciones

No me parece nada sano mostrar 7000 registros cuando deberia ser de a 100.. etc.

Deberias enfocarte a que el usuario lance busquedas mas especificas (o acaso en google le pones un * y te trae toda la web?) es decir si buscas pacientes, que te tiren al menos un rubro, un nombre o apellido, etc
Recuerdo al compañero mamcx que expuso un truco muy bueno que era guardarse la inicial de cada persona en un campo aparte y antes de hacer el tipico "WHERE NOMBRE LIKE Rob%" queda algo como "WHERE INICIAL = R AND NOMBRE LIKE ROB%"
Excelente muchas gracias a todos
__________________
Cristo te ama, ven a d él, ya k te espera con los brazos abiertos. Dios te bendiga mucho
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Aplicación en Windows 7 64 bits tarda mucho en arrancar jupehe Conexión con bases de datos 2 26-07-2014 11:56:11
Tarda mucho el UPDATE a MySQL b1ast3r Conexión con bases de datos 2 13-10-2010 20:34:56
Tarda mucho en ejecutar un SP Choclito Firebird e Interbase 29 13-08-2010 18:02:46
Form que se tarda mucho en abrir IVAND Varios 3 29-05-2007 03:14:07
Por que tarda mucho en abrir un EXE IcebergDelphi Varios 5 16-06-2004 12:05:28


La franja horaria es GMT +2. Ahora son las 23:16:44.


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
Copyright 1996-2007 Club Delphi