Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-07-2004
CHiCoLiTa CHiCoLiTa is offline
Miembro
 
Registrado: may 2003
Posts: 102
Poder: 22
CHiCoLiTa Va por buen camino
ADO lento

Hola a todos

Estoy atacando una Base de Datos en SQL Server y me conecto mediante ADO

Realizo una consulta que me devuelve la oficina, cuenta y entidad y yo actualizo el digito de control que venia en blanco.

El programa funciona y todo muy bonito

Pero es exageradamente lento. Lo he ejecutado directamente en el servidor y el resultado es el mismo.

He probado a solo seleccionar 10 registros y tambien va muy lento y el codigo tan solo hace lo siguiente

Ahh, lo que se llama Tabla realmente es un AdoQuery, a ver si seleccionando solo los registros que tiene entidad funcionaba
Y la funcion Cero, añade ceros a la izquierda para la longitud dada

Código Delphi [-]
    Tabla.Open;
    tabla.First;
    while not tabla.Eof do
    begin
        banco := tabla.FieldByName('BANCO').Value + tabla.FieldByName('SUCURSAL').Value;
        entidad := Cero(tabla.FieldByName('CUENTA').Value, 10);
        DC := IntToStr(CalculaDC(banco, entidad));
        DC := Cero(DC, 2);
        tabla.Edit;
        tabla.FieldByName('CUENTA').AsString := entidad;
        tabla.FieldByName('DC').AsString := DC;
        tabla.post;
        tabla.Next;
    end;
    Tabla.Close;

Es cuestiones del ADO y me tengo que resignar o hay algun parametro que se pueda cambiar? O alguna otra forma de atacar al SQL que sea mas rapida, ya sea ODBC con el DBE

Un Saludo
Responder Con Cita
  #2  
Antiguo 28-07-2004
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
Hola.

¿ Estás seguro que el problema són los componentes ADO ?. Dices que tienes el mismo resultado ejecutandolo directamente en el Servidor ¿ cierto ?, en ese caso no tiene nada que ver con los componentes de acceso utilizados desde Delphi.

Revisa los triggers que pueda haber en esa tabla, los índices que utilizas en la consulta, etc. ...

NOTA: ¿ Exactamente cuanto tiempo tarda el proceso ?, ¿ y para cuantos registros ?

Saludos.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #3  
Antiguo 28-07-2004
CHiCoLiTa CHiCoLiTa is offline
Miembro
 
Registrado: may 2003
Posts: 102
Poder: 22
CHiCoLiTa Va por buen camino
La verdad es que no se cual puede ser el problema.
Pense que podia ser la red, por eso lo ejecute en el servidor directamente
Luego pense que el problema podria ser que son muchos registros por eso probe con tan solo 10
Y como el codigo no tiene 'nada' pienso que el problema puede ser ese, pero estoy un pcoo perdido

Uso los componentes ADO que vienen con Delphi 6
La tabla no tiene ningun tipo de triggers, indice, ni nada de nada
Son aproximadamente 800.000 registros y tarda en actualizar cada registro aproximadamente medio segundo
Responder Con Cita
  #4  
Antiguo 28-07-2004
Avatar de __marcsc
__marcsc __marcsc is offline
Miembro
 
Registrado: may 2003
Ubicación: Girona
Posts: 577
Poder: 22
__marcsc Va por buen camino
Hola,

detalle importante: Cuando dices que lo ejecutas directamente en el servidor... ejecutas tu aplicación desde el servidor, no? Yo creo que lo mejor sería que intentases algún update directamente desde el Query Analyzer a ver qué te hace.

Otra cosa interesante sería que esta actualización la realizaras mediante un Stored Procedure para descartar que se trate de los componentes ADO.

Temas relacionados con ADO:

Qué tipo de cursor utilizas? Has Probado a utilizar BatchUpdates?

Temas de servidor:

Esta tabla está indexada correctamente? Has verificado el tamaño de la BD? Tienes algun indice clustered? Has utilizado algún plan de mantenimiento para reducir el tamaño de la BD??

Suerte!
Responder Con Cita
  #5  
Antiguo 28-07-2004
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.285
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
Cita:
Empezado por CHiCoLiTa
La tabla no tiene ningun tipo de triggers, indice, ni nada de nada
Haz pruebas definiendo índices en tu tabla.

En cuanto a propiedades de ADO haz pruebas con:
* CursorLocation = clServer.
* CursorType = ctOpenForwardOnly (sube rendimiento vbastante si no vas a realizar recorridos hacia adelante y atrás).

Creo que si el recorrido lo haces por un índice ganarás bastante.

¿Tienes controles DataAware ligados a esos campos? No creo, pero si es así desactivalos (DisableControls) y al acabar los vuelves a activar.
__________________
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
  #6  
Antiguo 28-07-2004
CHiCoLiTa CHiCoLiTa is offline
Miembro
 
Registrado: may 2003
Posts: 102
Poder: 22
CHiCoLiTa Va por buen camino
En efecto, he indexado la tabla y se han actualizado los registros a una velocidad medianamente normal y rapida.

Antes de hacerlo tambien probe a ejecturalo desde el servidor mediante: CursorLocation = clServer. y aalgo gane en velocidad, pero seguia siendo el proceso muy lento

En un principio pense que podria ser el ADO, porque creo recordar haber leido que cuando abres una tabla por ADO, te carga los datos en memoria

Muchas gracias a todos y un saludo
Responder Con Cita
  #7  
Antiguo 28-07-2004
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.285
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
Cita:
Empezado por CHiCoLiTa
En un principio pense que podria ser el ADO, porque creo recordar haber leido que cuando abres una tabla por ADO, te carga los datos en memoria
Justo eso es lo que defines con el CursorLocation. Que te carge todos los registros en memoria o que te carge un bloque y a medida que vas necesitando que te vaya cargando el resto.
__________________
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
Respuesta



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


La franja horaria es GMT +2. Ahora son las 10:01:33.


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