みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
ODBC経由で数値フィールドにUPDATE文を行うと
100.0 だと 100 に更新されてしまい
0.4だと .4に更新されてしまいます。
その項目は画面上では100.0で登録すると、そのまま登録できます。
解決する方法、または更新後にスクリプトで一括で
数値フィールドの桁数を修正する方法を教えていただければありがたいです。
お願いいたします。
Offline
環境書き忘れました。
FM19 Pro 、 WIN10
ODBC FM19_xDBC_19.4.1 64ビット
※最新のFM19_xDBC_19.5.1ではデータ取得をできなかったため、こちらを使用しています。
Offline
FMの数字タイプのフィールドは任意のテキストを保存できますが、ODBC的には数値として扱うので数値しか入れられません。
100.0は100と同じですし、0.4も.4と同じです。
表示上の桁揃えは、レイアウトモードの数字書式でやるのが普通です。書式も含めてデータとしたいなら、テキストタイプにしてください。
FMの数字タイプのフィールドは任意のテキストを保存できますが、ODBC的には数値として扱うので数値しか入れられません。
その任意のテキストを"100.0"で保存した状態にスクリプトを用いて作成する事はできないでしょうか
Offline
テキストフィールドに保村してそれをコピー、数値フィールドにペーストしてみる とか
Offline
計算値自動入力(既存値置き換え)にしておけば、SQLで変更しても適用されるようです。
計算式は厳密な条件が不明なので切り捨てで小数第1位までの例ですと
Let(
n=Int(Self*10);
Replace(n;Length(n);0;".")
)
皆様ご回答ありがとうございました。なんとかスクリプトで設定することができました。ありがとうございます!
Offline
Let (
n = Choose (
Sign ( Log ( Self ) ) + 1 ;
"0" & Int ( Self * 10 ) ;
"10" ;
Int ( Self * 10 )
) ;
Replace ( n ; Length ( n ) ; 0 ; "." )
)
の方がいいでしょう。<1 の処理を追加しています。負数の処理はいれていませんが...
Last edited by Shin (2022-10-16 11:51:04)
Offline
ああ、負数はテストしたけど<1はテストしてませんでした。まあ条件が不明でしたので1例として書きましたが、0.4が例に上がってたので手抜かりでしたね...
いずれにしても、ODBCからはあくまでも「数値」しか入れられないので、「データが抜け落ちてる」わけではありません。
FM的に何でも入れたいならテキストにしないとだめでしょう。数値の可能範囲がFMとは違うのも要注意。(doubleなので通常の使用では問題ないでしょうけど)
「最新のFM19_xDBC_19.5.1ではデータ取得をできなかった」のが気になりますが、ドライババージョンとは関係なく、FMの数字フィールドに入ってるデータはそのまま取得できないケースはあります。
と書いてから確認のためODBC経由で自己インポートしてみたら、数字の先頭37文字までしか入らず「データが抜け落ち」になってしまった。なんじゃこりゃ?
37桁を超える数字だと違うデータになってしまう?
精度超過で切り捨てられるのを予想したのだが、40桁の整数が37桁になってしまった。う~~ん??
https://help.claris.com/ja/odbc-jdbc-guide.pdf
には、「FileMaker の数字フィールドタイプには、最小 10-308 から最大
10+308 の正または負の値を最大 15 桁まで含めることができます」と書いてありますが...
16桁以上入れてしまうと結果は無保証ってこと??
Pages: 1
[ Generated in 0.006 seconds, 9 queries executed - Memory usage: 560.8 KiB (Peak: 579.28 KiB) ]