Fecha Inicial : 05/04/2018
Fecha Final : 05/04/2018
Hora Inicio: 11:31 PM
Hora Final: 4:17
Horas invertidas(Minutos): 226
Colaboradores: Wilson Lopez Oscar Cortes
Actividad:
Reparar XML para arreglar inconsistencias en ellos
Iniciar el procedimiento almacenado recursivo para la lectura de los datos en los xml,para esto se le realizan diversas modificaciones al scrip inicial de la base de datos
Código:
Se crean nuevos procedimientos almacenados para manejar el proceso recursivo:
Código:
Código para la modificación de los ID en los XML
def fix_xml(pXml):
respXML = ""
i = 0
while (i < len(pXml)):
if pXml[i:i+2] == "ID":
respXML += pXml[i:i+4]
n = ""
i += 4
while (pXml[i] != '"'):
n += pXml[i]
i+=1
respXML += str( int(n) + 1) + '"'
else:
respXML += pXml[i]
i+=1
print(respXML)
Iniciar la pagina web (pausa para centrarnos en los stored procedure)
Pagina inicio
Pagina de Login
Generar los stored procedures necesarios para cargar datos
Fecha Final : 05/04/2018
Hora Inicio: 11:31 PM
Hora Final: 4:17
Horas invertidas(Minutos): 226
Colaboradores: Wilson Lopez Oscar Cortes
Actividad:
Reparar XML para arreglar inconsistencias en ellos
Iniciar el procedimiento almacenado recursivo para la lectura de los datos en los xml,para esto se le realizan diversas modificaciones al scrip inicial de la base de datos
Código:
create table Periodo(
ID integer primary key identity (1,1),
Estado nvarchar(50) not null,
FechaI datetime not null,
FechaF datetime not null
);
create table EstadoGrupo(
ID integer primary key identity (1,1),
Nombre nvarchar(50) not null unique
);
create TABLE Profesor(
ID int primary key identity(1,1),
Nombre nvarchar(50) not null,
Email nvarchar(50) not null,
contrasenna nvarchar(50) not null,
)
create TABLE Grupo(
ID int primary key identity(1,1),
FK_Estado int foreign key references EstadoGrupo(ID),
FK_Periodo int foreign key references Periodo(ID),
FK_Profesor int foreign key references Profesor(ID),
NombreCurso nvarchar(50) not null,
CodigoGrupo nvarchar(50) not null
)
create table EstadoEstudiante(
ID int primary key identity(1,1),
Nombre nvarchar(50) not null unique
)
create table Estudiante (
ID int primary key identity(1,1),
Nombre nvarchar(50) not null,
Apellido nvarchar(50) not null,
Telefono int not null,
Email nvarchar(50) not null,
Carne nvarchar(50) not null unique
)
create TABLE GrupoxEstudiante(
ID int primary key identity(1,1),
FK_Grupo int not null foreign key references Grupo(ID),
FK_Estado int not null foreign key references EstadoEstudiante(ID),
FK_Estudiante int not null foreign key references Estudiante(ID),
NotaAcumulada int not null
)
create Table Rubros(
ID int primary key identity(1,1),
Nombre nvarchar(50) not null unique
)
create table GrupoxRubro(
ID int primary key identity(1,1),
FK_Grupo int not null foreign key references Grupo(ID),
FK_Rubro int not null foreign key references Rubros(ID),
Valor nvarchar(50) not null,
EsFijo char(1), check((EsFijo = 'y') or (EsFijo = 'n')),
Q int not null
)
create table Evaluacion(
ID int primary key identity(1,1),
FK_Grupo_Rubro int not null foreign key references GrupoxRubro(ID),
Nombre nvarchar(50) not null,
Fecha datetime not null,
ValorPorcentual int not null,
Descripcion nvarchar(50) not null
)
create table EvaluacionxEstudiante (
ID int primary key identity(1,1),
FK_Grupo_Estudiante int not null foreign key references GrupoxEstudiante(ID),
FK_Evaluacion int not null foreign key references Evaluacion(ID),
Nota int not null
)
Se crean nuevos procedimientos almacenados para manejar el proceso recursivo:
Código:
CREATE PROCEDURE VaciarTablas
AS
BEGIN
EXEC sp_MSForEachTable 'DISABLE TRIGGER ALL ON ?';
EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL';
EXEC sp_MSForEachTable 'DELETE FROM ?';
EXEC sp_MSForEachTable 'ALTER TABLE ? CHECK CONSTRAINT ALL';
EXEC sp_MSForEachTable 'ENABLE TRIGGER ALL ON ?';
EXEC sp_MSforeachtable @command1 = 'DBCC CHECKIDENT(''?'', RESEED, 0)'
END
GO
CREATE PROCEDURE [dbo].[readXML_studentGroupStateData]
AS
BEGIN
DECLARE @xml xml
DECLARE @hdoc int
BEGIN TRY
SELECT @xml = roow FROM OPENROWSET (BULK 'C:\data\SQL-Data\studentGroupStateData.xml', SINGLE_BLOB) as studentGroupStateData(roow)
if (@xml IS NOT NULL)
begin
begin tran
EXEC sp_xml_preparedocument @hdoc OUTPUT, @xml
SELECT * INTO #tmp_studentGroupStateData FROM OPENXML(@hDoc, 'XML/studentGroupStateData/studentGroupState')
WITH(
name [nvarchar](50)
)
begin
INSERT INTO EstadoEstudiante(Nombre) SELECT name FROM #tmp_studentGroupStateData
--EXEC dbo.Create_teacherData @Name = name,@Email = email,@Password = password;
end
DROP TABLE #tmp_studentGroupStateData
end
commit tran
return 1 --successful
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0 ROLLBACK;
return 0 --failed
END CATCH
END
GO
CREATE PROCEDURE readXML_studentData
AS
BEGIN
DECLARE @xml xml
DECLARE @hdoc int
BEGIN TRY
SELECT @xml = roow FROM OPENROWSET (BULK 'C:\data\SQL-Data\studentData.xml', SINGLE_BLOB) as studentData(roow)
if (@xml IS NOT NULL)
begin
begin tran
EXEC sp_xml_preparedocument @hdoc OUTPUT, @xml
SELECT * INTO #tmp_studentData FROM OPENXML(@hDoc, 'XML/studentData/student')
WITH(
name [nvarchar](50),
lastName[nvarchar](50),
email [nvarchar](50),
carnet [nvarchar](50),
phone[int]
)
begin
INSERT INTO Estudiante(Nombre,Apellido,Email,Carne,Telefono)SELECT name,lastName,email,carnet,phone FROM #tmp_studentData
--EXEC dbo.Create_teacherData @Name = name,@Email = email,@Password = password;
end
DROP TABLE #tmp_studentData
end
commit tran
return 1 --successful
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0 ROLLBACK;
return 0 --failed
END CATCH
END
GO
CREATE PROCEDURE [dbo].[readXML_teacherData]
AS
BEGIN
DECLARE @xml xml
DECLARE @hdoc int
DECLARE @pName nvarchar
DECLARE @pEmail nvarchar
DECLARE @pPassword nvarchar
BEGIN TRY
SELECT @xml = roow FROM OPENROWSET (BULK 'C:\data\SQL-Data\teacherData.xml', SINGLE_BLOB) as teacherData(roow)
if (@xml IS NOT NULL)
begin
begin tran
EXEC sp_xml_preparedocument @hdoc OUTPUT, @xml
SELECT * INTO #tmp_teacherData FROM OPENXML(@hDoc, 'XML/teacherData/teacher')
WITH(
name [nvarchar](50),
email [nvarchar](50),
password [nvarchar](50)
)
begin
INSERT INTO Profesor (Nombre,Email,contrasenna) SELECT name,email,password FROM #tmp_teacherData
--EXEC dbo.Create_teacherData @Name = name,@Email = email,@Password = password;
end
DROP TABLE #tmp_teacherData
end
commit tran
return 1 --successful
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0 ROLLBACK;
return 0 --failed
END CATCH
END
GO
CREATE PROCEDURE readXML_itemData
AS
BEGIN
DECLARE @xml xml
DECLARE @hdoc int
BEGIN TRY
SELECT @xml = roow FROM OPENROWSET (BULK 'C:\data\SQL-Data\itemData.xml', SINGLE_BLOB) as itemData(roow)
if (@xml IS NOT NULL)
begin
begin tran
EXEC sp_xml_preparedocument @hdoc OUTPUT, @xml
SELECT * INTO #tmp_itemData FROM OPENXML(@hDoc, 'XML/itemData/item')
WITH(
name [nvarchar](50)
)
begin
INSERT INTO Rubros(Nombre)SELECT name FROM #tmp_itemData
--EXEC dbo.Create_teacherData @Name = name,@Email = email,@Password = password;
end
DROP TABLE #tmp_itemData
end
commit tran
return 1 --successful
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0 ROLLBACK;
return 0 --failed
END CATCH
END
GO
CREATE PROCEDURE readXML_groupStateData
AS
BEGIN
DECLARE @xml xml
DECLARE @hdoc int
BEGIN TRY
SELECT @xml = roow FROM OPENROWSET (BULK 'C:\data\SQL-Data\groupStateData.xml', SINGLE_BLOB) as groupStateData(roow)
if (@xml IS NOT NULL)
begin
begin tran
EXEC sp_xml_preparedocument @hdoc OUTPUT, @xml
SELECT * INTO #tmp_groupStateData FROM OPENXML(@hDoc, 'XML/groupStateData/groupState')
WITH(
name [nvarchar](50)
)
begin
INSERT INTO EstadoGrupo(Nombre)SELECT name FROM #tmp_groupStateData
--EXEC dbo.Create_teacherData @Name = name,@Email = email,@Password = password;
end
DROP TABLE #tmp_groupStateData
end
commit tran
return 1 --successful
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0 ROLLBACK;
return 0 --failed
END CATCH
END
GO
CREATE PROCEDURE [dbo].[readXML_groupData] @Id_Periodo int
AS
BEGIN
DECLARE @xml xml
DECLARE @hdoc int
BEGIN TRY
SELECT @xml = roow FROM OPENROWSET (BULK 'C:\data\SQL-Data\groupData.xml', SINGLE_BLOB) as groupData(roow)
if (@xml IS NOT NULL)
begin
begin tran
EXEC sp_xml_preparedocument @hdoc OUTPUT, @xml
SELECT * INTO #tmp_groupData FROM OPENXML(@hDoc, 'XML/groupData/group')
WITH(
groupStateID[int],
teacherID[int],
termID[int],
courseName[nvarchar](50),
code[nvarchar](50)
)
begin
INSERT INTO Grupo(FK_Estado,FK_Profesor,FK_Periodo,NombreCurso,CodigoGrupo)SELECT groupStateID,teacherID,termID,courseName,code FROM #tmp_groupData WHERE termID = @Id_Periodo
--EJECUTAR GROUPITEMDATA
end
DROP TABLE #tmp_groupData
end
commit tran
return 1 --successful
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0 ROLLBACK;
Select ERROR_MESSAGE()
return 0 --failed
END CATCH
END
GO
CREATE PROCEDURE readXML_groupItemData @Id_Grupo int
AS
BEGIN
DECLARE @xml xml
DECLARE @hdoc int
BEGIN TRY
SELECT @xml = roow FROM OPENROWSET (BULK 'C:\data\SQL-Data\groupItemData.xml', SINGLE_BLOB) as groupItemData(roow)
if (@xml IS NOT NULL)
begin
begin tran
EXEC sp_xml_preparedocument @hdoc OUTPUT, @xml
SELECT * INTO #tmp_groupItemData FROM OPENXML(@hDoc, 'XML/groupItemData/groupItem')
WITH(
itemID [int],
groupID [int],
percentage [nvarchar](50),
count [float],
constantCount [nvarchar](50)
)
begin
--SELECT * FROM #tmp_groupItemData
INSERT INTO GrupoxRubro(FK_Grupo,FK_Rubro,Valor,EsFijo,Q) SELECT groupID,itemID,percentage,constantCount,count FROM #tmp_groupItemData WHERE groupID = @Id_Grupo
end
DROP TABLE #tmp_groupItemData
end
commit tran
return 1 --successful
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0 ROLLBACK;
SELECT ERROR_MESSAGE()
return 0 --failed
END CATCH
END
Código para la modificación de los ID en los XML
def fix_xml(pXml):
respXML = ""
i = 0
while (i < len(pXml)):
if pXml[i:i+2] == "ID":
respXML += pXml[i:i+4]
n = ""
i += 4
while (pXml[i] != '"'):
n += pXml[i]
i+=1
respXML += str( int(n) + 1) + '"'
else:
respXML += pXml[i]
i+=1
print(respXML)
Iniciar la pagina web (pausa para centrarnos en los stored procedure)
Pagina de Login
Generar los stored procedures necesarios para cargar datos
Problemas:
Tenemos problemas con los datos de los xml pues estos inician en cero y nuestro identity inicia en uno se trata de corregir a nivel de codigo sin existo , se procede a modificar los xml realizando un aumento en uno a cada ID presente en los xmls
Tenemos problemas con los datos de los xml pues estos inician en cero y nuestro identity inicia en uno se trata de corregir a nivel de codigo sin existo , se procede a modificar los xml realizando un aumento en uno a cada ID presente en los xmls


Comentarios
Publicar un comentario