ホーム   フォーラム   FAQ
 
メインメニュー
ログイン
ユーザー名:

パスワード:


パスワード紛失

データの中に*、範囲絞りについて

  • このフォーラムに新しいトピックを立てることはできません
  • このフォーラムではゲスト投稿が禁止されています
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2016-10-4 14:50 | 最終変更
nkmt  長老   投稿数: 1668
dbMAGIC V8 で CndRange関数、ビュー再表示などが登場し大変便利になりましたね。
その後のバージョンで、ブロックELSE文や
ブロックWHILEの登場で、子タスクぐるぐるしなくて済むようになるなど
Magicは徐々に進化し、それになんとかついていけるので
有り難いです。

照会モード/修正モード切替などのイベント実行系も
メインPGにユーザー自作関数で書けるようになりuniPaas以降
だったか忘れましたが便利ですね。

(私は案件少ないですが)Android、iOSでも動きますしGoodですね。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2016-10-4 13:28
fjksudou  長老   投稿数: 180
なるほど

ユーザ定義関数を使えば、タスクを下げる必要はないですね。
範囲式に関数名と変数を入れれば一発ですね。
しかも高速で。

V8信者の私には、ユーザ定義関数について、なかなかとっつきにくかったのですが、利点を見つけ理解できました。
ありがとうございました。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2016-10-4 10:08 | 最終変更
nkmt  長老   投稿数: 1668
fjksudouさん、こんにちは。

RepStr( 変数, '*', '¥*' ) ですがちゃんと置換できました。
何か別件で勘違いをしてしまったようです。
失礼しました。

リンク位置付けは、そのまま ABCD* でOK

メインソースの範囲絞り、リンク位置付けは ABCD¥* へ
変換した分で、範囲絞りや位置付けを行う事にします。

メインPGに、
HANI_SIBORI_SHCD_CHG(変数) といった具合の
自作関数を用意して、それをいろんな所で使うように
したいと思います。

カンマ、スラッシュ、コロン、ダブルコーテーション
エクスクラメーション、アスタリスク、アンパサンド
クエスチョンなど使って欲しくないですね。

今までほとんど考えた事もありませんでした。

商品マスタをメインソースにして、
子タスク側で、売上明細データを商品コード範囲絞りするような
処理なども対応が必要になるので気を使いますね。

商品マスタ
それにぶら下がる 商品コード+日付がインデックスになった定価情報
のような物が有ったとして、
ABCD¥* で絞って削除すればいい所を
ABCD* で絞って削除すると、大変な事になりますね。

プログラムの修正漏れが生じるととんでもない事になりそうなので
商品コード上の*や?は許さないようにしたいと思います。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2016-10-4 9:01
fjksudou  長老   投稿数: 180
nkmtさん
こんにちは

追加で確認させてください。
RepStr( 変数, '*', '¥*' ) は不可能なんですか?
確認はしていませんが、
RepStr( 変数, '*', '¥¥*' ) か、
RepStr( 変数, '¥*', '¥¥*' )ではどうですか?

Asciichrで解決できたようですが、
時間があれば確認してみてください。


確かに文字型のコード系についての入力は、予想外の入力がある可能性があり、システムの不具合を招くので、システム文字については入力制限エラー処理が必要です。特にカンマやスラッシュが。
今回のようにどうしても入力したい場合がありますので、置換用の共通プログラムを作成し、そこで処理すれば容易に記述できるのではないでしょうか?
一度作成してしまえば、その他の文字も、共通プログラムに1行追加するだけなので簡単ですよ。
但し、レコードメインでのリンクはできませんね。置換する共通プログラムをコールするため、タスクを一つ落とす必要があります。
SQL文ならレコードメイン一括でいけそうですね。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2016-10-4 5:22 | 最終変更
nkmt  長老   投稿数: 1668
fjksudou様、Tanda様

いつもお世話になっております。レスや実験ありがとうございます。

一つ訂正をさせて頂きます。

 ABCD1
 ABCD2
 ABCDX
 ABCD* というデータが有った時、並び順は ABC* が1番先頭に来ておりました。

 ABCD*
 ABCD1
 ABCD2
 ABCDX の並びが正解でした。

 よって、それをメインソースに指定して ABC* で位置付けた場合
 Tandaさんの言われる通り、ABC* へ位置付きました。

 ABCD* 〜 ABCD* で範囲絞りを行うと、ワイルドカード扱いとなり
 上記4件とも該当になりました。(今回は、それは不要なのですが。)


fjksudou様

 範囲指定に'ABCD¥*'で1件該当になります。

 そこで、いい方法を思いつきました。
 RepStr( 変数, '*', '¥*' ) は不可能なので
 RepStr( R, ASCIIChr(42), '¥' & ASCIIChr(42) )

 を指定する事にしました。無事解決です。
 但し、あらゆる処理に埋め込み忘れないようにしないといけませんけど。
 多用しているメインPGへのユーザー自作関数化で工数を稼ぎます。

 1文字ワイルドカード ? は アスキーコード63ですが、今回お客様の
 商品コードに ? は含まれていないようですので埋め込みません。

今までやってこなかったのですが、英数字登録可のコード系
の物は、登録時に*、?は受け付けないようにした方が
無難なのでしょうね。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2016-10-3 17:47
Tanda  長老   投稿数: 2151
nkmtさん、

> このデータをメインソースに指定して
> 位置付け式に ABCD* を指定すると
> ABCD* には位置付かず
> ABCD1 に位置付く。

上記ですが、xpa 2.5ではどうなりますか?
私のところでは正常のようです。

投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2016-10-3 17:26 | 最終変更
fjksudou  長老   投稿数: 180
nkmtさん
こんにちは

メインソースを1件該当にさせたいのであれば、
範囲指定に'ABCD¥*'で1件該当になりませんか?
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 .3 .4 .5 .6 | 投稿日時 2016-10-3 10:54
nkmt  長老   投稿数: 1668
商品マスタの商品コードに
ABCD1
ABCD2
ABCDX
ABCD*
と登録してあったとします。

照会リンクの位置付けで、ABCD* と指定すると、正常に位置付け可能ですが、

このデータをメインソースに指定して
位置付け式に ABCD* を指定すると
ABCD* には位置付かず
ABCD1 に位置付く。

同じくこのデータをメインソースに指定して
範囲指定に ABCD* 〜ABCD* を指定すると、
ABCD* 1件が該当にならずに
上記4件とも該当になる。

* をワイルドカードとして扱うからだと思うのですが、
お客様で元々存在している商品コードでして・・・。

1番簡単な解決方法は、ABCD* のコードを変更する事だとは思いますが、
もう一つの解決方法は、範囲絞りなどの時に ABCD¥* で絞る方法も
有ると思いますが、REPSTR関数で*の部分を¥*にする事も出来ませんので
1文字1文字ブロックWhileで*を探して、¥を挟んで文字変換かけるとか
他にもっといい方法はございませんでしょうか?
投票数:0 平均点:0.00

  条件検索へ


Copyright (C) Magic Software Japan K.K. All Rights Reserved.
個人情報保護方針 会員規約