過去の桐井戸端BBS (桐ver.9)
29830 あるフォームからコマンドボタンで別のフォームに行ったとき最初の行と同じ行に行きたい 平川淳一 2005/05/03-11:10
お世話になります。
初心者です。

A.WFM(A.VIWをみる)につくったA.コマンドボタンでB.WFM(B.VIWをみる)に行くのですが、
A.WFMのときの行番号と同じ行番号に行きたいので、下のようなコマンドを作ってみましたが、
1行目にいくだけでうまくいきません。
A.WFMにコマンドをつくり、A.WFMをB.WFMに切替てA.VIWのときの処理行番号に
B.VIWの処理行をすることは出来ないのでしょうか?



Aコマンドボタン(A.WFMにつくった)は
  機能名  機能パラメータリスト
 −−−−−−−−−−−−−−−
  なし   SET(&No,[No])  
開く   "B.WFM”
ジャンプ  &No
  閉じる  "A.WFM”

なお、  
コマンドボタン(A.WFMにつくった)は
  機能名  機能パラメータリスト
 −−−−−−−−−−−−−−−
  なし   SET(&No,[No])  
ジャンプ  &No+5

では、A.WFMの中ではちゃんと5行進んでいます。
([No]はA.VIWのキー項目でカウンター 
 &Noは共通変数で数値      )
29831 Re:フォーム切替時の処理行の操作について syozo 2005/05/03-12:13
記事番号29830へのコメント
平川淳一さん

SET(&No,[No]) →  #SETQ(&No,[No]) に訂正してみてください。

29833 Re:フォーム切替時の処理行の操作について 平川淳一 2005/05/03-15:45
記事番号29831へのコメント
syozoさん

> SET(&No,[No]) →  #SETQ(&No,[No]) に訂正してみてください。
>
syozoさんへ
早速の投稿ありがとうございました。

SET(&No,[No]) は書き間違いで、SET("No",[No])としていました。
変数を見てみますと&Noの値は行番号の値になっていますが、
その行番号のところに行きません。

syozoさんのかかれた#SETQ(&No,[No]) にしても同じで、行きません。

リレーショナルデータベースでVIWファイルをいくつも作り、同じ処理行になるようにするのに、
みなさんはどうされているのでしょうか?
毎回手動で、検索などで同じ処理行にもっていくなどないと思いますが。

宜しくご指導お願いいたします。

29834 結合表は1つで済ませるものです 佐田 守弘 2005/05/03-16:49
記事番号29833へのコメント
平川淳一さん
●結合表の作り方
まず、
 >リレーショナルデータベースでVIWファイルをいくつも作り、同じ処理行に
 >なるようにするのに、みなさんはどうされているのでしょうか?
について説明します。

先に確認いたしますが、同じ行番号に飛びたいとの事から、それぞれの結合表(viw)の対象表は、
同じ表の様に思えるのですが、その通りでしょうか。
A.viwは今年度の売上、B.viwは昨年度の売上という様に同じ形の表でも内容が
別の表であると、同じ行番号にジャンプする意味がないと思うので。

さて、本質的な答えは、既に、#29789「フォ−ムの切替について-平川淳一」
へのコメントとして、#29802「原因は対象表が異なるためです-佐田 守弘」で書いておいた通りです。
どうやら上記コメントは理解して貰えなかったようなので、再度ポイントを書きます。

主となる結合対象表が同じ場合には、使用するであろう表とその項目全てについて結合した結合表を作っておくのがポイントです。

結合表を開く(結合を実行する意味)場合には、表を開くのと違って、
結合処理を行うのに時間がかかります。おそらく今はその時間が無視できているのかと思いますが、
表のレコード数が増えて来れば、無視できなくなります。

ですから、結合は1回で済ませ、異なるフォームで表示と編集をするなら、
フォームの切替えで行えば良いのです。
現在の様にAフォームにはA.viw、BフォームにはB.viwという様に、フォーム毎に
異なる結合表を割り当て、「開く」「閉じる」機能で切替える方法では、
その度に結合を実行する処理が行われるので、大変に非効率的な方法です。

ですから結合は1回だけ行い、フォームの選択でフォームだけを切替える方法が効率的です。
これは既に#29802「原因は対象表が異なるためです-佐田 守弘」にて述べた通りです。

●指定行へのジャンプ
上記の方法を行えば、指定行へのジャンプの問題は本質的になくなるはずです。

さて、質問への直接的な内容に関する事ですが、
[No]という項目に行番号的なデータを持ち、この番号を取り込んだ後に、
>ジャンプ  &No
でジャンプさせている様ですね。

この処理には本質的な方法の間違いがあります。ただしそれがうまくゆかない原因かどうかは分りませんが、
関連しているかも知れません。

[No]は、いずれかの表に作ってあり、多分、連番号を振ってある項目だとは思いますが、行番号そのものではありません。
その表の基本状態では、[No]の値と行番号が一致しているかも知れませんが、結合表を開いた時には、一般論として
[No]の値と行番号が必ずしも一致するとは限りません。
一致するのは、この項目について全抽出が行われ、かつ、この項目で並べ替えている場合です。

もし、行番号を取得するならば、「#行番号」関数を使って下さい。
また、[No]の値が同じ行にジャンプさせるなら、ジャンプではなく検索で目的レコードに移動させるのが普通です。

佐田守弘(KS-00119)
29835 Re:フォーム切替時の処理行の操作について うにん 2005/05/03-19:55
記事番号29830へのコメント
正しいであろう方法は佐田さんが書いてますが、

>同じ行番号に行きたいので、下のようなコマンドを作ってみましたが、
>1行目にいくだけでうまくいきません。

>Aコマンドボタン(A.WFMにつくった)は
>  機能名  機能パラメータリスト
> −−−−−−−−−−−−−−−
>  なし   SET(&No,[No])  
> 開く   "B.WFM”
> ジャンプ  &No
>  閉じる  "A.WFM”

こういう書き方が可能だとして、これはどう見てもA.WFMでジャンプしていますから、Bの処理行は変わらないでしょう。
B.WFMにジャンプするコマンドボタンをおいて、それを呼び出せれば希望する動作が可能かもしれません。

29836 Re:結合表は1つで済ませるものです 平川淳一 2005/05/03-22:14
記事番号29834へのコメント
>先に確認いたしますが、同じ行番号に飛びたいとの事から、それぞれの結合表
(viw)
>の対象表は、同じ表の様に思えるのですが、その通りでしょうか。

はい、同じ表です。

>主となる結合対象表が同じ場合には、使用するであろう表とその項目全てに
>ついて結合した結合表を作っておくのがポイントです。

1レコードのデータが4000文字を越えるので、VIWで分けています。
VIWも1レコードは4000文字以内と思って、分けています。


>[No]という項目に行番号的なデータを持ち、この番号を取り込んだ後に、
> >ジャンプ  &No
>でジャンプさせている様ですね。
>この処理には本質的な方法の間違いがあります。ただしそれがうまくゆかない原因
>かどうかは分りませんが、関連しているかも知れません。
>[No]は、いずれかの表に作ってあり、多分、連番号を振ってある項目だとは思い
>ますが、行番号そのものではありません。その表の基本状態では、[No]の値と
>行番号が一致しているかも知れませんが、結合表を開いた時には、一般論として
>[No]の値と行番号が必ずしも一致するとは限りません。
>一致するのは、この項目について全抽出が行われ、かつ、この項目で並べ替えて
>いる場合です。


[No]を行番号といったのは正確ではありませんでした。
A.VIWの[No]と同じ、B.VIWの[No]の行に行きたいのです。
検索コマンドでやってもだめでした。

VIWをわければ、B.WFMに行った後、コマンドボタンでの検索コマンドなどで
処理しなければだめなのでしょうかね。

29837 Re:フォーム切替時の処理行の操作について 平川淳一 2005/05/03-22:35
記事番号29835へのコメント
早速の投稿ありがとうございます。
「結合表は1つで済ませるもの」と佐田さんから教えていただきました。
しかし、1レコード4000文字を越えるので、分けざるをえません。
うにんさんのいわれるように、B.WFMに行ってコマンドボタンで検索や、
ジャンプで行かなければならないようですね。

29838 Re:結合表は1つで済ませるものです 平川淳一 2005/05/03-23:32
記事番号29836へのコメント
>>の対象表は、同じ表の様に思えるのですが、その通りでしょうか。
>
>はい、同じ表です。

厳密にいえば、A.TBLが1レコード4000文字以上になるので
A-1.TBL、A-2.TBL、A-3.TBLの様に分けリレ−ショナルにしています。
それを、いくつかのVIW(たとえばA.VIW,B.VIW)で結合しています。

29839 実行コマンド[開始時] ONnoji 2005/05/04-19:45
記事番号29837へのコメント
平川淳一さん

>うにんさんのいわれるように、B.WFMに行ってコマンドボタンで検索や、
>ジャンプで行かなければならないようですね。

平川さん、こんにちは。

うにんさん横レス失礼いたします。

A.wfm の現在行の行番号を変数に代入して、
B.wfm を開いて、
A.wfm自身を閉じて、
B.wfm を変数値の行番号へジャンプさせるには、
次のように試されたらいかがでしょうか??


(1)A.wfmのコマンドボタン

   機能名      機能パラメータリスト
[1]なし       #SET("選択件数",[No])
[2]開く       "B.wfm”
[3]閉じる
[4]なし

※"選択件数" は桐の組み込み変数:数値型
※他の数値型変数でもOK
※組み込み変数を利用するのは変数が無くならないための用心です。

※オープン
※(1)他のフォームを開き、自分のフォームを閉じる方法
※<開く閉じる型>
※http://www.geocities.jp/siliconvalley_bay_7565/open.htm


(2)B.wfm にコマンドボタンを作ります。

仮にオブジェクト名を cmdStartup とします。

 コマンドボタンの設定は次のようにします。  

   機能名      機能パラメータリスト
[1]ジャンプ     &選択件数
[2]なし
[3]なし
[4]なし

これで、B.wfm を開いて[コマンドボタン:cmdStartup]実行すれば、
&選択件数の値の行へジャンプします。

しかし、毎回 B.wfmのコマンドボタンを実行するのは面倒なので以下のようにします。

(3)フォームの[オブジェクトの属性]の[オプション]タブの、
  実行コマンド[開始時]の[▼]ボタンを押して、
  コマンドボタン名:cmdStartup を選びます。

※コマンドボタン名:cmdStartup をワークスペースに配置しても動作します。

※詳細プロパティを使用しないと[オプション]タブは表示されないので注意してください。
※「オブジェクトの属性にタブが表示されない場合には」
※http://www.geocities.jp/siliconvalley_bay_7565/navi.htm


29840 Re:実行コマンド[開始時] 平川淳一 2005/05/04-23:40
記事番号29839へのコメント
ONnojiさんありがとうございます。
そのフォームに入るとき自動的にコマンドボタンを実行させジャンプさせる方法を
具体的に教えていただき、ありがとうございました。

なお、フォームの定義画面で編集対象表を設定するところの「表の操作」の
ところに
   「開始条件種別」(たとえば検索) 「条件名」
を指定すると、フォームを開くと同時に実行するとあるのを見つけました。
ただし、条件名のその条件をどこに書けばよいのか、ヘルプを読んだのですが
わかりませんでした。

初心者で、また、私の回りに桐に詳しい人がいなくて教えてもらえなっかたのですが、
このBBSを見つけたいへんお世話になっています。
これからも、ご指導を宜しくお願いします。

29841 Re:フォーム切替時の処理行の操作について 緒方 2005/05/04-23:54
記事番号29830へのコメント
平川淳一さん

私は下記のようにして処理しています
「A.wfm」の設定:コマンドボタンの機能名欄に次を登録する
機能名  機能パラメータリスト
 なし  #代入(&件数、[no])
 開く ”B.wfm”

「B.wfm」で編集する表の設定:絞り込み条件を登録する。検索条件は、
[no]の欄に変数名&件数と指定する。

「B.wfm」の設定:表の操作欄に絞り込み条件を指定する。
手順は、フォームの属性ダイアログ→ 編集対照表タブ →表の操作ボタン→開
始条件種別1欄→「絞り込み」→条件名1欄→表に登録した絞り込み条件名を
指定する→okボタンです
はずしていたらすみません
29842 Re:フォーム切替時の処理行の操作について 平川淳一 2005/05/05-01:26
記事番号29841へのコメント
緒方さんありがとうございます。

>私は下記のようにして処理しています
>「A.wfm」の設定:コマンドボタンの機能名欄に次を登録する
>機能名  機能パラメータリスト
> なし  #代入(&件数、[no])
> 開く ”B.wfm”
>
>「B.wfm」で編集する表の設定:絞り込み条件を登録する。検索条件は、
>[no]の欄に変数名&件数と指定する。
>
>「B.wfm」の設定:表の操作欄に絞り込み条件を指定する。
>手順は、フォームの属性ダイアログ→ 編集対照表タブ →表の操作ボタン→開
>始条件種別1欄→「絞り込み」→条件名1欄→表に登録した絞り込み条件名を
>指定する→okボタンです
>はずしていたらすみません

ドンピシャです。(ずばり的中です。)
ただし、私は絞り込みでなく検索でやりました。

これで、おなじ表を「フォームの選択」でフォームを切り替えている感覚でたいへん快適です。
これからも、ご指導宜しくお願いします。

29844 【解説】1レコードが4000文字を越える時 佐田 守弘 2005/05/05-10:37
記事番号29838へのコメント
平川淳一 さん
 >厳密にいえば、A.TBLが1レコード4000文字以上になるので
 >A-1.TBL、A-2.TBL、A-3.TBLの様に分けリレ−ショナルにしています。
状況は分りました。1レコード分のデータが4000文字を越えてしまうのであれば、
これは致し方ない話ですね。
データの内容によっては、あり得ない事ではないので、その様な場合には
どの様に対処すべきかを考えておく事も必要かと思います。
さて、その対処の仕方ですが、横並び(1レコードにつなぐ)ができないのであれば、
縦並び(複数行に分ける)か、上に段積み(表を分ける)のいずれかになるでしょう。
そしてどちらが良いかは、どの様な内容のデータなのかによっても考える必要があります。
今回の場合、どの様なデータかの具体的なイメージが分らないので、
ここでは、いくつかの例で考えてみる事にします。

●長文の項目がある
ビジネスマンが作る書類で言えば、出張報告書などの報告書類には、
[本文]あるいは[記事]の様な部分が長文になる可能性があります。
その他、特許の明細書や裁判の判例集をDB化する場合でも、同様の課題が出て来ます。
この様なデータの場合、たとえば[記事]の様な、長文になる項目を複数行に分けて記録する方法があります。
この場合[記事]以外の項目については、1件1レコードの表(A表)で持ち、
[記事]の項目は別の表(B表)に長さに応じて複数行に分けた形で持つ方が良いかと思います。
・入力
1画面で表示・編集できる文字数から考えてみると、大きい文字で表示するなら
40文字×25行(1,000文字)、詰めても50文字×30行(1,500文字)
といった所ではないでしょうか。
そこで1レコードの文字数をこのあたりに制限し、越えそうになったら
強制改行文字の位置で区切って、次のレコードに繰り越す処理を行います。
・フォーム
この場合のフォームは、メイン&サブフォームで対応できます。つまり、
A表をメインフォームとし、B表をサブフォームに置く形になります。
メインフォーム部分が大きくサブフォームの大きさが取れない場合には、
更にその上にB表のサブフォームを大きく被せ、表示・非表示の切替えで
記事の部分を大きく表示するといった方法もできます。
・レポート
複合レポートで表形式オブジェクトを作れば、A表のデータの後ろに長文の
B表の文章を外見的に連続して印刷することが可能です。
B表の入力時に改行位置で区切るのがポイントで、印刷結果はあたかも
つながっている様に見せられます。

●繰り返しがない多数の項目の合計で4,000文字を越える
ちょうど良い例が思い浮かびませんが、ある商品の多面的な評価をDB化するといったケースを考えてみます。
車でいえば、外観、乗り心地といった多数の項目についての評価記事が横並びになる様な表です。
各項目の記載文字数はそれ程長くなくても、合計すると4,000文字を越えるケースです。
この様なケースでは、原質問に書かれている通り、横並びの項目を適当な場所で区切って、
複数の表に分けるといった方法も考え得る方法です。
但し状況(データの内容)によっては、評価項目毎に1レコードとするといった方法も考えられないではありません。
・フォーム
結合表で処理する以外に、このケースでもメイン&サブフォーム形式で
表示編集する方法も考えられると思います。この場合にもメインとなる
Aフォームの上にBとCのフォームを被せておき、表示非表示の切替えで
あたかもフォームを切替えたかの様に見せられると思います。
ただし、3つの表に分けざるを得ない状況からすると、1つのフォームで
表全体を表示できるのかといった課題があり、場合によっては、
1つの表の表示部分毎に複数のサブフォームを切替えるといった事も考えなければならない様なケースも考えられます。

●繰り返し性のある多数の項目の場合
たとえば学校での成績や内申書等の評価のDBであれば、学年、学期毎の
評価項目の繰り返しになります。繰り返し性があれば、その繰り返しを使って、
複数レコードに分けて記録する方法が成り立ちます。
この場合にも、生徒固有の情報(いわゆる個人情報部分)と、学期毎の評価とは別の表で持ち、
メイン&サブフォーム形式のフォームでの入力ができると思います。

佐田守弘(KS-00119)
29857 Re:【解説】1レコードが4000文字を越える時 平川淳一 2005/05/07-17:18
記事番号29844へのコメント
佐田さん

TBLファイル 12個
VIWファイル  3個
WFMファイル 20個
RPTファイル 10個
で、
VIWの項目の合計が700項目
そのうちの2項目が1項目に約1000文字の文章が入ります。

ゴールデンウィークは10連休でしたが、その大部分を桐のデーターベース作成で過ごしています。
あと、レポートを10個ほど作成しなければなりません。
連休中に完成したかったのですが、のこりました。

しかし、みなさんのご指導のおかげでめどがつきました。
ありがとうございました。
これからもご指導を、宜しくお願いします。

戻る