フロントエンドデータベースの起動モード切り替えフラグを外に置く

【スポンサーリンク】




この話の前提

  • 複数人で同時使用するAccess製システムの起動(ローカルにフロントエンドデータベースをコピー)をVBSでやっている
  • ユーザーはVBSのショートカットをローカルに置き、そこから起動する
  • VBS内に起動モード切り替えフラグを設置し、不具合対応やメンテナンスの時はVBSを編集してフラグを切り替える


VBSのショートカットではなくコピーしたVBSをローカルに置いている人がいるらしく、VBSを編集してフラグを切り替えたにも関わらずログインするユーザーが現れるという状況になった。
その場合、こちらではどうしようもできず……

「フラグを記載したファイルを別途用意し、システム本体を開く時に読み込んでフラグをチェックすればいいのでは?」ということでプチ改造。
ついでにVBSのフラグ切り替えもファイル読み込み式に統一。


起動フラグ用のテキストファイルを用意

名前:SystemOpenFlg.txt
文字コード:ANSI

名前はなんでもいいのでわかりやすいものに。
文字コードは「名前を付けて保存」で「ANSI」に変更。
他の文字コードだと後の処理で日本語が文字化けしてエラーになる。
今回処理に使うのは1行目と2行目なので、それ以降はメモとして使用可能。

0
完了予定時間:16時00分頃
------------------------------
1行目:フラグ番号
0:通常起動
1:不具合対応
2:メンテナンス

2行目:不具合対応やメンテナンスの完了予定時間


Access本体に処理を追加

一番最初に開かれるフォームのForm_Openに処理を入れる。

説明
FileSystemObjectのOpenTextFile("パス").ReadAllで「SystemOpenFlg.txt」の全行を読み込み、Splitを使って改行vbCrLfで区切った配列arrLを作成。
arrL(0)が1行目(フラグ番号)なのでflgOpenに、
arrL(1)が2行目(完了予定時間)なのでstrEndTimeに入れる。
flgOpenの値によって処理を変更し、メンテナンスメッセージにはstrEndTime(完了予定時間)の表示も行う。

Dim FSO As Object: Set FSO = CreateObject("Scripting.FileSystemObject") '参照設定しない場合に使用
'Dim FSO As New FileSystemObject '参照設定:Microsoft Scripting Runtime
Dim arrL As Variant, flgOpen As Integer, strEndTime As String

arrL = Split(FSO.OpenTextFile("SystemOpenFlg.txtのフルパス").ReadAll, vbCrLf)
flgOpen = CInt(arrL(0))
strEndTime = arrL(1)

If flgOpen <> 0 Then
    If flgOpen = 1 Then MsgBox "不具合対応中のためシステムを開くことができません。" & vbCrLf & "時間を置いてやり直してください。", , "システム名": Application.Quit
    If flgOpen = 2 Then MsgBox "システムメンテナンス中です。" & vbCrLf & "しばらくお待ちください。" & vbCrLf & strEndTime, , "システム名": Application.Quit
End If


起動用VBSに処理を追加

Access起動処理より前に入れる。
処理の内容はAccess側と同じなので説明は省略。

Dim FSO, arrL, flgOpen, strEndTime
Set FSO = CreateObject("Scripting.FileSystemObject")

arrL = Split(FSO.OpenTextFile("SystemOpenFlg.txtのフルパス").ReadAll, vbCrLf)
flgOpen = CInt(arrL(0))
strEndTime = arrL(1)

If flgOpen <> 0 Then
    If flgOpen = 1 Then MsgBox "不具合対応中のためシステムを開くことができません。" & vbCrLf & "時間を置いてやり直してください。", , "システム名": WScript.Quit
    If flgOpen = 2 Then MsgBox "システムメンテナンス中です。" & vbCrLf & "しばらくお待ちください。" & vbCrLf & strEndTime, , "システム名": WScript.Quit
End If



【スポンサーリンク】