作業表編集

作業表の変更です。まずは作業表を選択するページ

change.asp ソースはこちら


ほとんど閲覧のview.aspと変わりません。
どの作業表を変更するのか特定するため、ソースの赤文字の部分のラジオボタンだけ追加しています。

飛び先がこちら
change2.asp ソースはこちら


作業表登録のadd.aspにすでに登録してあるデータをセットしました。
セットの仕方はview.aspと同じ方法なので、割愛します。
ただ、前のページ(change.asp)で、何も選択しないで編集ボタンを押した場合にエラーに飛ばしています。
それと、隠しフィールドに作業表IDをセットしています(ソースの赤文字の部分)

change2.aspで編集ボタンを押した際の飛び先change3.aspのソースは以下のとおり

change3.asp


<% @LANGUAGE="VBScript" %>
<%
if Session ("id") = "" then
Response.Redirect "error.asp?err=session"
end if
 
'------------------★データファイル★------------------
data_file = Server.MapPath("data.dat")
'------------------★てんぽファイル★------------------
temp_file = Server.MapPath("temp.dat")
 
'------------------★フォーム取得★------------------
data_id = Request.Form("data_id")
name = Request.Form("name")
koumoku = Request.Form("koumoku")
kasyo = Request.Form("kasyo")
naiyo = Request.Form("naiyo")
up_month = Request.Form("up_month")
up_day = Request.Form("up_day")
 
'------------------★ファイルカキコデータ生成★------------------
file_data = data_id & Chr(9) &_
Now & Chr(9) &_
name & Chr(9) &_
koumoku & Chr(9) &_
kasyo & Chr(9) &_
naiyo & Chr(9) &_
up_month & Chr(9) &_
up_day
 
'------------------★一度てんぽに書く★------------------
Set ObjFSO = Server.CreateObject("Scripting.FileSystemObject")
Set ObjTS = ObjFSO.OpenTextFile(data_file,1,False) '★データ読み取り
Set ObjTemp = ObjFSO.OpenTextFile(temp_file,2,False) '★てんぽ書き込み
 
ObjTemp.WriteLine file_data
Do Until ObjTS.AtEndofStream
 
data_arr = ObjTS.ReadLine
data = Split(data_arr,Chr(9))
if data(0) <> data_id then
ObjTemp.WriteLine data_arr
end if
Loop
ObjTS.Close
ObjTemp.Close
Set ObjTS = Nothing
Set ObjTemp = Nothing
 
'------------------★それを戻す★------------------
Set ObjTemp = ObjFSO.OpenTextFile(temp_file,1,False) '★てんぽ読み取り
moto_data = ObjTemp.ReadAll
ObjTemp.Close
 
Set ObjTS = ObjFSO.OpenTextFile(data_file,2,False) '★データ書き込み
ObjTS.Write moto_data
ObjTS.Close
 
Set ObjTS = Nothing
Set ObjTemp = Nothing
Set ObjFSO = Nothing
 
 
%>
<html>
<head>
<title>作業管理システム</title>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
<style type="text/css">
<!--
.mozi { font-size: 12px}
-->
</style>
</head>

 
<body bgcolor="#ffffff" text="#000000">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td> <br>
<table width="500" border="0" cellspacing="0" cellpadding="0" align="center">
<tr>
<td bgcolor="#0000CC">
 
<table width="100%" border="0" cellspacing="1" cellpadding="0">
<tr>
<td>
<div align="center"><font color="#FFFFFF"><b>作業表編集</b></font></div>
</td>
</tr>
<tr>
<td bgcolor="#FFFFFF" class="mozi">
<div align="center">
<p> </p>
<p><br>
変更しました。<br>
 </p>
<p> </p>
</div>
</td>
</tr>
<tr>
<td bgcolor="#FFFFFF" height="10" class="mozi">
<div align="right"><a href="menu.asp">メニュー</a></div>
</td>
</tr>
<tr>
<td bgcolor="#FFFFFF" height="10" class="mozi">
<div align="right"><a href="logout.asp">ログアウト</a></div>
</td>
</tr>
</table>
</td>
</tr>
</table>
<br>
</td>
</tr>
</table>
</body>
</html>

 

ここでポイントとなるのが、変更したデータをファイルに書き込む部分です。
今回は一度、テンポラリファイル(予備ファイル)に書き込んでから、元のデータファイルに戻しています。
これは、データファイルを一行ずつ読み込みながら同時にそのファイルに書き込んでいくというのが不可能なためです。
一度変数に格納しといて、書き込んでいくという事もできますが、今回はテンポラリファイルを用いることにします。

書き込む部分以外はほぼ登録と同じです。
カウント(作業表ID)はchange2.aspで隠しフォームとして送られてくるので、それをセットします。

ポイントのデータ書き込み部分

'------------------★一度てんぽに書く★------------------
Set ObjFSO = Server.CreateObject("Scripting.FileSystemObject")
Set ObjTS = ObjFSO.OpenTextFile(data_file,1,False) '★データ読み取り
Set ObjTemp = ObjFSO.OpenTextFile(temp_file,2,False) '★てんぽ書き込み


ObjTemp.WriteLine file_data -----A
Do Until ObjTS.AtEndofStream


data_arr = ObjTS.ReadLine -----B
data = Split(data_arr,Chr(9))
if data(0) <> data_id then -----C
ObjTemp.WriteLine data_arr
end if
Loop
ObjTS.Close
ObjTemp.Close
Set ObjTS = Nothing
Set ObjTemp = Nothing


'------------------★それを戻す★------------------
Set ObjTemp = ObjFSO.OpenTextFile(temp_file,1,False) '★てんぽ読み取り
moto_data = ObjTemp.ReadAll
ObjTemp.Close


Set ObjTS = ObjFSO.OpenTextFile(data_file,2,False) '★データ書き込み
ObjTS.Write moto_data
ObjTS.Close

Set ObjTS = Nothing
Set ObjTemp = Nothing
Set ObjFSO = Nothing


まず、-----A で今回変更したデータ(フォームから受け取った作業表データ)をテンポラリファイルに書き込みます。
-----B で元データを一行読み込み -----C で変更したデータと作業表IDを照らし合わせ、変更していないデータだけ、テンポラリファイルに書き込んでいます(そのまま元データを流し込むと、変更したデータと、元にあったデータが複重してしまうため)。これで、テンポラリファイルには先頭に変更したデータがきて、それ以降に元データがくることとなります。

サンプル
data_fileの中身
4 2003/02/28 2:09:01 順ちゃん☆ コンテンツ追加 VC VCでゲームを作ろう 3 1
2 2003/02/28 1:48:36 kazan デザイン トップページ ボタンのデザイン変更 2 28
3 2003/02/28 1:48:14 Arc イメチェン 髪型 リーゼント 2 28


真中のデータを変更すると

temp_dataの中身
2 2003/02/28 3:48:36 kazan2 デザイン トップページ ボタンのデザイン変更 2 28
4 2003/02/28 2:09:01 順ちゃん☆ コンテンツ追加 VC VCでゲームを作ろう 3 1
3 2003/02/28 1:48:14 Arc イメチェン 髪型 リーゼント 2 28


テンポラリファイルに書き込んだら、それをもとのデータファイルにそのまま戻します。
ファイルに書き込んだら、登録の時と同じように「変更しました」ページを表示しています。