PDA

Ver la Versión Completa : Maestro-Detalle 'virtual' con una sola tabla


gluglu
11-10-2004, 18:56:52
Hola Amigos,

Tengo una tabla ('CATEGORIES') definida con los siguientes campos claves :

'CATEGORYNO'
'SUBCATEGORYNO' junto con otros campos más que ahora no creo que importen.

Voy a tener 'Grupos' donde CATEGORYNO tendrá un valor y SUBCATEGORYNO siempre = 0.

Voy a tener 'Subcategorías' donde CATEGORYNO será igual a la clave del 'Grupo' correspondiente y varios posibles valores en SUBCATEGORYNO.

Tengo dos DBGrid's con dos IBQuery's asociados corretamente:
Para el DBGrid1 y su IBQuery1 asociado

select
CATEGORYNO,
SUBCATEGORYNO,
....
from CATEGORIES
where SUBCATEGORYNO = 0
y para el DBGrid2 con su IBQuery2 asociado

select
SUBCATEGORYNO
....
from CATEGORIES
where
CATEGORYNO = :CATEGORYNO and
SUBCATEGORYNO <> 0
En el DBGrid2 no muestro 'CATEGORYNO' ya que en el mismo Form veo los dos DBGrid's.

Tengo, claro está, también asociados dos DataSource independientes para cada DBGrid, y el segundo relacionado con el primer DataSource mediante
IBQuery2.DataSource := DataSource1

Todo esto me funciona correctamente hasta que INSERTO un nuevo registro en el DBGrid2 mediante un IBUpdateSQL asociado:

insert into CATEGORIES
(CATEGORYNO, SUBCATEGORYNO, ...)
values
(:CATEGORYNO, :SUBCATEGORYNO, ...)
Esto no funciona porque me toma el valor para CATEGORYNO = null.

Mi pregunta es: Tiene solución mi problema? Lo que quiero es que me 'Inserte' en el numero registro que añado al DBGrid2 los valores CATEGORYNO del DBGrid1 elegido y el nuevo valor de SUBCATEGORYNO que acabo de introducir en el DBGrid2.

Algo así como :

insert into CATEGORIES
(CATEGORYNO, SUBCATEGORYNO, ...)
values
(DBGrid1.Columns[0].Value, :SUBCATEGORYNO, ...)
ó
(IBQuery1CATEGORYNO.Value, :SUBCATEGORYNO, ...)
Claro está que estas dos instrucciones arriba indicadas me dan error.
Se puede hacer? o debería descartar esta idea y crearme dos tablas diferentes con una referencia externa?.

Saludos a todos.

gluglu
11-10-2004, 19:20:47
Acabo de probar otras cosas. Y creo que mi pregunta es mucho más facil de lo arriba mencionado:

Como 'Inserto' en un insert del IBUpdateSQL el campo clave del Maestro sin tener que introducirlo manualmente.

Lo acabo de probar con dos tablas independientes y tampoco logro añadir un registro a la tabla 'detalle' con la referencia correcta al 'maestro'.

gluglu
11-10-2004, 19:44:23
Creo que yo mismo me voy aclarando. Ya he averiguado que lo tengo que hacer mediante los 'parámetros' del TIBQuery.

La pregunta : qué debo poner en tiempo de diseño en alguna de las propiedad de IBQuery2.Params[0] para que me coja el valor de IBQuery1CATEGORYNO.Value?

Muchas gracias por vuestras ayudas.