<% ' %> <% 'INP_DATA Dim EnshuKubun Dim SaveStatus Dim RouteType main() Sub main() If Not(SessionCheck()) Then Exit Sub End If Response.Write("") 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("

") Response.Write("データベーステーブル名称 : " & TableName) Response.Write("
") Response.Write("テーブルフィールドカウント : " & Content.Fields.Count) Response.Write("
") Response.Write("CSVデータフィールドカウント : " & CSVFCnt) Response.Write("

") Response.Write("戻る") 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("
") End If On Error Goto 0 End If Loop End if End If Next Content1.MoveNext Loop If ErrFlg <> "" Then Response.Write("

") Response.Write("戻る") Else Response.Redirect("fm_enshu_load_view.asp?DateFolder=" & DateFolder & "&Target=" & Target & "&ErrMSG=完了しました ご確認下さい") End If End Sub %>