Veamos
Creo que lo que Oracle te dice es que insertás un registro en TARJETAS con un código de usuario que no existe en la tabla USUARIOS. Eso sería la violación de clave foránea. La clave nula no tiene por qué ser rechazada con ese mensaje, porque no hace referencia a ninguna otra tabla.
Desde el dbExplorer, le mandás un SQL con los valores a insertar (codigo de usuario, clave nula), y lo acepta bien porque el codigo de usuario (parámetro 1) existe en USUARIOS.
EL SQL de insert en el componente Delphi sería:
insert into TARJETAS values (:Param0,:Param1) o algo así
En Delphi, PARAMS empieza desde 0:
Query1.Params[0].AsInteger := CODIGO DE USUARIO
Query1.Params[1].AsString := Nil (o Params[1].CLEAR ??, no sé)
Otra es usar un SQL especial para cuando la tarjeta no está configurada:
insert into TARJETAS values (:Param0,NULL) (En Oracle es NULL?)
y
Query1.Params[0].AsInteger := CODIGO DE USUARIO
Por supuesto, el orden de los campos en la tabla y en la instrucción debe ser idéntico, y no debería saltar ningún error, y todos los Params y parámetros directos de la instrucción SQL deben tener valor asignado.
No entiendo mucho de esto, si nada que ver, mil disculpas.
Saludos.
|