Ver Mensaje Individual
  #1  
Antiguo 06-01-2007
nfrfabian nfrfabian is offline
Miembro
 
Registrado: ago 2006
Posts: 55
Reputación: 18
nfrfabian Va por buen camino
Velocidad de respuesta de servidor

Hola a todos. Muchas gracias por su ayuda. Mi problema es el siguiente.
Trabajo con Ms SQL Server 2005, me conecto por medio de Ado. Yo solia usar Adotables para la conexion con las tablas, pero viendo los consejos de ustedes parece que es mucho mas rapido el tiempo de respuesta del servidor cuando se usa una adoquery porque el servidor solo envia a mi aplicacion el resultado de mi consulta y no toda la tabla. En fin tengo 2 tablas: maestro - detalle, como yo trabajaba con adotable a la tabla detalle le ponia como mastersource el datasource de la tabla maestro. Al pasar esta relacion a adoquery tuve problemas. Leyendo un poco la ayuda de delphi arme la relacion de la siguiente forma:
tengo las siguientes tablas en el servidor:

- resumen: dia, horain, grupo, idnom, hingresada, confir, fechreser, nrocontrol, operacion, activo.

- clientes: idnombre, nombre, nombre2, apellido, telefono

- agenda: dia, gabinete, hora, grupo, idnom, idprofesio, idservicio

- componente adoquery adoqresu
En el valor de la propiedad (TWideStrings) del adoqresu pongo: select dia, horain, grupo, idnom, hingresada, confir, fechreser, nrocontrol, operacion, activo, idnombre, nombre, nombre2, apellido, telefono from resumen, clientes where (dia = :fecha) and (activo = 'True') and (idnombre = idnom)

Puse un valor "fecha" a la propiedad (Tparameters) del adoqresu, este valor lo uso para elegir el dia en que se va a realizar la consulta de resumen.
Esta forma es la que explica la Ayuda de Delphi, nose si habra otra mas rapida o mejor.

- componente adoquery adoagenda
En el valor de la propiedad (TWideStrings) del adoagenda pongo: select dia, gabinete, hora, grupo, idnom, idprofesio, idservicio from agenda where dia = :fecha and idnom = :idnombre

El boton que realiza los calculos tiene las siguientes instrucciones:

adoqresu.Active := false;
adoqresu.Parameters[0].value := varifecha;
adoqresu.active := true;

while not adoqresu.Eof do
begin
adoqclientes.Active := false;
adoqclientes.Parameters[0].Value := varifecha;
adoqclientes.Parameters[1].Value := adoqresu.fields[3].value;
adoqclientes.Active := true;
while not adoqclientes.eof do
begin
calcularresultado; // calcularresultado solo cuenta la cantidad de cada idservicios
adoqclientes.next;
end;
adoqclientes.next;
end;


Este procedimiento funciona aceptablemente cuando la cantidad de registros que tiene tanto la tabla resumen y agenda son pocos. Pero con una tabla resumen con 12000 y agenda con 60000 registros aprox. y despues de realizar la consulta y devolver en promedio "solo" 200 registros aprox. el servidor se tarda entre 5 y 15 segundos.
Me parece que un servidor que se demore 5 segundos en devolverte 200 registros sin nada pesado (imagen o cosa por el estilo, solo datos del tipo smallint o varchar) no es un servidor que funcione correctamente. O el servidor funciona mal o la consulta esta mal hecha o no estoy utilizando los componentes correctos o las funciones de los componentes que uso no son las correctas.
Yo tengo la esperanza que el problema sea falta de recursos de pc, tengo en una sola computadora con 1gb de ram y procesador athlon de 2100 ejecutando el servidor sql server y mi aplicacion. Se que la memoria minima no es suficiente pero para pruebas pense que no afectaria tanto al rendimiento de mi aplicacion. Pero antes de comprar una computadora mas nueva quiero estar seguro que el problema es ese.
Desde ya gracias por sus consejo y disculpen lo largo consulta. Gracias.
Responder Con Cita