登録/編集…は、面倒なので後回しww。削除の処理を作る。
削除で行う処理は、基本1つだけ。該当プレイヤーのDBのレコードに対して、Update文でDelFlgを1に変更する。
今までの関連レコード群は、わかる人なら復旧できるように削除せずにそのまま残す。
プレイデータや、設定系のテーブルの情報も、そのまま残すことにする。
サブメニューを選択した直後に、いきなり削除するのは乱暴なので、メッセージを表示して、最終確認を行うようにする。


んで、あとはSQL実行すればおしまいー。ってわけにはいかないのだった…
削除の処理は単純なのだが、いろいろと条件によって追加でやらないといけないことがある。
1つ目は、現在選択されているプレイヤーであるか。
選択中のプレイヤーを削除したら、別の残ったプレイヤーを選択プレイヤーに切り替える処理が必要。
2つ目は、最後のプレイヤーであるか。
最後のプレイヤーだった場合、削除したあとに、新規プレイヤーの「たまね」を作成して、選択プレイヤーにする。
これらを踏まえて作った処理がこちら。
*delUser ;プレイヤー削除 cmdmes="ぷれいやー:"+pname(csrpos)+"をさくじょしました" delUserID=uid(csrpos) ;削除するユーザID cuid=0 repeat length(uid):cuid+=uid(cnt):loop if cuid=delUserID { ;最後の1人を消しているか sqlstr="INSERT INTO UserTable (UserName) VALUES ('たまね')" sql_q sqlstr ;最後にinsertしたユーザIDをゲット sqlstr="SELECT * FROM UserTable where rowid=last_insert_rowid()" sql_q sqlstr UserID=sql_i("ID") cmdmes="ぷれいやー:"+pname(csrpos)+"をさくじょ、「たまね」をつくりました" } ;プレイヤーの削除フラグをUpdate sqlstr="update UserTable SET DelFlg=1 " sqlstr=sqlstr+"Where ID="+delUserID sql_q sqlstr uid(csrpos)=0:pname(csrpos)="未登録" if delUserID=UserID {;選択中のプレイヤーなら repeat length(uid) if uid(cnt)>0 and uid(cnt)!=delUserID { UserID=uid(cnt):break } loop } gosub *selUserUpdate_SQL ;選択プレイヤーのDB更新 gosub *make_player_list ;プレイヤー一覧更新 return
ここで、選択中プレイヤーの更新と、プレイヤーの一覧更新は、共通ロジックとしてルーチン化し、呼び出すことにした。
これで、プレイヤーの削除ができるようになった。
さて、最後に残した面倒な奴を作り始めるか…