(現在 過去ログ24 を表示中)

HOME HELP 新規作成 新着記事 トピック表示 ファイル一覧 検索 過去ログ

[ 最新記事及び返信フォームをトピックトップへ ]

■3689 / inTopicNo.1)  同じ処理が2回目だとエラーが出る
  
□投稿者/ ステラ -(2008/05/24(Sat) 03:32:23)
    桐 ver9-2007 sp4 を windows で使っています。
    
    フォームにイベントを定義し、コマンドボタンから手続きを実行させて複数のファイルの読み込みをしています。
    フォームを開いて手続き”A”を実行するコマンドボタンを押すと、必要な処理がされて完了します。
    同一フォーム内にAと途中までが同じ処理をする手続き”B”があり、Aを実行した後Bも動かそうと思うと、
    表1が開かないらしく確認のために入れたエラー(行を指し示して条件コマンドはイベントでは使えない旨)が出てきます。
    確認のために一度Aを実行した後再度Aを実行すると、やはり同じエラーがでます。
    フォームを一度閉じて再度開くとAかBか1回はエラーなく実行できるのですが、フォームを開いたままだと、次は表1が開けないようなのです。
    なにか手続き定義に不備があるのでしょうか??
    
    ちなみに  条件 ( &OK <>1 ) 実行終了 保存,・・ の部分はイベントでは使用できないと分かっていて、
    表が開けないなんて事があるかもしれないから確認のために入れておこうと思って入れたもので、&OK=1 のときは当然エラーは出ません。
    問題なく何度でも動作確認ができればその行だけを削除するつもりでした。
    
    次の手続きが書いてあり、コマンドボタンには手続き実行のみが機能に入れてあります。(必要な変数定義はしてあります。)
    
    手続き定義開始 "データ読み込み"()
    メッセージボックス "データ出力" ,"必要なデータは出力してありますか?"  , アイコン=!, ボタン指定=5, , &確認
     ケース開始   
      ケース ( &確認 ≠6 )
        break
      ケース ( &確認=6 )
        表 "読込枠.tbl", 表番号=1,  終了状態=&OK
        条件 ( &OK <>1 ) 実行終了 保存, 表題="読込", メッセージ=”読込枠.tblは開けませんでした。”
        条件 (.NOT #行集計状態 .AND .NOT #絞り込み状態 .AND #整列状態) 整列解除
        行削除 *
        表整理 余白割合=10
        読み込み条件登録 テキスト,条件名="データ読込","A1.txt",区切り=",",空白削除=両方,項目名=する,ファイル名変更=する,{  省略   }
        読み込み テキスト,条件名="データ読込"
        終了 表 1
          表 "A1.tbl", 表番号=2,   終了状態=&OK
          条件 ( &OK <>1 ) 実行終了 保存, 表題="読込", メッセージ=”A1.tblは開けませんでした。”
          条件 (.NOT #行集計状態 .AND .NOT #絞り込み状態 .AND #整列状態) 整列解除
          行削除 *
          表整理 余白割合=10
          読み込み条件登録 表,条件名="読込","読込枠.tbl",ファイル名変更=しない,{ 省略  },編集表=する
          読み込み 表,条件名="読込"
          
          メッセージボックス "ファイルの出力" , "「A1.tbl」として、\n \n [パス名]   に保存します。" , アイコン=i, ボタン指定=2, 制御文字展開=する,   &保存
              if ( &保存=1 )
                 終了 表 2
                 表 "A1複写.tbl", 表番号=3,  終了状態=&OK
                   条件 (.NOT #行集計状態 .AND .NOT #絞り込み状態 .AND #整列状態) 整列解除
                   行削除 *
                   表整理 余白割合=10
                   読み込み条件登録 表,条件名="抜粋読込","A1.tbl",ファイル名変更=しない,{ 省略 },編集表=しない
                   読み込み 表,条件名="抜粋読込"
                   else
                        メッセージボックス "桐一覧表ダウンロード" ,”ダウンロードできませんでした” 
              end  
     ケース終了
    終了 表 3
    手続き定義終了
    
    
    

引用返信 [メール受信/OFF] 削除キー/
■3690 / inTopicNo.2)  Re[1]: 同じ処理が2回目だとエラーが出る
□投稿者/ ステラ -(2008/05/24(Sat) 03:41:33)
    No3689に返信(ステラさんの記事)

    > 桐 ver9-2007 sp4 を windows で使っています。
    >
    訂正です。
    ごめんなさい しばらくPCから離れていたもので、OSは winxp だと思います。


引用返信 [メール受信/OFF] 削除キー/
■3691 / inTopicNo.3)  Re[1]: 同じ処理が2回目だとエラーが出る
□投稿者/ 今村 誠 -(2008/05/24(Sat) 08:36:21)
    2008/05/25(Sun) 08:04:35 編集(投稿者)
    2008/05/25(Sun) 00:11:54 編集(投稿者)

     ステラさんこんにちは、この手続きがどの状態から、どのように呼ばれ
    ているか解らないのでケースを書くことが出来ません。
     表が開いたままだったりすると、2回目は開けないのでエラーになります。
    その処理はステラさんしか解らないのでこちらではどうしようもありません。
    開けない場合どうしたいかをイベントに書いたらいいと思います。
    現状把握が先決です。

    proc 戻り値説明(整数 &I戻り値)
     if (&I戻り値=1)
      確認 "表を開いた。"
     else if (&I戻り値=0)
      確認 "共有違反以外のエラーが発生したため、表を開くことができなかった。"
     else if (&I戻り値=-1)
      確認 "共有違反で表を開くことができない(「リトライ=しない」を指定した場合のみ)。"
     else if (&I戻り値=-2)
      確認 "他の利用者が置換や併合などの処理を実行中(ファイル排他)。"
     end
    end

    proc "データ読み込み"()
     var Int{&I確認,&ItNo[3],&Iok,&I保存}
     メッセージボックス "データ出力" ,"必要なデータは出力してありますか?" \
     , アイコン=!, ボタン指定=5, , &I確認
     ケース開始
      ケース ( &I確認 ≠ 6 )
    *   break /* ここはいらないと思います。 */
      ケース ( &I確認 = 6 )
       表 "読込枠.tbl", 終了状態=&Iok
       条件 (&Iok<>1) call 戻り値説明(&Iok)
       &ItNo[1]=#IS表
       条件 (&Iok<>1) #表ファイル名(&ItNo[1])
       解除 *
       行削除 *
       表整理 余白割合=10
       条件 (#処理条件名検索(11,2,"データ読込")=#U) \
          読み込み条件登録 テキスト,条件名="データ読込","A1.txt"\
          ,区切り=",",空白削除=両方,項目名=する,ファイル名変更=する
    * ここは適宜訂正↑
       読み込み テキスト,条件名="データ読込"
       終了 表 &ItNo[1]
       表 "A1.tbl", 終了状態=&Iok
       条件 (&Iok<>1) call 戻り値説明(&Iok)
       &ItNo[2]=#IS表
       条件 (&Iok<>1) #表ファイル名(&ItNo[2])
       解除 *
       行削除 *
       表整理 余白割合=10
       条件 (#処理条件名検索(11,1,"読込")=#U) \
          読み込み条件登録 表,条件名="読込","読込枠.tbl"\
          ,ファイル名変更=しない,{ 省略  },編集表=する
    * ここは適宜訂正↑
       読み込み 表,条件名="読込"
       メッセージボックス "ファイルの出力" \
         , "「A1.tbl」として、\n \n [パス名]   に保存します。" \
         , アイコン=i, ボタン指定=2, 制御文字展開=する, &I保存
       if ( &I保存=1 )
        表 "A1複写.tbl",終了状態=&Iok
        条件 (&Iok<>1) call 戻り値説明(&Iok)
        &ItNo[3]=#IS表
        条件 (&Iok<>1) #表ファイル名(&ItNo[3])
        解除 *
        行削除 *
        表整理 余白割合=10
        条件 (#処理条件名検索(11,1,"読込")=#U) \
           読み込み条件登録 表,条件名="抜粋読込","A1.tbl"\
           ,ファイル名変更=しない,{ 省略 },編集表=しない
    * ここは適宜訂正↑
        読み込み 表,条件名="抜粋読込"
        終了 表 &ItNo[3]
       else
     メッセージボックス "桐一覧表ダウンロード" \
          ,”ダウンロードできませんでした”
       end
       終了 表 &ItNo[2]
     ケース終了
    手続き定義終了
引用返信 [メール受信/OFF] 削除キー/
■3693 / inTopicNo.4)  Re[1]: 同じ処理が2回目だとエラーが出る
□投稿者/ ONnoji -(2008/05/24(Sat) 12:43:12)
    2008/05/24(Sat) 13:31:03 編集(投稿者)
    2008/05/24(Sat) 12:44:45 編集(投稿者)

    > 同一フォーム内にAと途中までが同じ処理をする手続き”B”があり、Aを実行した後Bも動かそうと思うと、
    > 表1が開かないらしく確認のために入れたエラー(行を指し示して条件コマンドはイベントでは使えない旨)が出てきます。
    > 確認のために一度Aを実行した後再度Aを実行すると、やはり同じエラーがでます。
    > フォームを一度閉じて再度開くとAかBか1回はエラーなく実行できるのですが、フォームを開いたままだと、次は表1が開けないようなのです。
    > なにか手続き定義に不備があるのでしょうか??

    提示された一般手続きの論理構造を行動ダイアグラムで記述すると次のようになります。

    手続き定義開始 データ読み込み( )

     メッセージボックス "データ出力" ,… , &確認

    ┌ケース開始

    ├─ケース ( &確認 ≠6 )

    ←──break

    ├─ケース ( &確認=6 )
    │  表 "読込枠.tbl", 表番号=1, 終了状態=&OK
    │   :
    │   :
    │   :
    │  終了 表 1

    │  表 "A1.tbl", 表番号=2, 終了状態=&OK
    │     ↑
    │※この表2を閉じるコマンドが…どこに有る???
    │   :
    │   :

    │  メッセージボックス "ファイルの出力" , … 制御文字展開=する, &保存
    │ ┌if ( &保存=1 )
    │ │
    │ │ 終了 表 2
    │ │※表2を閉じるコマンドが、ここに有るけれど…???
    │ │
    │ │ 表 "A1複写.tbl", 表番号=3, 終了状態=&OK
    │ │  :
    │ │  :
    │ ├else
    │ │
    │ │ メッセージボックス "桐一覧表ダウンロード" ,”ダウンロードできませんでした”
    │ │
    │ │※あれれ〜!、表2を閉じるコマンドがここに無い!!!
    │ │
    │ └end

    └ケース終了

     終了 表 3
    ※if ( &保存=1 )の時、表3は開かれているけれど???

    手続き定義終了

    ※印の部分を注目してください。

    ・if ( &保存=1 )...else...end のelse処理で表2を閉じ忘れています。
    ・if ( &保存=1 )...else...end のelse処理で表3を開いていません。
引用返信 [メール受信/OFF] 削除キー/
■3697 / inTopicNo.5)  Re[2]: 同じ処理が2回目だとエラーが出る
□投稿者/ ステラ -(2008/05/24(Sat) 22:34:10)
    No3691に返信(今村 誠さんの記事)

    今村さん、返信ありがとうございます。
    >  ステラさんこんにちは、この手続きがどの状態から、どのように呼ばれ
    > ているか解らないのでケースを書くことが出来ません。
    >  表が開いたままだったりすると、2回目は開けないのでエラーになります。
    > その処理はステラさんしか解らないのでこちらではどうしようもありません。


    説明不足でごめんなさい。
    フォームはすべての処理の始めなので、どの表も開いていません。表リンクのないフォームです。

    > 開けない場合どうしたいかをイベントに書いたらいいと思います。
    > 現状把握が先決です。

    初心者で申し訳ありませんが、せっかくの返信についていけていません。

    もすこし、基本の説明をお願いします。(^^;)
    ・変数 &ItNo[3]の役割がわかりません。(配列変数なるものを使ったことがありません。)

    ・ここに書いていただいた手続きは、2度目にボタンを押したときにどんな状態が起こって表が開けていないかを確認するメッセージを表示させるためのものでしょうか。
    (どの表に起こっている状態なのかは&ItNo[3]を確認するのでしょうか?)

    ・call 戻り値説明(&Iok) したときに、&Iok=&I戻り値となりメッセージが出るのでしょうか。(引数を指定した手続きを使ったことがないので・・・・基本的なことですみません。)

    ・なぜ、すべての変数にIが付いているのでしょう?? この手続き内の変数であるマークでしょうか?

    ・メッセージ等で状況を把握して、その状況に応じて解決方法が変わるということなのですか?

引用返信 [メール受信/OFF] 削除キー/
■3698 / inTopicNo.6)  Re[2]: 同じ処理が2回目だとエラーが出る
□投稿者/ ステラ -(2008/05/24(Sat) 22:40:06)
    No3693に返信(ONnojiさんの記事)
    > 2008/05/24(Sat) 13:31:03 編集(投稿者)
    > 2008/05/24(Sat) 12:44:45 編集(投稿者)
    >
    ONnojiさん、返信ありがとうございます。

    >
    > ※印の部分を注目してください。
    >
    > ・if ( &保存=1 )...else...end のelse処理で表2を閉じ忘れています。
    > ・if ( &保存=1 )...else...end のelse処理で表3を開いていません。

    ほんとですね。まったく気がつきませんでした。
    ただ、エラーメッセージのでるイベントファイルの行は、表1が開けていないようでした。直してみて確認してみます。
引用返信 [メール受信/OFF] 削除キー/
■3700 / inTopicNo.7)  エラーメッセージを鵜呑みにしない
□投稿者/ ONnoji -(2008/05/24(Sat) 22:52:16)
    > ただ、エラーメッセージのでるイベントファイルの行は、表1が開けていないようでした。直してみて確認してみます。

    エラーメッセージは、常に正確な情報をフィードバックするわけではありませんよ。

    特に想定外のエラーの場合には、意味不明・トンチンカンな内容になりますよ。

    だから、エラーメッセージの文言は、常に鵜呑みにするのではなく、

    文言がちょっと変だと思ったら、エラーメッセージを拠り所にしないほうがいいですよ。

    なお、質問する場合は、

    ・何行めのコマンドでエラーしたか?

    ・エラーメッセージの番号と正確な内容

    を提示すると良いですよ。

引用返信 [メール受信/OFF] 削除キー/
■3702 / inTopicNo.8)  Re[3]: 同じ処理が2回目だとエラーが出る
□投稿者/ 今村 誠 -(2008/05/24(Sat) 23:30:31)
    ステラさんこんにちは
    >・変数 &ItNo[3]の役割がわかりません。
    >(配列変数なるものを使ったことがありません。)

    変数を3つ書きたくなかったので配列にしました。
    表が3つあるでしょう。
    例えば最初の表を開いて、表引きで他の表も一緒に内部的に開いたとすると
    表の番号を指定して、桐のコマンド

    表 "まるまる",表番号=2,終了状態=&OK

    とすると、もしかしたら2は既に使用中かもしれないので、その表番号を指定
    したことでエラーになります。
     私は、そういう危険は犯さないように、表を開くときはオプション指定の
    表番号は指定しないことにします。
     しかし、表を閉じるときに表のファイル名を書くより開いた表の番号を指定
    した方が簡単なので、表を開いた直後はその表の番号を取得して分かり易い
    ように、配列変数にして番号を格納したわけです。
     もちろん配列でなく 変数宣言 整数{&Tno1,&Tno2,&Tno3}でも良いですけど
    結果は同じ事で、記述文字も増えるので配列にしただけです。

    >・ここに書いていただいた手続きは、2度目にボタンを押したときにどんな状態が
    > 起こって表が開けていないかを確認するメッセージを表示させるためのものでしょうか。
    >(どの表に起こっている状態なのかは&ItNo[3]を確認するのでしょうか?)

    そうですね。エラーが出れば何処でエラーになったかはわかりにくいので
     例えば、手続き 戻り値説明 の最初や最後の行に下記のように記述す
    れば、エラーを起こした表の名前は解りますね。
      確認 #表ファイル名(&I戻り値)
    ところで proc "データ読み込み"()
         proc データ読み込み()
    手続き名の前後を""で括る記述を初めて見ました。
    エラーにはならないのですか?

    >・call 戻り値説明(&Iok) したときに、&Iok=&I戻り値となりメッセージが出るので
    > しょうか。(引数を指定した手続きを使ったことがないので・・・・基本的なことですみません。)

    その通りです。呼び出すときに条件を付けているので、もし開けなかった
    りするとメッセージが表示されます。

    >・なぜ、すべての変数にIが付いているのでしょう??

    これは個人の書き方だけのこだわりで、Iは必要な文字ではありません。
    変数名を見ただけで整数で宣言しているので引数を宣言するときも整数で
    宣言しないといけないと直ぐ解ります。
     手間は少し余分にかかりますが、変数の型がすぐ解り間違いが減るので
    多用しています。

    > この手続き内の変数であるマークでしょうか?

    ステラさんは、最初に全ての変数を宣言されているようですが、手続きが
    増えると管理が大変になります。
     手続きの中で宣言した変数は自動変数になり、手続きを抜けると、メモ
    リーから削除されます。
     置換などの場合、固有の変数か共通変数でないと桐が受け付けませんが
    ファイル名の指定や、普通の場面で、↑上記の変数を使う必要はないので
    なるべく自動変数を使い、手続きが終わったら全て初期化するようにして
    います。

    >・メッセージ等で状況を把握して、その状況に応じて解決方法が変わると
    > いうことなのですか?

    例えば、他の人が使用中の場合などはそれなりのエラーが出るので対処仕方
    のヒントにはなると思います。
     表ファイルそのものがない場合の保険として、#ファイルサイズ( str )
    関数を表コマンドの前に記述して、表そのものがない場合の対処法も書いた
    方が良いと思います。
     ONnojiさんご指摘の部分は私の記述では全て組み込まれているので、その
    部分ではエラーにはならないと思います。
引用返信 [メール受信/OFF] 削除キー/
■3703 / inTopicNo.9)  エラーメッセージを鵜呑みにしない:ほんとうですね!!
□投稿者/ ステラ -(2008/05/24(Sat) 23:32:29)
    ONnojiさん、表2、表3の矛盾点を直してみました。
    何度でも動作しました!!

    >>ただ、エラーメッセージのでるイベントファイルの行は、表1が開けていないようでした。

    エラー行は、表1を開けた後の 

    条件 ( &OK <>1 ) 実行終了 保存, 表題="読込", メッセージ=”読込枠.tblは開けませんでした。”

    で、エラーメッセージは、
    「条件 ( &OK <>1 ) 実行終了 保存,・・・はイベントでは使えないコマンドです」といった内容でしたので、
    すっかり表1が開けなくて、&OK=1にならなかったのだと思いこんでしまって、
    表2、表3の矛盾にも気付きませんでした。

    > エラーメッセージは、常に正確な情報をフィードバックするわけではありませんよ。
    >
    > 特に想定外のエラーの場合には、意味不明・トンチンカンな内容になりますよ。
    >
    > だから、エラーメッセージの文言は、常に鵜呑みにするのではなく、
    >
    > 文言がちょっと変だと思ったら、エラーメッセージを拠り所にしないほうがいいですよ。

    ONnojiさんの言葉、肝に命じました。

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

解決済み!
引用返信 [メール受信/OFF] 削除キー/
■3704 / inTopicNo.10)  早速の返信ありがとうございます。
□投稿者/ ステラ -(2008/05/24(Sat) 23:53:22)
    いろいろ教えていただきありがとうございます。

    >  ONnojiさんご指摘の部分は私の記述では全て組み込まれているので、その
    > 部分ではエラーにはならないと思います。

    このことは気づいていましたが、提示していただいた手続きで分からないことだらけだったので、質問がそれてしまいました。

    プログラムの基礎的な考え方を知らずにとりあえず必要に迫られてイベント等を書いているので、とても勉強になりました。
    (知っていることとオンラインヘルプを見て理解できる範囲のみで処理を書いている恐ろしい状態です。)

    実は表を開くファイル名の質問も、当初、パス名からすべてを手続き内に書いていたのですが、やむなくネットワーク外のpcでテストをする際に不都合ができて急きょ変数を使用することとしたため発生しました。

    メンテナンスや環境が変わったとき、処理がうまくいかなかった場合も想定しなければならないのですね。

    また、情けない質問をすることかと思いますがよろしくお願いします。


引用返信 [メール受信/OFF] 削除キー/
■3705 / inTopicNo.11)  忘れ物
□投稿者/ ステラ -(2008/05/25(Sun) 00:19:05)

    > ところで proc "データ読み込み"()
    >      proc データ読み込み()
    > 手続き名の前後を""で括る記述を初めて見ました。
    > エラーにはならないのですか?
    >

    エラーにはなりません。そのまま動いていますが・・・
    こちらこそ目から鱗です。""がなくてもいいのですか?
    コマンドボタンの手続き実行に指定する時も、ひょっとしていらない??
    (あっ!! ""付きで記述してあるので、機能パラメータリストにも""が必要になるのかな??)

    一括処理等のリファレンスで<>の付いているところには""がいるのだと思い込んでいましたが、必要ないのですか?

    どんどん質問がそれていって恐縮です。(^^;)

引用返信 [メール受信/OFF] 削除キー/
■3706 / inTopicNo.12)  Re[5]: 忘れ物
□投稿者/ 今村 誠 -(2008/05/25(Sun) 07:18:45)
    ステラさんこんにちは
    >>ところで proc "データ読み込み"()
    >>     proc データ読み込み()
    >>手続き名の前後を""で括る記述を初めて見ました。
    >>エラーにはならないのですか?
    > エラーにはなりません。そのまま動いていますが・・・
    桐のマニュアルにも括ってないので、名札名は命名規則で文字列と
    決まっているので必要がないのでしょう。
    あえて実験するなら
    call "2teisei"()
    proc "2teisei"()
    end
    等としてみてエラーになるなら括る必要はないですね。
    エラーにならないなら、数字が先頭でも括ればokとなりますね。
    > (あっ!! ""付きで記述してあるので、機能パラメータリストにも""が
    > 必要になるのかな??)
    そこも""を付けても付けなくても同じ動作をしますね。

    > 一括処理等のリファレンスで<>の付いているところには""がいるのだと
    > 思い込んでいましたが、必要ないのですか?

    ヘルプの以下の部分が参考になると思います。
    -【一括処理】一括処理・履歴・イベント
     -入門
      -【一括処理】一括処理の定義と実行
       【一括処理】一括処理の書き方………ここ

    -データと式
     -データ
      -計算式
        文字列の計算 ………ここ
       -日時の計算
        -日時値の書き方………ここ
    ヘルプの
    手続き定義開始の説明の下端のノートの所に
    1)手続き名の先頭には数字はだめよとか 「proc 1訂正()」
    2)手続き名の途中に空白はだめよとか  「proc あ っ()」
    3)コマンドと同じ名前はだめよ 例えば 「proc 読み込み()」
引用返信 [メール受信/OFF] 削除キー/
■3708 / inTopicNo.13)  Re[6]: 忘れ物
□投稿者/ ステラ -(2008/05/26(Mon) 00:13:40)
    今村さん それた質問にそのままお付き合いありがとうございます。

    > 桐のマニュアルにも括ってないので、名札名は命名規則で文字列と
    > 決まっているので必要がないのでしょう。
    > あえて実験するなら
    > call "2teisei"()
    > proc "2teisei"()
    > end
    > 等としてみてエラーになるなら括る必要はないですね。
    > エラーにならないなら、数字が先頭でも括ればokとなりますね。
    >>(あっ!! ""付きで記述してあるので、機能パラメータリストにも""が
    >>必要になるのかな??)
    > そこも""を付けても付けなくても同じ動作をしますね。

    そうなんですね。初めてイベントなるものを使い始めた時に、試行錯誤でやっていてなんとなくこれなら動くらしいとぐらいにしか認識していませんでした。

    教えていただいたヘルプなど参考に、また勉強してみます。
    ありがとうございました。


解決済み!
引用返信 [メール受信/OFF] 削除キー/



トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

Mode/  Pass/

HOME HELP 新規作成 新着記事 トピック表示 ファイル一覧 検索 過去ログ

- Child Tree -
- Antispam Version -