過去の桐井戸端BBS (桐ver.8)
11598 共有環境で項目置換ができない fuji 2001/06/14-18:48
みなさん、こんばんは
また、わからないことが出てきてしまいました。どなたか、至急教えてください!

一括処理で、共有環境で他のクライアントが編集中の状態で、その同じテーブルを開いて、
他のクライアントが編集していないレコードを絞り込み、項目置換をしたいのですが、
どうしても「他のユーザーが処理中です」というエラーが出てしまいます。
レコードのバッティングがなければ、置換できると思ったのですが。。。

このエラーを回避して、項目置換の作業をすることはできないでしょうか?
お願いです。どなたか教えてください!!

11600 Re:共有環境での項目置換 佐田 守弘 2001/06/14-19:29
記事番号11598へのコメント
fujiさん
共有環境での項目置換はできません。
それは、他のユーザーが編集していないレコードのみを対象とした場合でも同じです。
なぜかと言うと、項目置換を行う直前には、桐がその表に対してファイルロックを行います。
置換対象レコード以外であっても他のユーザーが編集しているとファイルロックができないので、置換が行えないのです。

>このエラーを回避して、項目置換の作業をすることはできないでしょうか?
>お願いです。どなたか教えてください!!

繰り返しコマンドで繰り返しを行いながら、行訂正コマンドで1レコードずつ項目値を訂正して行く方法で、
全体を一気に行う置換と同じ結果が得られます。
この際に、訂正を行ったかどうかを記録するフラグとして、[置換済]の様な項目を用意しておきます。
そして、目的の項目と一緒にこの項目の値の書き替えも行います。
 行訂正 [目的項目]=<置換と同じ計算式>
    ,[置換済]=1

行訂正仕様とした行が編集中であれば、行訂正ができませんから、その時には次の行に進めるか、編集が終わるまで待ちます。
行訂正をせずに次に進めた時には、先程の[置換済]の値が0のレコードを集めて、同じ事を繰り返します。

佐田守弘(KS-00119)
11601 Re:共有環境での項目置換 masa 2001/06/14-19:34
記事番号11598へのコメント
fujiさん、はじめまして
桐のソフトを共有で使用中の場合、その表が閉じて終らない限り
他の人はアクセス出来ないようになってると思います。
もしかしたら新しい技術で回避出来るのかもしれませんが
残念ながら私は出来ないと思っています。

11609 Re:共有環境での項目置換 KH 2001/06/14-21:04
記事番号11601へのコメント
>桐のソフトを共有で使用中の場合、その表が閉じて終らない限り
>他の人はアクセス出来ないようになってると思います。
>もしかしたら新しい技術で回避出来るのかもしれませんが
>残念ながら私は出来ないと思っています。
>

masaさんは今晩は。
お気持ちは十分わかりますが、失礼ながら少し言い過ぎではないかなと思った次第です。
共有更新の場合、専有モードに比べ、制約はかなりありますが、
具体的には、バックアップファイルが作れないとか、元に戻せないとか、行挿入・行複写・行移動・行復活などができないなどありますが、
新規にデータを単純に複数の人間で追加する分にはそんなに問題はないと思っていますが如何でしょう。
勿論バックアップなど細かい配慮の処理を一括で組んでおかなければ安心は出来ませんが。
11631 Re:共有環境での項目置換 fuji 2001/06/15-09:14
記事番号11600へのコメント
佐田さん、すばやいレスありがとうございます。
非常に参考になります。

2点ほど質問させてください。

<1点目>
>繰り返しコマンドで繰り返しを行いながら、行訂正コマンドで1レコードずつ項目値を訂
>正して行く方法で、全体を一気に行う置換と同じ結果が得られます。
行訂正コマンドは、編集対象行のみに処理をかけて、実行後も編集対象行は移動しない、と理解しております。
対象行を次のレコードに移すにはどうしたらよいのでしょうか?

<2点目>
> 行訂正 [目的項目]=<置換と同じ計算式>
>    ,[置換済]=1
置換したいデータが#順位なんですが、このパラメータにこの関数式を入れると「使用できない関数」だというエラーが出ます。
なにか、これに変わる式はあるでしょうか?

11633 Re:共有環境での項目置換 masa 2001/06/15-09:42
記事番号11609へのコメント
KHさん
はじめまして

>新規にデータを単純に複数の人間で追加する分にはそ
>んなに問題はないと思っていますが如何でしょう。

との事ですが、実際に会話処理で使用中の別のHDの表に対しデータの追加をしてみたのですが、
「KD1463:他のユーザーが使用中のファイルです」とメッセージが出るのですが、
HDを共有で使ってる環境という意味の事でなく、何か別の共有の事なのでしょうか?
ちなみに桐V8sp6を使用してます。
11635 Re:共有環境での項目置換 KH 2001/06/15-10:17
記事番号11633へのコメント
>との事ですが、実際に会話処理で使用中の別のHDの表に対し
>データの追加をしてみたのですが、「KD1463:他のユーザー
>が使用中のファイルです」とメッセージが出るのですが、
>HDを共有で使ってる環境という意味の事でなく、何か別の共有の事
>なのでしょうか?
>ちなみに桐V8sp6を使用してます。

表ファイルの共有と意味でとっていましたが違いましたか。
最初に表ファイルを開く人が占有モードで開けば上記のようなエラーが出るでしょうが、
共有更新で開けば、次に開く人が共有モード(状況によって参照モードか
更新モードいずれでも結構です)で開けば上記のようなことはありません。
ただし、環境設定で共有管理情報ファイルの位置を同じにしなければなりませんから、
通常はサーバーにある共有データは共有管理情報はサーバーに置くことになると思います。


11636 Re:共有環境での項目置換 島尾 2001/06/15-10:26
記事番号11631へのコメント
#順位は置換コマンドで無いと使えませんよ。
逆に考えると、いつ誰がデータを追加するか解らない環境下で順位を付ける事自体矛盾しませんか?
順位が知りたいその瞬間にイベント処理で、その都度絞り込み、単一化、ソートして行番号を得るとかすれば得られますよ。
11639 Re:共有環境での項目置換 tuji 2001/06/15-10:48
記事番号11631へのコメント
><1点目>
>>繰り返しコマンドで繰り返しを行いながら、行訂正コマンドで1レコードずつ項目値を訂
>>正して行く方法で、全体を一気に行う置換と同じ結果が得られます。
>行訂正コマンドは、編集対象行のみに処理をかけて、実行後も編集対象行は移動しない、と理解し
>ております。
>対象行を次のレコードに移すにはどうしたらよいのでしょうか?

繰り返しの処理に
ジャンプ 行番号=次行
を加えてやればいいのでは?

11647 Re:共有環境での項目置換 masa 2001/06/15-13:39
記事番号11635へのコメント
KHさん
こんにちは

>表ファイルの共有と意味でとっていましたが違いましたか。
>最初に表ファイルを開く人が占有モードで開けば上記のようなエラーが
>出るでしょうが、共有更新で開けば、次に開く人が共有モード(状況に
>よって参照モードか更新モードいずれでも結構です)で開けば上記のよ
>うなことはありません。ただし、環境設定で共有管理情報ファイルの位
>置を同じにしなければなりませんから、通常はサーバーにある共有デー
>タは共有管理情報はサーバーに置くことになると思います。
>
との事で、ファイルパレットにある共有をクリックした状態で表を
開くと共有で使用中となりますが、その状態でも、書出し追加処理を
会話処理でするとやはり同じメッセージが出るのですが・・・・
只、そうするとファイルパレットにある共有をクリックする意味が
無いので私の方が間違ってると思います。すみません。
それでどうしたら上記のように共有で使えるのでしょうか?
よろしくお願いします。


11654 Re:共有環境での項目置換 fuji 2001/06/15-17:20
記事番号11636へのコメント
>#順位は置換コマンドで無いと使えませんよ。
>逆に考えると、いつ誰がデータを追加するか解らない環境下で順位を付ける
>事自体矛盾しませんか?
>順位が知りたいその瞬間にイベント処理で、その都度絞り込み、単一化、ソ
>ートして行番号を得るとかすれば得られますよ。

島尾さん、はじめまして
レスありがとうございます。
共有している同テーブルでも、各クライアントはその中のレコードのかち合わないグループで作業しています。
その各グループ内での順位が必要なのです。
さらには、各レコードの順位は記録として残しておきたいものなので項目に入力されたものでなければなりません。

おわかりいただけますでしょうか?

11655 Re:共有環境での項目置換 fuji 2001/06/15-17:27
記事番号11639へのコメント
>繰り返しの処理に
>ジャンプ 行番号=次行
>を加えてやればいいのでは?
>
なるほど!!
ジャンプコマンドでやればいいのですね。
初歩的な質問ですみませんでした。
おかげさまで、これで、ひとつ解決しました。
ありがとうございました。

11656 Re:共有環境での項目置換 KH 2001/06/15-18:24
記事番号11647へのコメント
>それでどうしたら上記のように共有で使えるのでしょうか?

masaさん、今晩は。
私もmasaさんの状況がつかめないで理解できないままでいます。済みません。
私が理解している共有とは、あくまでもLANのネットワーク上です。
クライアントとサーバーの関係の中でしか共有を使った事はありません。
どこから説明するば良いのか?
また、このツリーは「共有環境での項目置換」のツリーですので、
今現在はちょっと趣旨を外れているかと思います。
幅田さんに、整理に困るとお叱りのコメントされそうですので
別ツリーで新たに質問されるか、
または過去ログでありそうな気がしますが如何でしょう。

11657 Re:共有環境での項目置換 masa 2001/06/15-18:38
記事番号11656へのコメント
KHさん こんばんわ

そのとおりですね。
私も過去ログ等で探して、それでも解らなかったら
(他の一括処理を勉強中なので後になりますが)
再度投稿したいと思います。
失礼しました。

11700 共有環境での項目置換 できました!! fuji 2001/06/16-23:51
記事番号11598へのコメント
佐田さん、島尾さん、masaさん、tujiさん、KHさん、
貴重な数々の助言ありがとうございました。
おかげさまで、共有環境でも順位を入力できるルーチンが完成しましたので、ここにご報告させていただきます。

&項目1は順位の基準となる項目で、&項目2は順位を入力する項目です。
*====================================================
並べ替え {&項目1 降順}
項目集計 &項目2
ジャンプ 行番号=先頭

繰り返し &i=1,&件数
  行訂正 &項目2=""
  ジャンプ 行番号=次行
繰り返し終了

ジャンプ 行番号=先頭
行訂正 &項目2=1

繰り返し &i=1,&件数-1
  代入 &a="",&b=""
  代入 &a=#項目属性(#項目番号( &項目1 ),0)
  ジャンプ 行番号=次行
  代入 &b=#項目属性(#項目番号( &項目1 ),0)
*メッセージボックス ,"&a="+#str(&a)+" "+"&b="+#str(&b)
if(&a=&b)
  代入 &c=""
  ジャンプ 行番号=前行
  代入 &c=#項目属性(#項目番号( &項目2 ),0)
  ジャンプ 行番号=次行
  行訂正 &項目2=&c
else
  行訂正 &項目2=&i+1
end
繰り返し終了
*====================================================
#順位は使えないし、その代用になりそうな#項目値も#直前値も使えないので、自分としてはけっこう難儀しました。

どなたか同じ悩みを抱えている方に参考になればと掲載させていただきました。


戻る