過去の桐井戸端BBS (桐ver.9)
25791 「行削除」を禁止にする方法はありますか ロボコン 2004/04/07-14:29
 先日はお世話になりました。またおたずねです。
最近桐のユーザーが増え、あやまって全データを削除するミスが連発しました。
もちろん復活すればいいのですが、一般ユーザーについては削除禁止にしたいと思います。
編集はできるが削除禁止という設定はできるのでしょうか。
もしくはデータ追加は可能、訂正・削除は禁止でもいいのですが。
利用者コードの設定では無理ですね。会計ソフトなどでは、よくある設定だと思うのですが。
 仮の表に記入して、その後別表に書き出して・・・なんてのは思いつくのですが。
簡単にする方法がないでしょうか。
25798 Re:「行削除」を禁止にする方法 佐田 守弘 2004/04/07-18:28
記事番号25791へのコメント
ロボコンさん
一括処理から起動して、表→表形式編集、あるいはウィンドウ作成→ウィンドウ
会話コマンドで行わせるのであれば、許可作業を細かく指定できます。
(詳細は一括処理&イベントリファレンスの上記コマンドを参照)

しかし、会話処理で表から開かせた場合には、行削除を禁止する事はできないですね。
ですから、桐の操作を良く知らない人に操作してもらう場合には、良く使う表の一覧をメニュー形式で選ばせ、
一括処理の中から表を開く様にするしかないかと思います。

それでも勝手にファイルパレットやExplorerから表を直接開く人がいたら、
これはもうだめでしょうね。

●1つのアイデアとして
もし桐の事を詳しく知らない人に入力操作させるのだとしたら、
次の様な考え方であるい程度制限を付けたシステムを作る必要があろうかと思います。

・入力フォーム:表形式編集はさせるべきではないでしょうね。専用の入力フォームを作り、
許可する操作は、コマンドボタンで用意しておくのが良いかと思います。
コマンドボタンでの操作であれば、イベントのプログラムで、様々なチェックが掛けられます。

・メニュー:フォームでも桐のメニューは表示されますが、これを非表示とします。
メニューを表示しなければ、メニューからの行削除はしないと思います。

・許可する行削除
行削除操作自体は、私は必要かと思っています。だから、コマンドボタン、
およびDeleteキーで削除する人も考えられるので、許可する範囲での削除をプログラムとして組み込みます。
その準備として、表の項目に[入力者]と[入力日付]を作っておきましょう。
値は操作する人には見せません。1行入力する度に、誰がいつ入力したかを項目初期値で書き込みます。
コマンドボタンの実行、およびDeleteキーの押下に対して行削除の手続きを行わせます。
しかし削除の対象は、現在行1行だけです。
そして、そのデータが他人の入力または以前のデータ(昨日までなど)であった場合、
「このデータは確定済みですから削除できません!」
の様なメッセージを出して削除を拒否します。つまり、入力直後で本人のみが
1行だけを削除できるようにする訳です。
また、削除した行は、削除行として残しておくだけでなくて、別の表に転記して残しておくのも1つの方法でしょう。

佐田守弘(KS-00119)
25810 Re:「行削除」を禁止にする方法 ロボコン 2004/04/08-10:03
記事番号25798へのコメント
ありがとうございます。
大変参考になりました。早速作ってみます。

ところで、メニューフォームから表を開いているのですが、
開くときの機能パラメーターに許可作業を書いても無効ですね。
これができたら一番楽かと思いましたが。

ロボコン
25818 Re:「行削除」を禁止にする方法 しぼうかん 2004/04/08-20:37
記事番号25810へのコメント
ロボコンさん、こんばんは.

知っておられるかもしれませんが、とりあえず思いついた事を1つ2つあげてみます。

まず佐田さんもおっしゃっているように表(テーブル)を直接開いて削除されてしまう事を防止する方法として、
余りスマートでは無いのですが、項目を一つ作ります。

その項目の項目計算式に「&行削除はダメよ」といった変数を書き込んでおきます。

こうすると表を直接開こうとしてもエラーが出て開けません。
もちろんメニューフォームの変数宣言で「&行削除はダメよ」を宣言して置く必要は有ります。

なお、項目を増やさなくても既存の項目の項目計算式に
組み込み変数以外の変数を使った計算式が記述してあれば同じ事が可能です。

あと、これも佐田さんがおっしゃっていますが、行削除をフォームのコマンドボタンで行う方法に限定し、
フォームの種類をオーバーラップにしてメニューバーを隠してしまう事で
誤った操作による行削除を防止出来ると思います。

25820 Re:「行削除」を禁止にする方法 悲しげ 2004/04/08-22:21
記事番号25818へのコメント
どもっ、しぼうかんさん、1点だけ補足します。

>あと、これも佐田さんがおっしゃっていますが、行削除を
>フォームのコマンドボタンで行う方法に限定し、フォームの
>種類をオーバーラップにしてメニューバーを隠してしまう事で
>誤った操作による行削除を防止出来ると思います。

表編集ではなくフォームから扱う場合は、「オーバーラップにしてメニューバーを隠」さなくても、
会話処理で行削除をさせない設定は比較的簡単に可能です。
それは、フォームのオブジェクト属性で「編集対象表」タブの「許可作業」ボタンから「行削除」のチェックを外すことです。
こうすると、ファンクションメニュー、スラッシュメニュー、右クリックメニュー、[Del]キーの
どれからも行削除を実行することはできなくなります(ボタンからは可能)。

25821 Re:「行削除」を禁止にする方法 しぼうかん 2004/04/08-22:43
記事番号25820へのコメント
悲しげさん、こんばんは.

なるほど!そうですね。

というわけでロボコンさん、私のコメントの
オーバーラップ云々のくだりは"行削除"して頂き
悲しげさんのコメントを参考にして下さい。



25822 表を直接開かせない方法 佐田 守弘 2004/04/08-22:45
記事番号25810へのコメント
ロボコンさん
表を直接開かせない方法は、イベントないし一括処理と利用者IDの機能を
組み合わせる事によって可能ですね。
但し万全な方法ではありませんが。
仕掛けは次の通りです。

1)表に利用者IDを設定する
表には定義利用者と更新利用者を設定しておきます。このうち使うのは、
更新利用者IDの方です。定義利用者IDは御自身で管理しておいて下さい。
この表の更新利用者IDを仮に「TABLEUSE」とします。
これを設定しておけば、この利用者コードを知らない限り、
表の更新モードで開く事はできません。

2)利用者コードを設定する一括処理
以下の手続き1つを入れた一括処理ファイルを作って下さい。
================================
 手続き定義開始 利用者()
  利用者コード="TABLEUSE"
 手続き定義終了
================================
これを仮にDEFUSER.cmdという名前で保存しておきます。
この一括処理ファイルも、勝手に開かれない様に、更新利用者IDを設定しておいて下さい。
更新利用者IDは、表の定義利用者IDと同じで良いでしょう。
つまり、ロボコンさんだけがこの一括処理を再定義できる様にします。
また勝手に実行できない様に、参照利用者IDを設定しておいても良いでしょう。

3)フォームのイベントファイル
フォームのイベントファイルには、メイン部に以下のコマンドを入れて下さい。
================================
 ライブラリ "DEFUSER.cmd"
================================
これで上記の手続きがイベントの中から、ライブラリとして実行できます。
イベントファイルは仮に見られても、利用者IDを定義するコマンドは
見られない様にする仕組みです。

次にフォーム開始イベントに、以下のコマンドを記述して下さい。
================================
 手続き実行 利用者()
================================
つまりフォームを開くと、"TABLEUSE"の利用者IDが設定されて、表が編集できる様になります。
 
また設定した利用者IDを解除するために、どこかに見えないコマンドボタンを作っておき、
このコマンドボタンの機能名に「手続き実行」パラメータに
「利用者解除」を設定しておいて下さい。
実行させる利用者コード解除の手続きは以下の通りです。
================================
 手続き定義開始 利用者()
  利用者コード="TABLEUSE"
 手続き定義終了
================================
そしてフォームのオプションのタブを開いて、終了時に実行するコマンドボタンとして、このボタンを設定して下さい。
つまり、フォームを閉じると、このコマンドボタンが実行されて、利用者コードの解除が行われます。

またもし上記のライブラリの一括処理ファイルに参照利用者コードを設定する場合ですが、
ここには上記のIDとは別の仮のID(仮に"CMDEXEC")を設定しておきます。
この仮のIDは、フォームのイベントのメイン部で利用者コードコマンドを実行して設定します。
つまりフォームを開くと仮の利用者ID(CMDEXEC)が設定されて、ライブラリの
実行ができる様になります。そしてそのライブラリの中の手続きで、
本当の利用者ID(TABLEUSE)を設定します。

おそらくこの様に2段構えにしておけば、万全とはいえませんが、まずは大丈夫でしょう。
そこまで調べられる上級ユーザーがもしいたとしても、
誤操作で表のデータを全部削除する様な間違いはしないでしょう。

●許可作業の設定
 >機能パラメーターに許可作業を書いても無効ですね
ですが、許可作業の設定は機能名で表を開くのではだけだと思います。
一括処理コマンドの表コマンドを使って下さい。

佐田守弘(KS-00119)

25826 Re:表を直接開かせない方法 ロボコン 2004/04/09-13:41
記事番号25822へのコメント
皆さんありがとうございました。とても勉強になりました。
いろいろな方法があるのですね・・・。

とりあえず、一括処理で許可作業を限定することで、クリアしました。
長年桐を使っているのに、スキルが低くて情けない限りです。
本当にお世話になりました。

戻る