Insertar registros en 3 tablas

SQL, mySQL, postgreSQL y otros motores
Responder
Cristian78
Al nivel de RZ
Mensajes: 108
Registrado: Dom Abr 17, 2011 6:07 pm
Contactar:

Insertar registros en 3 tablas

Mensaje por Cristian78 » Mié Mar 08, 2017 2:18 pm

BUENAS A TODOS, UNA CONSULTA, TENIENDO 3 TABLAS PADRE, HIJOS Y NIETOS REALIZO LO SIGUIENTE AL INSERTAR REGISTROS:

!*****************************************************************************
DO InsertandoFichaInscripcion
DO InsertandoAsignaturasCarrera
DO InsertandoAsignaturasCorrelativas

¡INSERTANDO FICHA INSCRIPCION A LA CARRERA
InsertandoFichaInscripcion ROUTINE

LOC:Texto = 'INSERT INTO ALUMNOSFichaCarrera (IdAlumnosLegajo, ' &|
'IdCarrerasDetalle, ' &|
'FechaDeIngreso, ' &|
' VALUES (<39>'&clip(ALFC:IdAlumnosLegajo)&'<39>,'&|
' <39>'&clip(ALFC:IdCarrerasDetalle)&'<39>,' &|
' <39>'&clip(FORMAT(ALFC:FechaDeIngreso,@D2))&'<39>)'


ALUMNOSFichaCarrera{PROP:SQL}= LOC:Texto

!BUSCANDO ULTIMO ID DE DBO.ALUMNOSFichaCarrera PARA MANTENER INTEGRIDAD REFERENCIAL
!CON DBO.ALUMNOSAsignaturas
ALUMNOSFichaCarrera{PROP:SQL} = 'SELECT @@IDENTITY'
IF NOT ACCESS:ALUMNOSFichaCarrera.NEXT()
LOC:IDAlumnosFichaCarrera = ALFC:IDAlumnosFichaCarrera
END


InsertandoAsignaturasCarrera ROUTINE
!ACTUALIZANDO QUEUEU CON EL VALOR "IDAlumnosFichaCarrera "
!para mantener la integridad referencial cuando se inserten los registros
!en la tabla DBO.ALUMNOSAsignaturas
LOOP X# = 1 to records(QUEUECarreraAsignaturas)
GET (QUEUECarreraAsignaturas,X#)
QIDAlumnosFichaCarrera = LOC:IDAlumnosFichaCarrera
PUT(QUEUECarreraAsignaturas)
END !END LOOP

!INSERTANDO ASIGNATURAS EN LA DBO.ALUMNOSAsignaturas
LOOP X# = 1 to records(QUEUECarreraAsignaturas)
GET (QUEUECarreraAsignaturas,X#)
DO InsertandoAsignaturaXasignatura

END !END LOOP
!ESTE CODIGO ESTA EL LA QUEUE DE LAS MATERIAS PARA IR TRAYENDO LAS CORRELATIVAS EN FUNCION
!DE DONDE SE ENCUENTRA EL FOCO DEL CURSOR O AL HACER CLICK EN CUALQUIER REGISTRO
!GET(QUEUECarreraAsignaturas,CHOICE(?List1))


!-------------------------------------------------------------------------
InsertandoAsignaturaXasignatura ROUTINE

!INSERTANDO ASIGNATURAS
LOC:Texto =''
LOC:Texto = 'INSERT INTO ALUMNOSAsignaturas (IdAlumnosFichaCarrera, ' &|
'IdCarrerasAsignatura, ' &|
' VALUES (<39>'&clip(QIDAlumnosFichaCarrera)&'<39>,'&|
' <39>'&clip(QIdCarrerasAsignatura)&'<39>)'
ALUMNOSAsignaturas{PROP:SQL}= LOC:Texto

!GUARDANDO ID DEL REGISTRO INSERTADO PARA MANTENER LA INTEGRIDAD REFERENCIAS
!CUANDO SE AGREGUEN LAS CORRELATIVAS
ALUMNOSAsignaturas{PROP:SQL} = 'SELECT @@IDENTITY'
IF NOT ACCESS:ALUMNOSAsignaturas.NEXT()
QIdAlumnosAsignatura = ALUAs:IdAlumnosAsignatura
PUT(QUEUECarreraAsignaturas)
END

InsertandoAsignaturasCorrelativas ROUTINE

LOOP X# = 1 to records(QUEUECarreraAsignaturas)
GET (QUEUECarreraAsignaturas,X#)
LOC:IdAlumnoAsignatura = QIdAlumnosAsignatura
DO TrayendoCorrelativas
END !END LOOP

TrayendoCorrelativas ROUTINE

CARRERASCorrelatividades{PROP:SQL}= 'SELECT *' &|
'FROM CARRERASCorrelatividades' &|
' WHERE (IdCarrerasAsignatura = <39>'&clip(QUEUECarreraAsignaturas.QIdCarrerasAsignatura)&'<39>)'


IF ERRORCODE() THEN STOP (FILEERROR()). !FILEERROR ES EL ERROR DEL SQL
!FREE(QUEUECarrerasCorrelatividades)
LOOP
NEXT(CARRERASCorrelatividades)
IF ERRORCODE() THEN BREAK.
QIdCarrerasCorrelatividades = CCORR:IdCarrerasCorrelatividades
ADD(QUEUECarrerasCorrelatividades)
DO InsertandoCorrelativa
END

InsertandoCorrelativa ROUTINE
!INSERTANDO ASIGNATURAS
LOC:Texto =''
LOC:Texto = 'INSERT INTO ALUMNOSCorrelativas (IdAlumnosAsignatura, ' &|
'IdAsignaturaCorrelativa, ' &|
' VALUES (<39>'&clip(LOC:IdAlumnoAsignatura)&'<39>)'

ALUMNOSCorrelativas{PROP:SQL}= LOC:Texto

!*****************************************************************************
FUNCIONA TODO OK. MI CONSULTA ES LA SIGUIENTE, COMO SERIA HACER PARA UN LOGOUT - COMMIT - ROLLBACK?

LEI UNA AYUDA QUE SUGIERE LO SIGUIENTE
PlanillaDescuentoDetalle{PROP:SQL} = 'SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED'
PlanillaDescuentoDetalle{PROP:SQL} = 'BEGIN TRANSACTION'

COMMIT:
PlanillaDescuentoDetalle{PROP:SQL} = 'COMMIT TRANSACTION'
PlanillaDescuentoDetalle{PROP:SQL} = 'SET TRANSACTION ISOLATION LEVEL READ COMMITTED'

PERO NO SE COMO UTILIZARLA EN ESTE CASO. GRACIAS

CLARION 8 - SQL SERVER 2008 R2


Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 10 invitados