PDA

Ver la Versión Completa : IbQuery - Params


ArdiIIa
13-07-2007, 22:01:05
Hola:
Estoy examinándo un programa algo antiguo en el que entre otras, tengo dos tablas Maestro/Detalle, son dos IbQuery. Ambos tienen su respectivo UpdateSql.
El Query Detalle recibe dos Params del Maestro (Ejercicio y Numero), que obviamente están debidamente referenciados en el Maestro.

La cuestión es que todo funciona "bien". Es decir: visualizándo los correspondientes datos en un formulario y trabajando con los datos, estos son correctos (Maestro / Detalle), pero ahora viene el problema que me he encontrado.

Resulta que he implementado un mecanismo en el que dos bucles recorren un determinado número de registros y actualizan un valor para que se disparen los triggers de la tabla detalle algo mas o menos así:


//Resumido
While not eof // Maestro
Begin
While not eof // detalle
Begin
Edit...
Post... // No sería necesario pero para claridad.
next...
End
Next
End;


Bueno, pues estoy bastante espeso con este asunto porque el resultado de los bucles es que solamente afecta al primer registro maestro y solamente modifica los registros detalles del 1 Maestro...

Resulta que he testeado "TODO" y me he encontrado que en dicho bucle, el QueryDetalle, no cambia el parámetro NUMERO, a pesar de que el Maestro si va cambiando.

He probado a ponerle un valor determinado al parámetro por ejemplo 55000, y resulta que se queda fijo, es decir, no cambia en virtud del valor del Query Master.

Le estoy dando bastantes vueltas al asunto, y no llego a encontrar el motivo de este "desajuste".

Utilizo los IBX originales (los que vienen con Delphi 7), y Firebird no tiene nada que ver con todo esto (aparentemente).

Alguna aportación ??

Gracias

ArdiIIa
14-07-2007, 11:43:45
Hola amigos, me autorrespondo:

Tal como he leído en un mensaje por ahí... que decía: "mejor fajense a solucionar y encontrar respuestas" y aunque la cosa no iba conmigo, mas o menos así he hecho.

Pues resulta que pensando en lo comentado anteriormente, se me ha ocurrido quitar una línea, concretamente la de Ibqueryxxx.DisableControls y.... solucionado.
Así y todo, no acabo de comprender ese comportamiento del Params..

Saludos.

roman
15-07-2007, 02:37:41
La cuestión tiene su lógica, supongo. ¿Cómo hace DisableControls para inhibir la actualización de los controles data aware? No puede ir por ahí deshabilitando cada uno de los controles conectados al dataset. En su lugar, imagino que lo que hace es cortar el paso de información a través de los datasource conectados (cada dataset mantiene una lista de los datasource conectados a él). Pero una relación maestro detalle se realiza mediante un datasource, así que el efecto colateral es el que ya observaste.

Esto me dice la lógica, pero si no te convece, quizá lo haga el manual ;):


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.


Además te muestra la alternativa para mantener los controles desconectados.

// Saludos

ArdiIIa
15-07-2007, 11:27:46
Fallo neruronal mas que de params...:D