初心者のFileMaker pro Q&A (旧掲示板)

みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。

1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

You are not logged in.

Announcement

新しい掲示板は、こちら:https://fm-aid.com/forum/t/filemaker


#1 2019-06-17 17:35:34

1ファイル内の全レコード内容を確認する方法

FileMaker Pro 17 Advanced / Windows 10

システムAにはConfigというテーブルがあり、そのテーブルには
zg_DeviceVerとDeviceVerという2つのフィールドがあります。
利用者がiPhone端末の機種を選択するレイアウトがあり、
レイアウト編集画面右部で、
データを表示「Config::zg_DeviceVer」
コントロールスタイル「ドロップダウンリスト」
値一覧「DeviceVer」
と設定しています。
値一覧には「iPhone6」「iPhone6Plus」・・・
とiPhoneの世代を表す複数の値(文字列)が格納されている状態です。
この状態で「データベースの管理」を確認すると、
Configテーブルには2フィールド、1レコードと表示されます。

iPhoneX端末のレイアウト追加を試みたところ、
選択した端末情報のif文分岐がうまくいっていないことに気付きました。
原因調査の結果、
変数を設定 [$$DEVICE_VER; 値: ExecuteSQL( "SELECT DeviceVer FROM Config"; ""; "" )]
というスクリプトで取得した変数 $$DEVICE_VER の末尾に改行が入っていることが
if文分岐不正の原因となっていたことがわかりました。
また、「データベースの管理」を確認すると、
Configテーブルには2フィールド、2レコードと表示されました。
このレコード数は何を表しているのでしょうか?
また、どのようにすればレコードの中身を確認できるのでしょうか?

状況が伝わりにくい文章となっておりましたら申し訳ありません。
何かしら助言をいただけるととても助かります。

Offline

#2 2019-06-17 17:37:16

Re: 1ファイル内の全レコード内容を確認する方法

レイアウト追加を行う前の状態のファイルを再編集したところ、
if文も期待通りに分岐するようになりました。
また、このときのConfigテーブルは2フィールド、1レコードと表示されています。

if文がうまくいかない→変数に格納される値がおかしいとき
変数を設定 [$$TEST1; 値: ExecuteSQL( "SELECT DeviceVer FROM Config"; ""; "" )]
"iPhone6"
"iPhone6
"

変数を設定 [$$TEST2; 値: ExecuteSQL( "SELECT zg_DeviceVer FROM Config"; ""; "" )]
→ "iPhone6 iPhone6"
変数を設定 [$$TEST3; 値: ExecuteSQL( "SELECT * FROM Config"; ""; "" )]
"iPhone6 iPhone6
     iPhone6"

"iPhone6,iPhone6
,iPhone6"

変数に想定通りの値が格納されるとき
変数を設定 [$$TEST1; 値: ExecuteSQL( "SELECT DeviceVer FROM Config"; ""; "" )]
→ "iPhone6"
変数を設定 [$$TEST2; 値: ExecuteSQL( "SELECT zg_DeviceVer FROM Config"; ""; "" )]
→ "iPhone6"
変数を設定 [$$TEST3; 値: ExecuteSQL( "SELECT * FROM Config"; ""; "" )]
"iPhone6
     iPhone6"

"iPhone6,iPhone6"

Last edited by いんふれあ (2019-06-18 09:50:49)

Offline

#3 2019-06-17 19:12:02

Hiro
Member

Re: 1ファイル内の全レコード内容を確認する方法

説明に疑問な点が多々あり、問題把握できていませんが、

少なくとも、そのSQL文では複数検索結果レコードの区切りが無指定な為、
全て件連結した1行文字列で返される(※改行は有り得ない)ハズです。

また、IF文の中身も分かりませんが、例えば、
もし、「 iPhone6」の有無を判別したいのであれば、
判別式は、
PatternCount(ExecuteSQL(・・・); "iPhone6")
な感じにすれ吉では?

Offline

#4 2019-06-18 10:03:31

Re: 1ファイル内の全レコード内容を確認する方法

Hiroさん、回答ありがとうございます。

#2に誤りがあったので訂正しました。
(値の確認にはスクリプトデバッガとデータビューアを使っています)

MySQL等のデータベースにも改行文字が格納できますし、
今回も同様にどこかで改行文字が入っているのかと考えましたが、
そのようなことはないのでしょうか。
また、データビューア上で確認できるConfig::DeviceVerとConfig::zg_DeviceVerの値は
それぞれ"iPhone6"(改行なし)なのに、
$$TEST1、$$TEST2に格納される値が異なっていることを不思議に思っています。


if文の中身は、
変数を設定 [$$DEVICE_VER; 値: ExecuteSQL( "SELECT DeviceVer FROM Config"; ""; "" )]
If [$$DEVICE_VER = "iPhone6"]
  レイアウト切り替え [・・・・・・]
Else If [$$DEVICE_VER = "iPhone6Plus"]
  ・・・・・・
End If
といったものです。
PatternCountを使えばif文分岐がうまくいきそうですね、ありがとうございます。
ただ、今回の変更を加える前のファイルに再度同様の変更をしてみたらこのような問題が生じず、
期待する動作をしてくれているのでそちらを使おうと思います。


自分の理解が浅すぎて、必要な情報提示がうまくできていないと思います。
読みづらい文章にご回答いただき、ありがとうございました。

Offline

Registered users online in this topic: 0, guests: 1
[Bot] claudebot

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.009 seconds, 7 queries executed - Memory usage: 514.46 KiB (Peak: 519 KiB) ]