Q174-1:@登録されているデータが、必ず1か2か3のものがあります。これを表示させる時に、1であればAA、2であればBB、3であればCCといった文字に変換させるにはどうすれば良いでしょうか。また、変換後に3つの情報をプルダウンリスト表示するには、どうすれば良いでしょうか。
A日付の情報について、MZ画面上に表示される情報が「2011-03-04 00:00:00.0」となります。「2012/03/04」との書式に変更するには、どうすれば良いでしょうか。
A174-1:
@ まず、SQLServer内に、1はAA、2はBBという対応を表すテーブルがあるかどうかで、最初の要素の設定方法等、少し違ってきます。対応させる数が多ければ対応表が必要ですし、3つばかりであれば必要ないかと推測します。もし対応表があるようでしたら、お知らせ下さい。
コンポーネントは[コンボボックス]を使用します。
考え方としては、条件を「数字は必ず1から始まり、間に抜けが無い」とすると、数字はデータの並んでいる位置を示すので、メソッド「指定位置の項目を選択する(int)」で[コンボボックス]の要素を選択できます。
但し、MZPlatformに限らず一般的なプログラミング言語では、位置番号など必ず「0」から始まります。そのため[任意精度整数格納変数]を使って「値を1減らし」調整します。
<作成手順>
1)[コンボボックス]を右クリック>[要素]>[一括追加...]で要素を「3」追加します。
2)[コンボボックス]を右クリック>[要素]>[編集...]で表示される「要素の編集画面」上の文字(<コンボボックス0>)を右クリック、「テキスト...」から「テキストの入力」をします。
3)現在、置換えたい箇所は「テキストを設定する(String)」になっているかと思います。
ここを[任意精度整数格納変数]に変更し、[数値を文字列で設定する(String)」とします。引数は現在と同じ設定にして下さい。
4)[任意精度整数格納変数]「値を1減らす()」の処理を、その次に追加します。
5)[コンボボックス]「指定位置の項目を選択する(int)」も追加します。
<引数>取得方法 :メソッド戻り値
コンポーネント:任意精度整数格納変数
メソッド/値 :int値を取得する
ご参考までに簡単なサンプルファイルを掲載致します。
関連ファイル:コンボボックス位置選択.mzax
A 処理の方法は、該当の日付データの型がSQLServer内のテーブルでがDatetimeなどの日付型となっているか、TextやVarcharなどの文字列型になっているかによって大きく違ってきます。
今回は日時の情報を文字列としてテーブルに格納なさっているのではと推測しています。もしデータ型が日付型になっていましたら、お知らせ下さい。
MZPlatform上で日付型のデータを無理に文字列として見ると『Wed Dec 05 10:20:03 JST 2012』といった形式に見える場合があります。
考え方としては、
・そのまま文字列として扱い[文字列格納変数]に入れ、置換や部分文字列取得で、必要部分のみ取出す。
・日付型データとして扱えるよう[カレンダー]コンポーネントに入れ、[日付入力フィールド]で表示する。
ことが考えられます。
現在ご必要の処理だけでしたら、特に日付型に変換する必要はないかと思います。
ご参考までに簡単なサンプルファイルを掲載致します。
コメントを付けてありますので、どうぞご覧下さい。
ご不明な点、ご要望等ございましたら、どうぞ再度ご連絡下さい。
よろしくお願い申し上げます。
関連ファイル:日付型変換例.mzax
Q174-2:
@ですが、対応表はなく、ご教示頂いた方法で解決致しました。他にラジオボタンも説明頂き、ありがとうございます。
Aですが、smalldateの日付型でした。お手数ですが、この場合はどうでしょうか。
A174-2:
smalldatetime型は年月日時分までのデータを持ち、秒数部分は「0」のSQLServer特有のデータ型です。 SQLServer2005まではdatetimeかsmalldatetimeか2者択一でしたが、SQLServer2008以降は新設された別な型を使うことを推奨されていて、smalldatetimeは一般的な型とは言えず、注意が必要です。
ただし、現在の[データベースアクセス]を使用して検索結果を[テーブル格納変数]に入れ、データを取出し、文字列として表示するという手順では問題は起こりにくいと思います。
[データベースアクセス]の検索結果を直接、画面構成部品の[テーブル]に設定したとき、データ型の問題からうまく表示されないことも考えられますが、これは回避方法がございます。
改めて問題点を整理し、週明けになってしまいますが、ご連絡致します。
現状では問題ございませんので、どうぞこのままお進め下さい。
Q174-3:
Micorosoft SQL Serverデータベースに対する更新につきまして、ご回答をお願い致します。先日教えて頂いた方法により、下記のようなUPDATE文にて、入力した文字列を文字列格納変数で一つずつ変換して登録しておりますが、コンボボックスが絡む下記の状況で、どのように作成すれば良いか、ご教示下さい。
UPDATE TRN_ORDER_H SET , UP_DATE = GETDATE(), CONTACT_FLG = AAAA, MAKE_DATE = 'BBBB',
VERSION = CCCC, USE_FLG = DDDD, INST_DATE = 'EEEE', ……
まず、SELECT文で情報を呼び出し、コンボボックスで下記のように表示するよう作成しています。
データが1の場合:文字列AAAを表示
データが2の場合:文字列BBBを表示
データが3の場合:文字列CCCを表示
これを、文字列がAAAの場合は「1」でデータベースに登録、
これを、文字列がBBBの場合は「2」でデータベースに登録、
これを、文字列がCCCの場合は「3」でデータベースに登録するようにするには、
どうすれば良いでしょうか。
A174-3:
> これを、文字列がAAAの場合は「1」でデータベースに登録、
>これを、文字列がBBBの場合は「2」でデータベースに登録、
>これを、文字列がCCCの場合は「3」でデータベースに登録
AAA,BBB,CCCは順番に並んでいるので、位置番号が目的の数字と対応すると考えられます。
[コンボボックス]のメソッド「現在選択されている項目の位置を取得する()」で要素の選択位置番号が取得できます。
但し取得される数値は「0,1,2」のいずれかですので、[任意精度整数格納変数]を使って「値を1増やし」ます。
例えば
1)[任意精度整数格納変数]「数値を文字列で設定する(String)」
<引数>取得方法:メソッド戻り値、コンポーネント:コンボボックス
メソッド/値:現在選択されている項目の位置を取得する
2)[任意精度整数格納変数]「値を1増やす()」
3)[文字列格納変数]
「指定した文字列と一致する最初の文字列を置換する(String,String)」
<引数0>置換えの被対象となる文字列
<引数1>取得方法:メソッド戻り値、
コンポーネント:任意精度整数格納変数
メソッド/値:数値(BigInteger)を取得する
とします。
備考:「実現したい処理」の「Q&A187」にも掲載。