過去の桐井戸端BBS (桐ver.9)
27939 イベントで多重化した表を破棄終了しようとしても全て変更保存されてしまう 手塚 修 2004/10/12-18:48
1つの表を基にカード型のフォームと一覧表形式のフォームを作りました。

既に入力したデータを訂正編集する時ですが、一覧表形式のフォームで
訂正すべき行をクリックし、その行に見合ったデータをカード型フォームで表示する。
カード型フォームで訂正したが、保存終了ではなく、破棄終了にしたい。
訂正する以前のデータのままにしたい。以前のままのデータを保持したい。

上記のとき、表が多重化されているため、全て変更保存されてしまう。

変更回避の方法を教えてください。

見合ったデータ、これは一覧表形式のフォーム上で変数に取得しています。
その変数で表を絞り込みカード型フォームで表示させています。
一連の流れは、イベントで行っています。

桐井戸端BBSを見て、「閉じる」のコマンド釦を作り、
メソッド呼び出し @閉じる.実行()
も試してみたのですが、どのフォームにコマンド釦を作るのか、
どのkevに書くのかがわかりませんでした。

よろしくお願いいたします。

27940 Re:多重化した表の破棄終了をするには? 悲しげ 2004/10/12-20:29
記事番号27939へのコメント
わざわざ訂正する必要があるのかどうか。(?_?)
もし必要がないなら、フォームの編集対象表タブ/許可作業ボタン
で、行訂正等を許可しない方法があります。

何のためにわざわざ訂正モドキ(?)を行うのか、その理由いかんでは、
別な対処方法もありそうな気がしますが、今思いついたのは、
別表に書き出して、そのフォームの編集対象表をその別表とする。
これならともかく別表ですから、何をどうしようと元表には無関係。

>一覧表形式のフォームで訂正すべき行をクリックし、

当該テキスト(あるいは行全体のテキストをファミリとして)のマウス左クリックイベントで
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
method @フォーム.更新モード設定(0)
*↑クリックしたら訂正モードになってしまうのを避けるために。
* もっとうまい方法ありませんでしたっけ?
行マーク定義 1
絞り込み 行数=1
書き出し 表,"某別表.tbl",終了状態=&終了,*
フォーム呼び出し "某カード.wfm" /*編集対象表は某別表.tbl*/
絞り込み解除 1
ジャンプ 行マーク=1,終了状態=&終了
行マーク解除 1
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

後段の記述は、すいません、意味が判りません。(^^;)

27943 Re:多重化した表の破棄終了をするには? うにん 2004/10/13-09:22
記事番号27939へのコメント
>訂正する以前のデータのままにしたい。以前のままのデータを保持したい。
>
>上記のとき、表が多重化されているため、全て変更保存されてしまう。

多重化に限らず共有した表では破棄終了というのはできません。
変更確定した時点で共有している人にそのデータが行き渡ってしまうので必然的にそうなります。

行単位で訂正をキャンセルしたい場合は行退避・行復旧を使うんじゃないでしょうか。
でもこれって表示状態でしか使えないみたいですね。

27944 Re:多重化した表の破棄終了をするには? うにん 2004/10/13-09:29
記事番号27943へのコメント

>行単位で訂正をキャンセルしたい場合は行退避・行復旧を使うんじゃないでしょう
>か。
>でもこれって表示状態でしか使えないみたいですね。

そのものずばりの「トランザクション」というコマンドがありました。
使ったことなかった。これでロールバックすればいいですね。

27945 Re:多重化した表の破棄終了をするには? 手塚 修 2004/10/13-09:35
記事番号27940へのコメント
悲しげさん いつもすみません。

>わざわざ訂正する必要があるのかどうか。(?_?)
>何のためにわざわざ訂正モドキ(?)を行うのか、

本当はそうなのでしょうが。でも、間違っている、訂正しよう、
あっ、また間違った、破棄しよう、こんなことってありませんでしょうか?
最初に戻って又訂正すればいいことかもしれませんが。

それともう1つ。意図した全体像が完成し、最終チェックをしている時に
"わざと間違ったデータを入力し、破棄終了をしても保存されてしまう"
と言う多重化した表における破棄終了は、破棄終了できない。
この問題が発生した為に質問した次第です。

>別表に書き出して、そのフォームの編集対象表をその別表とする。
>これならともかく別表ですから、何をどうしようと元表には無関係。

この考え方 検討してみようと思っています。

>後段の記述は、すいません、意味が判りません。

一覧表形式のフォームを開き、行選択により変数値を取得、フォームを閉じる
保持した変数値を基に絞り込んだデータをカード型フォームで表示、
修正後、保存あるいは破棄終了する。
コマンド釦(訂正)をクリックすると上記一連の作業をさせる。

未練がましいのですが、なんともならないのでしょうか?

27946 Re:多重化した表の破棄終了をするには? 手塚 修 2004/10/13-10:04
記事番号27944へのコメント
うにんさん お世話になります。

>そのものずばりの「トランザクション」というコマンドがありました。
>使ったことなかった。これでロールバックすればいいですね。
>

車両管理のプログラムを作っているのですが、最初は、桐8のサンプルでしょうか
成績管理システムを下敷きにして、まねをしていました。
この成績管理では、「トランザクション」を使い、データを元に戻せるような
一括処理をしていました。途中まで、これを使っていたのですが、イベントの方が
いろんな細工ができるような気がして、後半からはフォーム イベントを利用しています。
プログラムの全体は一括処理で制御し、ある部分は一括処理、ある部分はイベント。
混在している状態です。

桐なら何でもできるよ、と聞いたことがあるのですが、難しいもんですね。

ありがとうございました。

27950 Re:多重化した表の破棄終了をするには? 悲しげ 2004/10/13-11:51
記事番号27945へのコメント
>でも、間違っている、訂正しよう、あっ、また間違った、破棄しよう、
>こんなことってありませんでしょうか?

ないですね、ふつうは。(^^;)
つーか、訂正すべきデータのみ訂正入力し(逆に訂正したくないデータはいじくらない)、誤入力してしまった場合は、
破棄しないで再訂正入力するべきものだと思います。

そもそも、何のために"わざと間違ったデータを入力"してから破棄するのでしょう?
あるいは、誤入力ではなく、正しく変更した場合はどうするのかも気になります。
間違っている場合のみならず、正しく変更した場合でもともかく全て破棄するように読めますが、そうなのですか?

この辺りがすごく疑問です。もし何らかの目的があるのであれば、
それこそを明記した方が名案が出そうな気がします。

後段の記述の件、
書いてあることそれ自体は(独立して)意味は判るのですが、
そのことと今回の件に何の関連があるのかが判らないと云うことです。(^^;)

ついでに、多重化表の件、
DOS版では多重化表なんてのは無かったので、しばしば別表に書き出したもので処理し、
その結果を併合等で元表に書き戻したりしたもんです。
Win版になって多重化表が扱えるように「進化」した訳ですが、
今回の件は上述のDOS版的な発想に「先祖返り」したような感が。(^^;)

27952 [中止 表 編集対象表]コマンド ONnoji 2004/10/13-14:10
記事番号27939へのコメント
>訂正する以前のデータのままにしたい。以前のままのデータを保持したい。
>上記のとき、表が多重化されているため、全て変更保存されてしまう。

手塚 修さん、こんにちは。

やはり、行訂正の破棄ではなくて、表( .tbl )全体の破棄終了のことのようですね。

桐ver.9 や 桐ver.9-2004 ならば、
場合によっては、多重化していても、破棄終了が可能なようですよ。

詳しくは調べていませんが…
以前、桐ver.8 と動作が違うのでアレレレと思ったことがあります。

なお、表( .tbl )はバックアップ取るになっている必要があります。

多重化して、ほにゃららして、
多重化した表( tbl )を対象に[中止 表 編集対象表]コマンドを実行した場合だけ効果があるようです。

※私( ONnoji )は手塚さんと逆でして…
何度やっても表( .tbl )が破棄終了されるので、首を傾げたくちでした。(>_<)


外していたらスイマセン。


例えば、次のようなコマンドボタンがあるとして…


オブジェクト名:cmd保存終了
   機能名   機能パラメータリスト
[1]表示
[2]手続き実行 cmd保存終了Click
[3]なし
[4]なし


オブジェクト名:cmd破棄終了
   機能名   機能パラメータリスト
[1]表示
[2]手続き実行 cmd破棄終了Click
[3]なし
[4]なし


*---------------------------*
名札 メイン



手続き定義開始 cmd保存終了Click( )
 変数宣言 自動,整数{ &tblNum }

 &tblNum = #is表

 多重化
 終了 表 編集対象表

 編集表 &tblNum

 メソッド呼び出し @cmd閉じる.実行( )

手続き定義終了

手続き定義開始 cmd破棄終了Click( )
 変数宣言 自動,整数{ &tblNum }

 &tblNum = #is表

 多重化
 中止 表 編集対象表

 編集表 &tblNum

 メソッド呼び出し @cmd閉じる.実行( )

手続き定義終了
*---------------------------*

<蛇足>

手前味噌ですが、以下もご参考になるかもしれません。

※[かっこうBBS]のURLが変更になりました>アンテナ様

http://www.geocities.jp/siliconvalley_bay_7565/@geoboard/1209.html


27954 Re:[中止 表 編集対象表]コマンド 手塚 修 2004/10/13-18:01
記事番号27952へのコメント
ONnojiさん お世話になります。
>
>桐ver.9 や 桐ver.9-2004 ならば、
>場合によっては、多重化していても、破棄終了が可能なようですよ。
>
>詳しくは調べていませんが…
>以前、桐ver.8 と動作が違うのでアレレレと思ったことがあります。
>
>なお、表( .tbl )はバックアップ取るになっている必要があります。
>
>多重化して、ほにゃららして、
>多重化した表( tbl )を対象に[中止 表 編集対象表]コマンドを実行した場合
>だけ効果があるようです。
>
 
  教えられたとおりに試してみましたが、破棄終了にはなりませんでした。

桐ver.9-2004 バックアップ取る コマンド釦(cmd閉じる)もできているかと思いますが、保存終了になってしまいました。
他のどこかに違いがあるのかもしれません。

破棄終了の必要性も含めて検討していこうと思っています。

ありがとうございました。


27960 ケースバイケースのようですね。 ONnoji 2004/10/14-10:49
記事番号27954へのコメント
手塚 修さん、こんにちは。

どうやら、ケースバイケースのようですね。

私の場合は桐ver.9だと必ず破棄終了になって困ったのですが…
これは、フォームを開いて、開いたフォームのコマンドボタンを実行して、
プログレスバーもどきのフォーム側で多重化して、
併合処理を行った後、多重化した表( .tbl )に対して、
[中止 表 編集対象表]コマンドを実行するというものでした。
※私は一括処理を使用していません。

これは詳しくは調べていませんので、あくまでもタラレバですけれど…
しかし、一括処理の手続きであらかじめ多重化してある場合等では、効果が無いのかもしれませんね。


27961 Re:多重化した表の破棄終了をするには? 島尾 2004/10/14-13:36
記事番号27946へのコメント
フォーム&イベントでもトランザクションは使えますよ。
破棄時はロールバック、確定はコミット。
デバック時に処理が停止したりするとトランザクションが開始したままになってしまうので、
フォーム開始時のトランザクション開始
の前に#トランザクションモードをしらべて、トランザクション中であれば
一旦コミットしておけば良いかと。
27963 トランザクション できたみたいなんですが? 手塚 修 2004/10/15-10:33
記事番号27961へのコメント
島尾さん お世話になります。

手続き定義開始 コマンドボタン_一覧::マウス左クリック(長整数---&処理中止)
 if(#トランザクションモード=1)
    トランザクション コミット
 end
トランザクション 開始
  変数宣言 固有,文字列{&車両番号}
  変数宣言 固有,日時{&日付}
  代入 &車両番号=[車両番号]
  代入 &日付=[日付]
   フォーム呼び出し 事故報告書
 if(&STR=破棄)
   トランザクション ロールバック
 else
   トランザクション コミット
 end
  代入 &STR=""
手続き定義終了

上記のKEVを作りました。
事故報告書フォーム(カード型)には、コマンド釦(破棄終了)を
作り、1行目に   なし   #代入((&STR=破棄)
   2行目に   終了        
  コマンド釦(保存終了)は、閉じる      としました。

>の前に#トランザクションモードをしらべて、トランザクション中であれば
>一旦コミットしておけば良いかと。

意味がよく理解できていながらもなんだかできたみたいなんですが、良いのでしょうか?


27964 Re:トランザクション できたみたいなんですが? 島尾 2004/10/15-10:40
記事番号27963へのコメント
私がやる方法では
呼び出した入力フォーム(事故報告書)のイベントの
フォーム開始イベントの所で、

if(#トランザクションモード=1)
  トランザクション コミット
end
トランザクション 開始

をしておいて、
確定処理ボタンに手続き呼び出して
  メソッド呼び出し @フォーム.更新モード設定(0)
トランザクション コミット

破棄処理ボタンに手続き呼び出して
  メソッド呼び出し @フォーム.更新モード設定(0)
トランザクション ロールバック

しております。
いろんなやり方あると思いますので、出来れば何でもいいと思います

戻る