Club Delphi  
    Paypal   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 Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 26-02-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 27
__cadetill Va por buen camino
Hola Virginia

Cita:
Empezado por Giniromero
1)...¿hay alguna manera de que se
actualicen los registros que se muestran en esta tablas que
dependen de X, sin tener que abrir y cerrarlas, cada vez
que cambiemos el registro de la tabla principal X?
haciendo relaciones de maestro/detalle??? No se si es esto a lo que te referias

Cita:
Empezado por Giniromero
2)....¿Es normal que, si esta tabla está mostrando sus datos en
un dbgrid o un campo dbedit, y al ejecutar este código, si
devuelve registros distintos a los que había inicialmente,
no se refresquen esos cambios en los dbgrid y los dbedit a
los que está conectado, poniendo los nuevos en vez de
mantener los viejos datos, a no ser que después cerremos
y abramos esta tabla?
No, debería de actualizar automáticamente. Lo que no entiendo es que, si cambias la sentencia SQL, para que quieres los BookMark??? Estos te servirían si no cambiaras la sentencia SQL, pero al cambiarla, la referencia de éste seguramente no será válida

Cita:
Empezado por Giniromero
3)¿Es normal que al añadir un procedimiento a mi
aplicación se relentice mucho la apertura del programa?
aquí si que no te he entendido
Responder Con Cita
  #2  
Antiguo 26-02-2004
Giniromero Giniromero is offline
Miembro
 
Registrado: may 2003
Ubicación: Madrid
Posts: 296
Poder: 24
Giniromero Va por buen camino
Hola,

Cita:
Empezado por cadetill

haciendo relaciones de maestro/detalle??? No se si es esto a lo que te referias


Si, están vinculadas las tablas mediante relaciones maestro detalle.

Cita:
Empezado por cadetill
Lo que no entiendo es que, si cambias la sentencia SQL, para que quieres los BookMark??? Estos te servirían si no cambiaras la sentencia SQL, pero al cambiarla, la referencia de éste seguramente no será válida
Es que, aunque cambie de código, no tienen que cambiar siempre los registros, y en caso de que no cambien, me interesaba que se mantuviese en el mismo registro.
Si quitase esto, ¿se me actualizarían automática todos los TIbDataSet, mostrandome los registros relacionados con el de mi tabla principal automáticamente, sin tener que pedirles que se cierren antes de que cambie el registro esa tabla principal, y se abran después?, por que si es así, me planteo el código de otra forma.


Cita:
Empezado por giniromero
3)¿Es normal que al añadir un procedimiento a mi
aplicación se relentice mucho la apertura del programa?
Tal vez me expliqué mal.

Quiero decir, que si es normal, que al hacer consulta SQL en la aplicación, usando en vez de a una tabla de mi base de datos, a un procedimiento de la misma, es normal que tarde tanto en abrirse la aplicación, o abrirse esa tabla.


Muchas gracias por todo,

Virginia
__________________
Sonrie al mundo, y el mundo te sonreirá :)

Última edición por Giniromero fecha: 26-02-2004 a las 16:13:08.
Responder Con Cita
  #3  
Antiguo 26-02-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 27
__cadetill Va por buen camino
Hola de nuevo Virginia

1.- Pues si lo tienes en relación de maestro/detalle, deberían actualizarse los demas TIBDatasets son necesidad de un Close/Open

2.- Yo creo que la actualización o no de los componentes DataAware no tiene nada que ver con el BookMark, pero podrías pobarlo. No obstante, éstos deberían de actualizarse solitos al hacer el Open del TIBDataSet

3.- Bueno, todo depende de lo que haga ese procedimiento. Si ha de hacer muchas cosas, pues sí, pero si es algo sencillo, debería ir ligero
Responder Con Cita
  #4  
Antiguo 26-02-2004
Giniromero Giniromero is offline
Miembro
 
Registrado: may 2003
Ubicación: Madrid
Posts: 296
Poder: 24
Giniromero Va por buen camino
Hola,


Cita:
Empezado por cadetill
3.- Bueno, todo depende de lo que haga ese procedimiento. Si ha de hacer muchas cosas, pues sí, pero si es algo sencillo, debería ir ligero
El procedimiento es el siguiente, el cual ya puse en otro hilo por otro tema:

Código:
CREATE PROCEDURE PROECONOPAGO 
RETURNS (
    CODIGO INTEGER,
    NUMALU SMALLINT,
    NUMGRUP SMALLINT,
    FECHA TIMESTAMP,
    ASIENTO INTEGER,
    CONCEPTO VARCHAR(50),
    IMPDEBE NUMERIC(15,2),
    IMPHABER NUMERIC(15,2),
    FORPAGO SMALLINT,
    RECIBO VARCHAR(10),
    FACTURA VARCHAR(10),
    USUARIO VARCHAR(10),
    TIPO VARCHAR(1),
    EMPRESATXT VARCHAR(1),
    CONTROL VARCHAR(1))
AS
DECLARE VARIABLE VCODIGO INTEGER;
DECLARE VARIABLE VNUMALU SMALLINT;
DECLARE VARIABLE VNUMGRUP SMALLINT;
DECLARE VARIABLE VFECHA TIMESTAMP;
DECLARE VARIABLE VASIENTO INTEGER;
DECLARE VARIABLE VCONCEPTO VARCHAR(50);
DECLARE VARIABLE VIMPDEBE NUMERIC(15,2);
DECLARE VARIABLE VIMPHABER NUMERIC(15,2);
DECLARE VARIABLE VFORPAGO SMALLINT;
DECLARE VARIABLE VRECIBO VARCHAR(10);
DECLARE VARIABLE VFACTURA VARCHAR(10);
DECLARE VARIABLE VUSUARIO VARCHAR(10);
DECLARE VARIABLE VTIPO VARCHAR(1);
DECLARE VARIABLE VPRODUCTOGRUP VARCHAR(2);
DECLARE VARIABLE VEMPRESAPRO VARCHAR(1);
DECLARE VARIABLE VCONTROL VARCHAR(1);
begin
for select CODIGO, NUMALU, NUMGRUP, FECHA, ASIENTO, CONCEPTO, IMPDEBE, 
IMPHABER, FORPAGO, RECIBO, FACTURA, USUARIO, TIPO

from ECONO

order by numalu
into
:VCODIGO,:VNUMALU,:VNUMGRUP,:VFECHA,:VASIENTO,:VCONCEPTO,:VIMPDEBE,
:VIMPHABER, :VFORPAGO,:VRECIBO,:VFACTURA,:VUSUARIO,:VTIPO  do
begin
select  PRODUCTO from grupos where NUMGRUP =:vnumgrup  into  :vproductogrup ;
select  EMPRESA from produ where PRODUCTO=:vproductogrup  into :vempresapro;

  If (:vasiento <2 AND :vimpdebe <> 0 ) Then Begin

    CODIGO = :VCODIGO;
    NUMALU = :VNUMALU;
    NUMGRUP = :VNUMGRUP;
    FECHA = :VFECHA;
    ASIENTO = :VASIENTO;
    CONCEPTO = :VCONCEPTO;
    IMPDEBE = :VIMPDEBE;
    IMPHABER = :VIMPHABER;
    FORPAGO = :VFORPAGO;
    RECIBO = :VRECIBO;
    FACTURA = :VFACTURA;
    USUARIO = :VUSUARIO;
    TIPO = :VTIPO;
    EMPRESATXT = :vempresapro;
    CONTROL = :vcontrol;
    suspend;
    end
end
end
¿Esto se un procedimiento muy complicado?

Cita:
Empezado por cadetill
1.- Pues si lo tienes en relación de maestro/detalle, deberían actualizarse los demas TIBDatasets sin necesidad de un Close/Open
Pues, por algún motivo que no termino de determinar, cuando cambio el registro principal, los registros que me tienen que mostrar el resto de las tablas, dependientes de esta, no se actualizan. Me siguen mostrando los registros para el valor anterior de la tabla principal.


Cita:
Empezado por cadetill
2.- Yo creo que la actualización o no de los componentes DataAware no tiene nada que ver con el BookMark, pero podrías pobarlo. No obstante, éstos deberían de actualizarse solitos al hacer el Open del TIBDataSet
¿Tal vez no tenga que ver tanto con los bookmark como con los disable control?

No sé, he tenido que poner código extra que sé me relentiza la aplicación para asegurarme de cerrar y abrir despues las tablas, pero necesito solucionar esto, para que no me de problemas de lentitud.

GRacias

virginia
__________________
Sonrie al mundo, y el mundo te sonreirá :)

Última edición por Giniromero fecha: 26-02-2004 a las 17:03:12.
Responder Con Cita
  #5  
Antiguo 26-02-2004
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 27
__cadetill Va por buen camino
Cita:
Empezado por Giniromero
¿Esto se un procedimiento muy complicado?
Pues no, no parece demasiado complicado. Ahora bien, todo depende del número de registros de las tablas, de una buena definición de índices y de la velocidad de acceso (que creo recordar era el problema del otro hilo)

Cita:
Empezado por Giniromero
Pues, por algún motivo que no termino de determinar, cuando cambio el registro principal, los registros que me tienen que mostrar el resto de las tablas, dependientes de esta, no se actualizan. Me siguen mostrando los registros para el valor anterior de la tabla principal.
Pues establecer una relación maestro/detalle con los TIBDataSet no es demasiado complejo (creo recordar que lo discutimos en su día), pero básicamente es establecer la propiedad DataSource del detalle apuntando al TDataSource del maestro y poner los parámetros en la sentencia SelectSQL del detalle

Cita:
Empezado por Giniromero
¿Tal vez no tenga que ver tanto con los bookmark como con los disable control?
Prueba a quitar ambas cosas a ver que resultado optienes
Responder Con Cita
  #6  
Antiguo 26-02-2004
Giniromero Giniromero is offline
Miembro
 
Registrado: may 2003
Ubicación: Madrid
Posts: 296
Poder: 24
Giniromero Va por buen camino
Cita:
Empezado por cadetill
Pues no, no parece demasiado complicado. Ahora bien, todo depende del número de registros de las tablas, de una buena definición de índices y de la velocidad de acceso (que creo recordar era el problema del otro hilo)
El nº de registros resultante en esta tabla es + o - 300 registros, la tabla original es muy grande, de ahí mi interes en el procedure, para reducir todo lo posible la tabla, para hacer este calculo más rápido. Lo que si es cierto es que podría intentar acotar aun más los registros resultantes, metiendo un parametro input en el que le pase el número de cliente por el propio procedure. Al principio lo tenía así, pero como me daba problemas para poner el procedure en marcha, decidí hacerlo más sencillo, y cuando ese funcionase, pasarle ese parametro.


Cita:
Empezado por cadetill
Pues establecer una relación maestro/detalle con los TIBDataSet no es demasiado complejo (creo recordar que lo discutimos en su día), pero básicamente es establecer la propiedad DataSource del detalle apuntando al TDataSource del maestro y poner los parámetros en la sentencia SelectSQL del detalle
Si, así es como lo tengo, tuve un buen profe, no creo que vaya por ahí el problema.

Cita:
Empezado por cadetill
Prueba a quitar ambas cosas a ver que resultado optienes
Fasle.

GRacias,

Virginia
__________________
Sonrie al mundo, y el mundo te sonreirá :)

Última edición por Giniromero fecha: 26-02-2004 a las 20:00:19.
Responder Con Cita
  #7  
Antiguo 27-02-2004
Giniromero Giniromero is offline
Miembro
 
Registrado: may 2003
Ubicación: Madrid
Posts: 296
Poder: 24
Giniromero Va por buen camino
Hola,

1)
[QUOTE = cadetill]..de una buena definición de índices..[/quote]

Creo que esto lo estoy haciendo bien, pero, ¿podría alguien darme unas ideas generales de lo que se considera "una buena definición de índices", para asegurarme que no esté aquí el problema?

2) [QUOTE = cadetill]..Prueba a quitar ambas cosas a ver que resultado optienes ..[/quote]

He quitado disable controls, y bookmark, y parece que se refresca. Aunque la prueba de fuego es cuando lo pruebe en el otro centro, que como no está en la red local del servidor, si da problemas ....

3) He puesto el procedimiento almacenado, en un TIBDataSet. No le he podido definir código para el deleteSQL ni modificar, pero bueno.

el selectSQL es :

Cita:
select ASIENTO, CODIGO, CONCEPTO, FACTURA, FECHA, FORPAGO, IMPDEBE, IMPHABER, NUMALU, NUMGRUP, RECIBO, TIPO, USUARIO from proECONOpago
where NUMALU =:NUMALU
order by fecha desc
el refreshSQL:

Cita:
Select
CODIGO,
NUMALU,
NUMGRUP,
FECHA,
ASIENTO,
CONCEPTO,
IMPDEBE,
IMPHABER,
FORPAGO,
RECIBO,
FACTURA,
USUARIO,
TIPO
from ECONO
where
CODIGO = :CODIGO

y el insertSQL:

Código:
insert into ECONO
  (CODIGO, NUMALU, NUMGRUP, FECHA, ASIENTO, CONCEPTO, 
IMPDEBE, IMPHABER, 
   FORPAGO, RECIBO, FACTURA, USUARIO, TIPO)
values
  (:CODIGO, :NUMALU, :NUMGRUP, :FECHA, :ASIENTO, 
:CONCEPTO, :IMPDEBE, :IMPHABER, 
   :FORPAGO, :RECIBO, :FACTURA, :USUARIO, :TIPO)

La cosa es que, como ya comenté anteriormente en este mismo hilo, desde que estoy utilizando el procedimiento almacenado, tarda más en abrirse el programa, aunque, por suerte, los procedures del delphi que utilizan ese procedimiento almacenado, van más rápido que antes.

Problema, desde que utilizo este procedimiento almacenado, (en vez de una simple consulta), no sólo va más lento al abrirse, sino que me ha relentizado la busqueda de alumnos, (hay que tener en cuenta que todas las demás tablas dependen de la de alumnos). He hecho un "Trace into", para ver que es lo que daba problemas, y he descubierto que son los campos calculados de las tablas que dependen de mi tabla principal de alumnos, especialmente el tibdataset de mi procedimiento almacenado.

La cuestión es, si por un lado percibo que usando SP me mejora el tiempo de un procedimiento, pero por otro lado, ese tiempo que gano lo estoy perdiendo cada vez que cambio el alumno seleccionado de la tabla principal... (lo cual es algo muy habitual), no hay ninguna forma de mejorar el tiempo de "apertura" o "respuesta" de estos SP cuando se usan en el delphi?, ¿no hay ningún otro objeto que pueda usar más apropiado que el TIBDataSet?

Gracias por la ayuda de antemano,

Virginia
__________________
Sonrie al mundo, y el mundo te sonreirá :)
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


La franja horaria es GMT +2. Ahora son las 03:26:34.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi