PDA

Ver la Versión Completa : Query.DisableControls


RebeccaGL
15-10-2011, 14:19:10
Buenas

Una consulta, tengo dos tablas Tabla1 y Tabla2 ambas estan enlazadas cuando quiero recorrer la Tabla2 hago lo siguiente para que sea mas rapido.

Tabla1.DisableControls;
Tabla2.DisableControls;

Tabla1.First;
while not (Tabla1.Eof) do
begin
Tabla2.First;
while not (Tabla2.Eof) do
begin
...
Tabla2.Next;
end;
Tabla1.Next;
end;

Tabla1.EnableControls;
Tabla2.EnableControls;


Si no uso el DisableControls el recorrido de los registros es muy lento, pero si uso el Table1.DisableControls pierdo en enlaze MasterFields de la segunda tabla, mi pregunta es, ¿como hago para que no se pierda el enlaze de la segunda tabla con la primera usando el Table1.DisableControls.


saludos

Casimiro Notevi
15-10-2011, 14:34:30
No conozco ningún motivo por el que pierdas un enlace entre tablas por usar disblecontrols en el dataset, me suena rarísimo.
De todas formas, ¿qué es lo que quieres hacer recorriendo ambas tablas de esa manera?.

RebeccaGL
15-10-2011, 14:45:10
Ambas tablas entas enlazadas con las propiedades (masterfields y linkedfields) y los valores se pierden al momento de hacer tabla1.disablecontrols

Si voy al segundo registro de Tabla1.next la tabla2 no muestra sus respectivos registros relacionados con la tabla1, ahora recorro las tablas de esa manera para hacer calculos registro por registro porque se trata de recalcular un kardex.

marcoszorrilla
15-10-2011, 15:00:36
Tendríamos que saber cuáles son esos cálculos, pero presumo que sería más eficiente utilizar una constulta.

Un Saludo.

Casimiro Notevi
15-10-2011, 16:05:30
Pues eso, lo que dice marcoszorrilla es lo que hay que hacer. Que eso de recorrer tablas de esa manera es cosa de cuanto estaba dBase o más antiguo :)
Usa una sentencia sql y tienes los resultados al instante.
Si necesitas ayuda, ya sabes, aquí estamos.

RebeccaGL
15-10-2011, 17:48:50
Por Ejemplo.

En un kardex tengo 1000 productos y si modifico el registro numero 50 desde ahi, desde el registro numero 50 se tiene que recalcular todo el kardex hasta el registro 1000 como harias eso en una consulta sql.

El registro 51 jala el saldo del 50 el 52 del 51 el 53 del 52 asi hasta llegar al registro numero 1000 y tambien hay que recalcular los costos promedios y totales. Ahora no solo es un producto son como 200 productos cada producto con 500 a 2000 registros por mes.



saludos

Casimiro Notevi
15-10-2011, 18:07:40
Pues eso se hace mejor en un trigger de la BD.
Según entiendo tienes una estructura más o menos así (resumiendo):
tabla tbCuentas (
id_cuenta integer,
saldo double
)
Y los datos que tienes son (ejemplo):
id_cuenta---saldo
1, 233
2, 372
3, 22
4, 765
5, 39
...

Y quieres que si, por ejemplo, el registro id_cuenta=3 le suma 10, entonces los siguientes tienen que sumarlos también a sus valores, o sea, quedaría así:
id_cuenta---saldo
1, 233
2, 372
3, 32
4, 775
5, 49
...

¿Es eso lo que quiéres hacer?

RebeccaGL
15-10-2011, 18:17:35
Si asi es algo parecido, pero tambien hay que restar.

Si es una entrada E se suma y si es una salida S se resta
No necesariamente hay que sumar una cantidad igual se pueden sumar o restar cantidades desiguales

Si es una entrada E de 10 se suma 10 al nuevo saldo y es otra entrada 20 se suma 20 al nuevo saldo, como tambien se restaran y son salidas

Casimiro Notevi
15-10-2011, 18:23:58
¿De qué base de datos estamos hablando?

RebeccaGL
15-10-2011, 18:27:49
Bases de datos MySQL

Casimiro Notevi
15-10-2011, 21:14:26
No necesariamente hay que sumar una cantidad igual se pueden sumar o restar cantidades desiguales


A ver, explica bien en qué consiste el proceso, para tenerlo claro :)

Al González
17-10-2011, 22:51:49
No conozco ningún motivo por el que pierdas un enlace entre tablas por usar disblecontrols en el dataset, me suena rarísimo.
Es que es normal lo que sucede, Casi:
If the dataset is the master of a master/detail relationship, calling DisableControls also disables the master/detail relationship. Setting BlockReadSize instead of calling DisableControls updates the detail datasets as you scroll through the dataset, but does not update data-aware controls.

Con el conjunto de datos maestro, en lugar de utilizar DisableControls y EnableControls, habría que usar la propiedad BlockReadSize. Tiene el mismo efecto con los enlaces visuales (controles en el formulario), pero, a diferencia de DisableControls, los enlaces maestro-detalle permanecen activos.
TablaMaestra.BlockReadSize := 1;

Try
...
Finally
TablaMaestra.BlockReadSize := 0;
End;

Saludos.

Casimiro Notevi
17-10-2011, 23:06:18
Vaya, se ve que no uso mucho DisableControls :D

RebeccaGL
26-09-2013, 15:39:42
Una pregunta, ¿que valor se tiene que poner en Tabla.BlockReadSize dependiendo de que?

Tabla.BlockReadSize := 1
Tabla.BlockReadSize := 2
Tabla.BlockReadSize := 3
Tabla.BlockReadSize := 32