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

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

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

You are not logged in.

Announcement

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


#1 2016-03-14 22:41:35

てっちゃん
Guest

OracleDBとのODBC連携でのDATE型データの不具合について

当方、医療専門職です。
医療系パッケージのシステムがOracleDBを使っており、
そこにFilemakerを繋ぎ、医療データの閲覧や統計解析などを行うことを想定しています。

ODBCの接続自体は上手くいったのですが、
OracleDBのDATE型のデータをODBC接続でFilemakerから覗くと、「日付」のみ見えて「時刻」が脱落してしまいます。

http://filemaker-jp.custhelp.com/app/an … /a_id/9114

これは、上記のごとく仕様との立場のようです。
更に、DATE型のフィールドが(OracleDB上で)primary keyになっていると、Filemaker上で覗くと

・「時刻」が「00:00:00」以外のレコードが脱落する
・レコードの再評価をしているようで、表示までに異常に時間がかかる

という不具合が生じてしまいました。
DATE型をTIMESTAMP(0)型に変更すれば、解決できそうですが、

https://community.filemaker.com/thread/ … 0&tstart=0

なるべくならOracleDBのデータ構造を触りたくありません。
OracleDBに詳しくないのですが、システムに不具合が生じる恐れがあり、
医療システムの安定稼働のためにも手軽に行えず、
結局カスタマイズとメンテナンスにコストと手間がかかりそうです。

何か良い対応策はありませんでしょうか。ヒント等でも構いません。
どうぞ、よろしくお願いします。

環境:
Filemakerクライアント
Win 8.1 64bit
FMPA 14
Oracle instant client 12c ODBC Supplement

Oracleサーバ(某パッケージシステムデモ機の環境)
Win 7 Home premium 64bit
OracleDB 11g 11.2.0.1.0 64bit Production

#2 2016-03-14 23:29:26

てっちゃん
Guest

Re: OracleDBとのODBC連携でのDATE型データの不具合について

補足です。
OracleDBのDATE型は「年月日 時分秒」のデータを、
TIMESTAMP(a)型は「年月日 時分秒」と「小数点以下a桁の秒」のデータを保持でき、
DATE型とTIMESTAMP(0)型は共に、「年月日 時分秒」のデータを7バイトで保持できるとの認識です。

Filemakerのスクリプトの「SQLを実行」でOracleDBのテーブル、フィールド、データ型や主キーの
作成、変更や削除ができることは確認しました。

#3 2016-03-15 09:20:35

tim
Guest

Re: OracleDBとのODBC連携でのDATE型データの不具合について

「データの閲覧や統計解析など」なら、ESSでなくインポートで対処しては。

Oracleが変態すぎると思うけど、サポートするDBを限定してるESSなのに対応できてないのは何だかなあ、という感じですね。
FM10時代から放置されてるということは、現状ではOracleでDATE型に日時を入れようという人がいないということなんですかね。

#4 2016-03-15 14:21:01

てっちゃん
Guest

Re: OracleDBとのODBC連携でのDATE型データの不具合について

timさん お返事ありがとうございます。

>ESSでなくインポートで対処しては。
インポートは検討していませんでした。
Filemakerのインポートについて無知ですので勉強してみます。

「レコードのインポート」を少し触ってみた段階ですが、
DATE型の「時刻」の脱落は相変わらず起こりますが、
primary keyによるレコードの脱落は見られませんでした。

そこで、SQL Plusで
SQL> select * from nls_session_parameters where parameter = 'NLS_DATE_FORMAT';
を見ると、
PARAMETER        VALUE
--------------------------------------------------
NLS_DATE_FORMAT  RR-MM-DD
と出力フォーマットも「日付」のみになっていたので、
「レコードのインポート」の「計算済みのSQLテキスト」を
Let($sql="
SELECT \"AAA\".\"aaa\", \"AAA\".\"bbb\", to_char(\"AAA\".\"ccc\", 'yyyy/mm/dd hh24:mi:ss') FROM \"AAA\"
WHERE \"AAA\".\"bbb\" >= to_timestamp('$lastdate')";
Substitute($sql;"$lastdate";"2015/01/01 12:34:56"))
のように、 to_char(hoge, 'yyyy/mm/dd hh24:mi:ss')
で出力形式を変換してみたら、
見事に日付と時刻の両方を取得することが出来ました。

インポートには即時性がない、データをFM側に保持する必要があるなどの弱点もありそうで、
もう少し勉強してみます。

引き続き、宜しくおねがいします。

参考:
http://www.symmetric.co.jp/blog/archives/28

#5 2016-03-15 18:08:18

てっちゃん
Guest

Re: OracleDBとのODBC連携でのDATE型データの不具合について

補足です:
先ほどのスレッドでは、
DATE型データの「時刻」の脱落の原因が、出力フォーマットが「日付」のみだからのように読めますが、
試しに、

SQL> ALTER SESSION SET NLS_DATE_FORMAT='yyyy/mm/dd hh24:mi:ss';

で出力フォーマットのデフォルトを「年月日 時分秒」にして、filemakerで覗いてみました。
結果は、「時刻」の脱落は解消されませんでした。
やはり、原因は仕様のためかと推測します。

では、to_charで出力形式を変換したら、なぜ日付と時刻の両方を取得することが出来たのでしょうか。
おそらく、to_charで、データが文字通りOracleでのテキスト形式(varchar2型?)に変換され、

http://filemaker-jp.custhelp.com/app/an … /a_id/9114

の規則にしたがって、filemakerでのテキスト型でマッピングされたためかと思いました。自信はありませんが。

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.005 seconds, 9 queries executed - Memory usage: 514.11 KiB (Peak: 519.02 KiB) ]