FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
varias dudas sobre consultas y refresco de datos
Hola,
Estoy usando delphi 6 e interbase 7, uso consultas sobre las tablas mediante tIBdataset. Tengo varias dudas, respecto a optimización del código. 1)Si tengo una tabla X, (consulta sql en TIBDataSet), que sólo me muestra un registro por vez, y del valor que hay en uno de los campos de ese registro, (CampodeX), dependen los registros que se muestran en otras tantas tablas, (también consulta sql en TIBDataSet donde campo=:CampodeX). ¿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? 2)Cuando en un código como el siguiente, Código:
var str : String; var dbpos: TBookMark; begin TRY dbPos := TbEcono.GetBookmark; TbEcono.DisableControls; TbEcono.Close; TbEcono.SelectSQL.Clear; TbEcono.SelectSQL.Add(VEconoSQL); try TbEcono.Open; except on E: Exception do begin //guardamos en variable "str" el mensaje que queremos se muestre str := 'Error abriendo TbEcono con el mensaje : ' + E.Message; Application.MessageBox(PChar(str), 'Atención', MB_OK); end; end; FINALLY TbEcono.GotoBookmark(dbpos); TbEcono.FreeBookmark(dbpos); TbEcono.EnableControls; FrmFxMain.SpeedSaldo.Click; END; 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? 3)¿Es normal que al añadir un procedimiento a mi aplicación se relentice mucho la apertura del programa? Gracias, de antemano, a tod@s por la ayuda. Virginia
__________________
Sonrie al mundo, y el mundo te sonreirá :) Última edición por Giniromero fecha: 26-02-2004 a las 10:43:18. |
#2
|
|||
|
|||
Hola Virginia
Cita:
Cita:
Cita:
|
#3
|
|||
|
|||
Hola,
Cita:
Si, están vinculadas las tablas mediante relaciones maestro detalle. Cita:
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:
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. |
#4
|
|||
|
|||
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 |
#5
|
|||
|
|||
Hola,
Cita:
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 Cita:
Cita:
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. |
#6
|
|||
|
|||
Cita:
Cita:
Cita:
|
|
|
|