みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
2点質問があります。
executeSQLを使い、このようなデータを取得しました。各データをフィールドに挿入したいと思います。
そこで以下のような方法で1行目のデータを取得しました。
id,価格,商品名
1,10,飴
2,99,999,掃除機
変数を設定[$変数1;ExecuteSQL("Select...")]
変数を設定[$行;Let([$行 = GetValue($変数1,1);$row=Substitute($行;",",¶),$列;"1")];$行)]
フィールド設定[table::a;GetValue($行;"1")]
フィールド設定[table::b;GetValue($行;"2")]
フィールド設定[table::c;GetValue($行;"3")]
質問1
1行を取得して、カンマを改行に置換。1列になったところをGetValueで各行にアクセスしてデータを取得するという方法を行っています。
これで問題なくデータをフィールドに設定できています。ただ、このやり方があまりスマートじゃないような気がしていますが、このような
やり方で問題ないでしょうか?
質問2
1行目は問題ないのですが、2行目は価格が「99,999」とカンマが入っています。上記のようなやり方だと、価格のカンマも改行されてしまいます。
そうすると、正しい価格をフィールドに設定できません。何か良い方法で「99,999」を取得する事ができないでしょうか?
よろしくおねがいします。
Offline
一例です。
以下のようにすると、フィールド内の値、コンマ 改行 ダブルクォーテーション に関係なく値の取得が行なえます。
変数を設定 [$query; 値:
Let([
query="
select
'$id={]'||`id`||'{]'
, ';$価格={]'||`価格`||'{]'
, ';$商品名={]'||`商品名`||'{]'
FROM `TABLE NAME`
WHERE
`日付フィールドなど` BETWEEN '{Start}' AND '{End}'
"
];
Substitute ( query ;
["`" ; "\""]
; ["{Start}" ; $Start]
; ["{End}" ; $End]
)
)]
変数を設定 [$Result; 値:ExecuteSQL ( $query ; " " ; "{" & Char ( 182 ) & "}" )/*{¶}*/]
変数を設定 [$Result; 値:Substitute ( $Result ; [ ¶ ; Char ( 182 ) ] ; [ "{" & Char ( 182 ) & "}" ; ¶ ] )]
変数を設定 [$Result; 値:/* ダブルクォーテーション処理 */ Substitute ( $Result ["\\" ; "\\\\"] ; ["\"" ; "\\\""] ; ["{]" ; "\""] )]
変数を設定 [$MAX; 値:ValueCount ( $Result )]
変数を設定 [$n; 値:1]
Loop
Exit Loop If [$n > $MAX]
変数を設定 [$ROW; 値:GetValue ( $Result ; $n )]
変数を設定 [$er; 値:Evaluate ( "Let ( [" & $ROW & "] ; 0 )" )]
/*新規レコードとか?*/
フィールド設定[table::a;$id]
フィールド設定[table::b;$価格]
フィールド設定[table::c;$商品名]
変数を設定 [$n; 値:$n+1]
End Loop
Offline
詳しいコードまで書いて頂いてありがとうございます!私の力量では直ぐに理解ができないので、
1つ1つスクリプトを読み解いて理解していきたいと思います。ありがとうございます。
Offline
こんにちは。以前紹介頂いたコードがよくわかりません。
'$id={]'||`id`||'{]'
ここの、シングルクオテーションや||や、バッククォートは何をしているんでしょうか?
また、
変数を設定 [$Result; 値:/* ダブルクォーテーション処理 */ Substitute ( $Result ["\\" ; "\\\\"] ; ["\"" ; "\\\""] ; ["{]" ; "\""] )]
の["\\" ; "\\\\"] ; ["\"" ; "\\\""] ; ["{]" ; "\""] が何をやっているのかがわかりません。
宜しくおねがいします。
Offline
質問1の方は全然問題ないと思います。
質問2の方は単純に区切り文字を","から"|"とかに変えておけばいいかと思います。
ExecutSQL(
"
SELECT
FROM
WHERE
"
;"" //ここを;"|"にする
;""
結果
1|10|飴
2|99,999|掃除機
が返ってくるので
Substitute($行;"|",¶)
でやれば99,999はそのままです。
Offline
>ここの、シングルクオテーションや||や、バッククォートは何をしているんでしょうか?
■シングルクオテーション
SQL クエリー では、シングルクオテーションで包むと文字列として扱われます。FileMakerだとダブルクォーテーションと同等。
■||
文字列などを結合します。FileMakerだと計算式内の & と同等。
■バッククォート
普通に書くと以下のように \" が多くなり見づらいので ` で代用。 実行前に置換 Substitute ( query ; ["`" ; "\""].....
select
'$id={]'||\"id\"||'{]'
, ';$価格={]'||\"価格\"||'{]'
, ';$商品名={]'||\"商品名\"||'{]'
FROM \"TABLE NAME\"
>["\\" ; "\\\\"] ; ["\"" ; "\\\""] ; ["{]" ; "\""] が何をやっているのかがわかりません。
$Result を追っていけば分かりやすいかと思います...。
最終的に
Evaluate ( "Let ( [" & $ROW & "] ; 0 )" )
で、各変数に値を格納したいので以下のようになるように色々置換しています。
$商品名="商品名¶2行目\"文字列\""
スクリプト内で書くとややこしいですね。
["\\" ; "\\\\"]
\ を \\ に置換です。
["\"" ; "\\\""]
" を \" に置換です。
私の上げたサンプルは、フィールド内の値に、コンマ 改行 ダブルクォーテーション があっても大丈夫なデータ取得方法です。
改行 ダブルクォーテーション がない場合は、calafateさんが上げている感じで良いと思います。
Offline
qb_dpさん
大変勉強になります。
Offline
Pages: 1
[ Generated in 0.046 seconds, 14 queries executed - Memory usage: 521.57 KiB (Peak: 526.11 KiB) ]