<!-- #include file="../../include.asp" -->

<%
'<!--
'################################################
'	名称	:演習データ復元
'	作成日:2003/02/03
'	作成者:山崎
'	目的 :演習データ復元処理を実行する。
'	概要	:
'	<<表示>>
'	・なし
'
'################################################
'-->
%>
<%
'INP_DATA
	Dim EnshuKubun
	Dim SaveStatus

	Dim RouteType
main()

Sub main()
	If Not(SessionCheck()) Then
		Exit Sub
	End If

	Response.Write("<font size='1'>")

	RouteType = Request("RouteType")
	Dim Target
	Target = Request("Target")
	Dim BackUpPath, EnshuFolder, DateFolder
	BackUpPath = GetBackupPath()

	EnshuFolder = Target
	DateFolder = Request("DateFolder")


	Server.ScriptTimeout = 1200

	Dim ErrFlg

	Dim Query
	Dim Content
	Dim Content2
	Dim ii, jj

	Query = "exec SPMシステム情報取得 '" & GB_SystemCD & "'"
	Set Content = OpenQuery2(Query)

	Dim fso, f, f1, s, sf
	Set fso = CreateObject("Scripting.FileSystemObject")
	Set f = fso.GetFolder(BackUpPath & "\" & EnshuFolder & "\" & DateFolder)
	Set sf = f.Files

	Dim FileName
	Dim TableName
	Dim MyFile, ReadLineTextFile
	Dim tmps
	Dim CSVFCnt
	Dim Query1, Content1


	'列数の整合性チェック(080513小野)
	Query1 = "select * from dbo.sysobjects where xtype = 'U' and left(name,1)='T' ORDER BY name"
	Set Content1 = OpenQuery2(Query1)
	Do While Not(Content1.BOF Or Content1.EOF)
		TableName = Content1.Fields("name").value
		For Each f1 in sf
			If TableName & ".CSV" = UCase(f1.name) Then
				Set MyFile = fso.OpenTextFile(f1.path, 1)
				Do Until MyFile.AtEndOfLine
					'テキストファイルから1行取得
					ReadLineTextFile = MyFile.ReadLine
					If TableName = "TC2演習M" Then
						'検認フラグがカンマ区切りだとフィールド判定に失敗するためセミコロンに変換する
						ReadLineTextFile = Replace(ReadLineTextFile, ",',,,,,,,,,',", ",';;;;;;;;;',")
					End If
					'カンマ区切りで配列化
					tmps = Split(ReadLineTextFile, ",")
					'配列数をCSVフィールド数として取得
					CSVFCnt = UBound(tmps) + 1
					'文字列フィールドにカンマが入っていると配列数が増えてしまうのでその分を減算する
					For ii = 0 To UBound(tmps)
						'先頭が"'"且つ末尾が"'"で無ければ文字列フィールドが分断されている
						If Left(tmps(ii), 1) = "'" And Right(tmps(ii), 1) <> "'" Then
							'次の配列からループ
							For jj = ii + 1 To UBound(tmps)
								'CSVフィールド数を-1する
								CSVFCnt = CSVFCnt - 1
								'末尾が"'"なら文字列フィールドの終端であるため抜ける
								If Right(tmps(jj), 1) = "'" Then
									Exit For
								End If
							Next
						End If
					Next
					'テーブルから1レコードを取得する
					Query = "SELECT TOP 1 * FROM [" & TableName & "] "
					Set Content = OpenQuery2(Query)
					'テーブルフィールド数とCSVフィールド数が同じであるか確認
					If Content.Fields.Count <> CSVFCnt Then
						Response.Write("バックアップデータのバージョンが現在のシステムバージョンと異なるため復元出来ません。")
						Response.Write("<br><br>")
						Response.Write("データベーステーブル名称 : " & TableName)
						Response.Write("<br>")
						Response.Write("テーブルフィールドカウント : " & Content.Fields.Count)
						Response.Write("<br>")
						Response.Write("CSVデータフィールドカウント : " & CSVFCnt)
						Response.Write("<br><br>")
						Response.Write("<a href=""JavaScript:history.go(-1)"">戻る</a>")
						Exit Sub
					End If
					Exit Do
				Loop
			End If
		Next
		Content1.MoveNext
	Loop



	'重複データの削除
	Query1 = "select * from dbo.sysobjects where xtype = 'U' and left(name,1)='T' ORDER BY name DESC"
	Set Content1 = OpenQuery2(Query1)
	Do While Not(Content1.BOF Or Content1.EOF)
		TableName = Content1.Fields("name").value
		For Each f1 in sf
			If TableName & ".CSV" = UCase(f1.name) Then
				Query = ""
				If left(TableName,2) = "TG" OR left(TableName,2) = "TK" OR left(TableName,2) = "TS" OR left(TableName,2) = "TT" Then
					Query = "DELETE "
					Query = Query & " FROM [" & TableName & "] "
					If Target <> "all" Then
						Query = Query & " Where システムCD = '" & GB_SystemCD & "' AND 演習CD ='" & Target & "'"
					End If


'				TC4演習許可学生グループMは最後に削除する
'				(先に削除するとTC3学生グループM・TC5学生Mが結合削除出来なくなる)
'				ElseIf left(TableName,3) = "TC2" OR left(TableName,3) = "TC4" OR left(TableName,3) = "TC6" OR left(TableName,3) = "TDA" Then
				ElseIf left(TableName,3) = "TC2" OR left(TableName,3) = "TC6" OR left(TableName,3) = "TDA" Then
					Query = "DELETE "
					Query = Query & " FROM [" & TableName & "] "
					If Target <> "all" Then
						Query = Query & " Where システムCD = '" & GB_SystemCD & "' AND 演習CD ='" & Target & "'"
					End If
				End If


				If Request("user") = "1" Then
					If TableName = "TC1システムM" Then      'システムMは削除してはいけません
						Query = "SELECT * "
						Query = Query & " FROM [" & TableName & "] "
					End If
				End If

				If Request("user") = "1" Then
					If TableName = "TC3学生グループM" Then
						Query = "DELETE"
						Query = Query & " FROM TC3学生グループM FROM TC3学生グループM"
						Query = Query & " INNER JOIN TC4演習許可学生グループM ON "
						Query = Query & " TC3学生グループM.学生グループCD = TC4演習許可学生グループM.学生グループCD"
						If Target <> "all" Then
							Query = Query & " WHERE TC4演習許可学生グループM.システムCD = '" & GB_SystemCD & "' AND TC4演習許可学生グループM.演習CD = '" & Target & "'"
						End if
					ElseIf TableName = "TC5学生M" Then
						Query = "DELETE"
						Query = Query & " FROM TC5学生M FROM TC5学生M"
						Query = Query & " INNER JOIN TC3学生グループM"
						Query = Query & " ON TC5学生M.学生グループCD = TC3学生グループM.学生グループCD"
						Query = Query & " INNER JOIN TC4演習許可学生グループM"
						Query = Query & " ON TC3学生グループM.学生グループCD = TC4演習許可学生グループM.学生グループCD"
						If Target <> "all" Then
							Query = Query & " WHERE TC4演習許可学生グループM.システムCD = '" & GB_SystemCD & "' AND TC4演習許可学生グループM.演習CD = '" & Target & "'"
						End If
					End If
				End If

				If Query <> "" Then
DebugQuery(Query)
					Set Content = OpenQuery2(Query)
				End If

			End If
		Next
		Content1.MoveNext
	Loop
'	TC4演習許可学生グループMは最後に削除する
'	(先に削除するとTC3学生グループM・TC5学生Mが結合削除出来なくなる)
	Query = "DELETE "
	Query = Query & " FROM [TC4演習許可学生グループM] "
	If Target <> "all" Then
		Query = Query & " Where システムCD = '" & GB_SystemCD & "' AND 演習CD ='" & Target & "'"
	End If
	Set Content = OpenQuery2(Query)
	Query = "DELETE "
	Query = Query & " FROM [TC4演習許可学生M] "
	If Target <> "all" Then
		Query = Query & " Where システムCD = '" & GB_SystemCD & "' AND 演習CD ='" & Target & "'"
	End If
	Set Content = OpenQuery2(Query)
'Exit Sub



	'CSVデータからインポート
	Query1 = "select * from dbo.sysobjects where xtype = 'U' and left(name,1)='T' ORDER BY name"
	Set Content1 = OpenQuery2(Query1)
	Do While Not(Content1.BOF Or Content1.EOF)
		TableName = Content1.Fields("name").value

		For Each f1 in sf
			If TableName & ".CSV" = UCase(f1.name) Then
				Dim bInsert

				bInsert = 1

				If Left(TableName, 2) = "TC" Then
					bInsert = 0
				End If

				If Left(TableName, 3) = "TC2" OR Left(TableName, 3) = "TC4" OR Left(TableName, 3) = "TC6" Then
					bInsert = 1
				End If

				If Request("system") = "1" Then
					If TableName = "TC1システムM" Then  
						bInsert = 1
					End If
				End If

				If Request("user") = "1" Then
					If TableName = "TC3学生グループM" Then
						bInsert = 1
					ElseIf TableName = "TC5学生M" Then
						bInsert = 1
					End If
				End If

				If bInsert = 1 Then
					Set MyFile = fso.OpenTextFile(f1.path, 1)
					Do Until MyFile.AtEndOfLine
						ReadLineTextFile = MyFile.ReadLine
						tmps = Split(ReadLineTextFile, ",")

						'演習参加グループが外れている場合は演習に関連するグループ・ユーザーを
						'テーブル基準で削除することが出来ないためバックアップデータを基準に削除する
						If TableName = "TC3学生グループM" Then
							Query = "DELETE "
							Query = Query & " FROM TC3学生グループM "
							Query = Query & " WHERE システムCD = " & tmps(0) & " AND 学生グループCD = " & tmps(1)	'全ての主キーで照合
							Set Content2 = OpenQuery2(Query)
						ElseIf TableName = "TC5学生M" Then
							Query = "DELETE "
							Query = Query & " FROM TC5学生M "
							Query = Query & " WHERE システムCD = " & tmps(0) & " AND 学生番号 = " & tmps(1)	'全ての主キーで照合
							Set Content2 = OpenQuery2(Query)
						End If

						If TableName = "TC1システムM" Then  
							Query = "SELECT * FROM [TC1システムM] WHERE システムCD = " & tmps(0) & ""
DebugQuery(Query)
							Set Content = OpenQuery2(Query)
							If Not(Content.BOF Or Content.EOF) THen
								bInsert = 0
							End If
						End If

						If Request("system") <> "1" Then
							tmps(0) = "'" & GB_SystemCD & "'"
							ReadLineTextFile = Join(tmps, ",")
						End If

						If bInsert = 1 Then
							Query = "INSERT INTO " & TableName & " VALUES (" & ReadLineTextFile & ")"
DebugQuery(Query)
							On Error Resume Next
								Err.Clear()
								Set Content = OpenQuery2(Query)
								If Err.Description <> "" Then
									ErrFlg = Err.Description
									Response.Write("エラーコード:")
									Response.Write(Err.Description)
									Response.Write("<br>")
								End If
							On Error Goto 0
						End If
					Loop
				End if

			End If
		Next
		Content1.MoveNext
	Loop

	If ErrFlg <> "" Then

		Response.Write("<br><br>")
		Response.Write("<a href=""JavaScript:history.go(-1)"">戻る</a>")

	Else

		Response.Redirect("fm_enshu_load_view.asp?DateFolder=" & DateFolder & "&Target=" & Target & "&ErrMSG=完了しました ご確認下さい")

	End If

End Sub

%>