Ver Mensaje Individual
  #3  
Antiguo 05-06-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Reputación: 31
Lepe Va por buen camino
Hola newgeek.

En primer lugar quiero darte la Bienvenida al foro y una merecida felicitación, son muy pocos los usuarios que se informan como usar las etiquetas sql y explicar detalladamente su problema en su primer mensaje en el foro.

Teniendo en cuenta lo dicho por Neftali, podrías crear un procedimiento almacenado que se encargue de la inserción:

Código SQL [-]
CREATE PROCEDURE Inserta_detalles(
    IDtabla1 INTEGER,
    IDtabla2 INTEGER)
AS
begin
  INSERT INTO Tabla3 ( null, id, id2) 
  values ( :IDtabla1, :IDtabla2)
end

puedes llamar a este SP de dos formas:
- Con un query:
Código Delphi [-]
  query1.sql.text := 'execute procedure inserta_detalles( :tabla1, :tabla2)';
  query1.parambyname('tabla1').ASInteger := strtoint(edit1.text); // id de la tabla1
  query1.parambyname('tabla2').ASInteger := strtoint(edit2.text); // id de la tabla2
  query1.ExecSql; // hacemos la inserción.

- Con un componente Store Procedure (lo tendrás en la paleta de delphi, será un TIBStoreProcedure, TMDOStoreProcedure, etc), en el inspector de objetos añades el nombre del procedimiento, y asignas los parámetros en tiempo de ejecución, (mira la ayuda, lo explicará mejor que yo ).

Como habrás visto, en el cuerpo de Inserta_detalles, se envía un null a su clave primaria, para que no obtengas error, deberás tener un trigger before insert para la tabla 3:
Código SQL [-]
CREATE TRIGGER tabla3_BI FOR tabla3
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  IF (NEW.idd IS NULL) THEN
    NEW.idd = GEN_ID(GEN_tabla3_IDD,1);
END

GEN_tabla3_idd será un generador creado a tal efecto.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita